Skip to content

Commit

Permalink
update for elixir 1.4
Browse files Browse the repository at this point in the history
  • Loading branch information
zambal committed Mar 24, 2017
1 parent 877f52f commit 074f2d8
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 25 deletions.
39 changes: 21 additions & 18 deletions lib/eml/compiler.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ defmodule Eml.Compiler do

# Options helper

@default_opts %{escape: true,
transform: nil,
fragment: false,
compiler: Eml.HTML.Compiler}
@default_opts [escape: true,
transform: nil,
fragment: false,
compiler: Eml.HTML.Compiler]

defp new_opts(opts), do: Dict.merge(@default_opts, opts)
defp new_opts(opts), do: Keyword.merge(@default_opts, opts)

# API

Expand All @@ -31,14 +31,14 @@ defmodule Eml.Compiler do
"""

@spec compile(Eml.t, Dict.t) :: { :safe, String.t } | Macro.t
def compile(eml, opts \\ %{}) do
@spec compile(Eml.t, Keyword.t) :: { :safe, String.t } | Macro.t
def compile(eml, opts \\ []) do
opts = new_opts(opts)
opts = Dict.merge(opts.compiler.opts(), opts)
opts = Keyword.merge(opts[:compiler].opts(), opts)
compile_node(eml, opts, []) |> to_result(opts)
end

@spec precompile(Macro.Env.t, Dict.t) :: { :safe, String.t } | Macro.t
@spec precompile(Macro.Env.t, Keyword.t) :: { :safe, String.t } | Macro.t
def precompile(env \\ %Macro.Env{}, opts) do
mod = env.module
mod_opts = if mod && Module.open?(mod),
Expand Down Expand Up @@ -71,7 +71,7 @@ defmodule Eml.Compiler do
node = node
|> maybe_transform(opts)
|> Eml.Encoder.encode()
case opts.compiler.compile_node(node, opts, chunks) do
case opts[:compiler].compile_node(node, opts, chunks) do
:unhandled ->
default_compile_node(node, opts, chunks)
s ->
Expand Down Expand Up @@ -116,7 +116,7 @@ defmodule Eml.Compiler do

@spec compile_attr(atom, Eml.t, map, [chunk]) :: [chunk]
def compile_attr(field, value, opts, chunks) do
opts.compiler.compile_attr(field, value, opts, chunks)
opts[:compiler].compile_attr(field, value, opts, chunks)
end

@spec compile_attr_value(Eml.t, map, [chunk]) :: [chunk]
Expand All @@ -128,7 +128,7 @@ defmodule Eml.Compiler do

def compile_attr_value(value, opts, chunks) do
value = Eml.Encoder.encode(value)
case opts.compiler.compile_attr_value(value, opts, chunks) do
case opts[:compiler].compile_attr_value(value, opts, chunks) do
:unhandled ->
default_compile_node(value, opts, chunks)
s ->
Expand Down Expand Up @@ -173,7 +173,7 @@ defmodule Eml.Compiler do
end
defp to_result(chunks, opts) do
template = :lists.reverse(chunks)
if opts.fragment do
if opts[:fragment] do
template
else
quote do
Expand All @@ -182,11 +182,14 @@ defmodule Eml.Compiler do
end
end

def maybe_transform(node, %{transform: fun}) when is_function(fun), do: fun.(node)
def maybe_transform(node, _opts), do: node
def maybe_transform(node, opts) do
fun = opts[:transform]
if is_function(fun), do: fun.(node), else: node
end

def maybe_escape(node, %{escape: true}), do: escape(node, "")
def maybe_escape(node, _opts), do: node
def maybe_escape(node, opts) do
if opts[:escape], do: escape(node, ""), else: node
end

def add_chunk(chunk, [{:safe, safe_chunk} | rest]) when is_binary(chunk) do
[{:safe, safe_chunk <> chunk } | rest]
Expand Down Expand Up @@ -300,7 +303,7 @@ defmodule Eml.Compiler do

@doc false
def get_assign(key, assigns, funs) do
x = Dict.get(assigns, key)
x = if is_map(assigns), do: Map.get(assigns, key), else: Keyword.get(assigns, key)
case Keyword.get(funs, key) do
nil -> x
fun -> fun.(x)
Expand Down
6 changes: 3 additions & 3 deletions lib/eml/html/compiler.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ defmodule Eml.HTML.Compiler do
import Eml.Compiler, only: [add_chunk: 2]

def opts do
%{quotes: :single}
[quotes: :single]
end

# Eml parsing
Expand All @@ -27,8 +27,8 @@ defmodule Eml.HTML.Compiler do
:unhandled
end

def compile_attr(field, value, %{quotes: q} = opts, chunks) do
quotes_char = quotes_char(q)
def compile_attr(field, value, opts, chunks) do
quotes_char = quotes_char(opts[:quotes])
field = attr_field(field)
chunks = add_chunk(" #{field}=#{quotes_char}", chunks)
chunks = Compiler.compile_attr_value(value, opts, chunks)
Expand Down
6 changes: 3 additions & 3 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ defmodule Eml.Mixfile do
name: "Eml",
source_url: "https://github.com/zambal/eml",
homepage_url: "https://github.com/zambal/eml",
deps: deps,
description: description,
package: package ]
deps: deps(),
description: description(),
package: package() ]
end

def application do
Expand Down
2 changes: 1 addition & 1 deletion test/eml_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ defmodule EmlTest do
end

test "Element macro arguments" do
assert %M{tag: :div, attrs: %{}, content: nil} == div
assert %M{tag: :div, attrs: %{}, content: nil} == div()
assert %M{tag: :div, attrs: %{}, content: "content"} == div "content"
assert %M{tag: :div, attrs: %{class: "some-class"}, content: nil} == div class: "some-class"
assert %M{tag: :div, attrs: %{class: "some-class"}, content: "content"} == div [class: "some-class"], "content"
Expand Down

0 comments on commit 074f2d8

Please sign in to comment.