Skip to content

Commit 6d3f25a

Browse files
committed
Better interface for DSL module, 16
1 parent 7b4624c commit 6d3f25a

2 files changed

Lines changed: 20 additions & 16 deletions

File tree

lib/validation.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ defmodule Validation do
66
@doc """
77
Creates a schema using the DSL
88
"""
9-
defmacro schema(schema_spec) do
9+
defmacro schema(do: spec) do
10+
spec = Macro.escape(spec)
1011
quote do
11-
require Validation.DSL
12-
Validation.DSL.build_schema(unquote(schema_spec))
12+
Validation.DSL.parse_schema(unquote(spec))
1313
end
1414
end
1515
end

lib/validation/dsl.ex

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,39 @@ defmodule Validation.DSL do
33
Functions that make it simple to create schemas
44
"""
55

6+
alias Validation.Predicates
7+
alias Validation.Rules
8+
alias Validation.Schema
9+
10+
@type schema_ast :: any
11+
612
@doc """
713
Creates a schema from the AST specification
814
"""
9-
defmacro build_schema(do: rule_spec) do
10-
rule_spec = Macro.escape(rule_spec)
11-
quote do
12-
rules = Validation.DSL.parse_rules(unquote(rule_spec))
13-
Validation.Schema.build(rules, %{})
14-
end
15+
@spec parse_schema(schema_ast) :: Schema.t
16+
def parse_schema(spec) do
17+
rules = parse_rules(spec)
18+
Schema.build(rules, %{})
1519
end
1620

17-
def parse_rules({:__block__, _, rules}) when is_list(rules) do
21+
defp parse_rules({:__block__, _, rules}) when is_list(rules) do
1822
rules
1923
|> Enum.flat_map(&parse_rules/1)
2024
end
21-
def parse_rules({:required, _, [field]}) do
22-
key_rule = Validation.Rules.RequiredKey.build(field)
25+
defp parse_rules({:required, _, [field]}) do
26+
key_rule = Rules.RequiredKey.build(field)
2327
[key_rule]
2428
end
25-
def parse_rules({:required, _, [field, predicate_spec]}) do
29+
defp parse_rules({:required, _, [field, predicate_spec]}) do
2630
predicate = parse_predicate(predicate_spec)
2731

28-
value_rule = Validation.Rules.Value.build(field, predicate)
29-
key_rule = Validation.Rules.RequiredKey.build(field)
32+
value_rule = Rules.Value.build(field, predicate)
33+
key_rule = Rules.RequiredKey.build(field)
3034

3135
[key_rule, value_rule]
3236
end
3337

3438
defp parse_predicate({:filled?, _, nil}) do
35-
Validation.Predicates.Filled.build
39+
Predicates.Filled.build
3640
end
3741
end

0 commit comments

Comments
 (0)