@@ -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
3741end
0 commit comments