updated for elixir 1.3

This commit is contained in:
Dejan Strbac 2016-07-29 15:12:39 +02:00
parent ee242ca92a
commit 98613e1a6f
5 changed files with 32 additions and 49 deletions

BIN
.DS_Store vendored

Binary file not shown.

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.DS_Store
/_build /_build
/cover /cover
/deps /deps

View File

@ -1,10 +1,8 @@
defmodule Mailex.Address do defmodule Mailex.Address do
defstruct name: nil, address: nil defstruct name: nil, address: nil
def rfc_822_format(emails) when is_list(emails), do: def rfc_822_format(emails) when is_list(emails), do:
emails |> Enum.map(&rfc_822_format(&1)) Enum.map(emails, &rfc_822_format(&1))
def rfc_822_format(email) when is_map(email) do def rfc_822_format(email) when is_map(email) do
email_address = Map.get(email, "address", Map.get(email, :address)) email_address = Map.get(email, "address", Map.get(email, :address))
@ -14,17 +12,21 @@ defmodule Mailex.Address do
"#{email_name} <#{email_address}>" "#{email_name} <#{email_address}>"
end end
def envelope_format(emails) when is_list(emails), do:
Enum.map(emails, &envelope_format(&1))
def envelope_format(email) when is_map(email), do:
"<#{Map.get(email, "address", Map.get(email, :address))}>"
defp prepare_name(email_name, address) do defp prepare_name(email_name, address) do
if email_name do email_name = case email_name do
email_name = String.strip(email_name) nil -> address
else |> String.split("@")
email_name = address |> |> List.first
String.split("@") |> |> String.split(~r/([^\w\s]|_)/)
List.first |> |> Enum.map(&String.capitalize/1)
String.split(~r/([^\w\s]|_)/) |> |> Enum.join(" ")
Enum.map(&String.capitalize/1) |> _ -> String.strip(email_name)
Enum.join(" ")
end end
if String.match?(email_name, ~r/[\(\)\<\>\@\,\;\:\"\.\[\]\\]/) do if String.match?(email_name, ~r/[\(\)\<\>\@\,\;\:\"\.\[\]\\]/) do
"\"\\\"" <> String.replace(email_name, "\"", "\\\"") <> "\\\"\"" "\"\\\"" <> String.replace(email_name, "\"", "\\\"") <> "\\\"\""
@ -33,15 +35,4 @@ defmodule Mailex.Address do
end end
end end
def envelope_format(emails) when is_list(emails), do:
emails |> Enum.map(&envelope_format(&1))
def envelope_format(email) when is_map(email) do
email_address = Map.get(email, "address", Map.get(email, :address))
"<#{email_address}>"
end
end end

View File

@ -3,15 +3,14 @@ defmodule Mailex.Render do
alias Mailex.Address alias Mailex.Address
def render(email) do def render(email) do
mimemail_args = [] mimemail_args = if email.text, do:
if email.text, do: [ { :plain, email.text } ], else: []
mimemail_args = [ { :plain, email.text } | mimemail_args] mimemail_args = if email.html, do:
if email.html, do: [ { :html, email.html } | mimemail_args], else: mimemail_args
mimemail_args = [ { :html, email.html } | mimemail_args] mimemail_args = if email.attachments, do:
if email.attachments, do: [ Enum.map(email.attachments, fn(a) -> { :attachment, a.data, a } end) | mimemail_args ], else: mimemail_args
mimemail_args = [ Enum.map(email.attachments, fn(a) -> { :attachment, a.data, a } end) | mimemail_args ]
mimemail_args |> List.flatten |> to_tuple(email) |> :mimemail.encode List.flatten(mimemail_args) |> to_tuple(email) |> :mimemail.encode
end end
@ -107,24 +106,16 @@ defmodule Mailex.Render do
def headers_for(email) do def headers_for(email) do
headers = [] headers = if email.reply_to && (length(email.reply_to) > 0), do:
[ { "Reply-To", email.reply_to |> stringify_addresses } ], else: []
if email.reply_to && (length(email.reply_to) > 0), do:
headers = [ { "Reply-To", email.reply_to |> stringify_addresses } ]
# BCC should not go into headers # BCC should not go into headers
headers = if email.cc && (length(email.cc) > 0), do:
if email.cc && (length(email.cc) > 0), do: [ { "Cc", email.cc |> stringify_addresses } | headers ], else: headers
headers = [ { "Cc", email.cc |> stringify_addresses } | headers ] headers = if email.to && (length(email.to) > 0), do:
[ { "To", email.to |> stringify_addresses } | headers ], else: headers
if email.to && (length(email.to) > 0), do: headers = if email.headers && (length(email.headers) > 0), do:
headers = [ { "To", email.to |> stringify_addresses } | headers ] headers ++ email.headers, else: headers
[ { "From", email.from |> stringify_addresses }, { "Subject", email.subject || "" } | headers ]
if email.headers && (length(email.headers) > 0), do:
headers = headers ++ email.headers
[ { "From", email.from |> stringify_addresses },
{ "Subject", email.subject || "" } | headers ]
end end

BIN
test/.DS_Store vendored

Binary file not shown.