Module: RulerCoaster::Parser
- Included in:
- RulerCoaster
- Defined in:
- lib/ruler_coaster/parser.rb
Class Method Summary collapse
Instance Method Summary collapse
- #parse(root) ⇒ Object
- #visit(node) ⇒ Object
- #visit_and(node) ⇒ Object
- #visit_contain(node) ⇒ Object
- #visit_empty(node) ⇒ Object
- #visit_equal(node) ⇒ Object
- #visit_greater_than(node) ⇒ Object
- #visit_less_than(node) ⇒ Object
- #visit_nor(node) ⇒ Object
- #visit_not(node) ⇒ Object
- #visit_not_contain(node) ⇒ Object
- #visit_not_empty(node) ⇒ Object
- #visit_not_equal(node) ⇒ Object
- #visit_or(node) ⇒ Object
- #visit_rule(node) ⇒ Object
Class Method Details
.symbolyze_keys(hash) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/ruler_coaster/parser.rb', line 65 def symbolyze_keys(hash) {}.tap do |symbolyzed_hash| hash.each do |key, value| symbolyzed_hash[key.to_sym] = \ if value.is_a?(Hash) symbolyze_keys(value) else value end end end end |
Instance Method Details
#parse(root) ⇒ Object
3 4 5 |
# File 'lib/ruler_coaster/parser.rb', line 3 def parse(root) visit(symbolyze_keys(root)) end |
#visit(node) ⇒ Object
7 8 9 |
# File 'lib/ruler_coaster/parser.rb', line 7 def visit(node) send("visit_#{node[:type]}", node) end |
#visit_and(node) ⇒ Object
11 12 13 |
# File 'lib/ruler_coaster/parser.rb', line 11 def visit_and(node) Logic::And.new(visit(node[:left]), visit(node[:right])) end |
#visit_contain(node) ⇒ Object
47 48 49 |
# File 'lib/ruler_coaster/parser.rb', line 47 def visit_contain(node) Operator::Contain.new node[:value], node[:value_type] end |
#visit_empty(node) ⇒ Object
55 56 57 |
# File 'lib/ruler_coaster/parser.rb', line 55 def visit_empty(node) Operator::Empty.new node[:value], node[:value_type] end |
#visit_equal(node) ⇒ Object
31 32 33 |
# File 'lib/ruler_coaster/parser.rb', line 31 def visit_equal(node) Operator::Equal.new node[:value], node[:value_type] end |
#visit_greater_than(node) ⇒ Object
39 40 41 |
# File 'lib/ruler_coaster/parser.rb', line 39 def visit_greater_than(node) Operator::GreaterThan.new node[:value], node[:value_type] end |
#visit_less_than(node) ⇒ Object
43 44 45 |
# File 'lib/ruler_coaster/parser.rb', line 43 def visit_less_than(node) Operator::LessThan.new node[:value], node[:value_type] end |
#visit_nor(node) ⇒ Object
23 24 25 |
# File 'lib/ruler_coaster/parser.rb', line 23 def visit_nor(node) Logic::Nor.new(visit(node[:left]), visit(node[:right])) end |
#visit_not(node) ⇒ Object
15 16 17 |
# File 'lib/ruler_coaster/parser.rb', line 15 def visit_not(node) Logic::Not.new(visit(node[:left]), visit(node[:right])) end |
#visit_not_contain(node) ⇒ Object
51 52 53 |
# File 'lib/ruler_coaster/parser.rb', line 51 def visit_not_contain(node) Operator::NotContain.new node[:value], node[:value_type] end |
#visit_not_empty(node) ⇒ Object
59 60 61 |
# File 'lib/ruler_coaster/parser.rb', line 59 def visit_not_empty(node) Operator::NotEmpty.new node[:value], node[:value_type] end |
#visit_not_equal(node) ⇒ Object
35 36 37 |
# File 'lib/ruler_coaster/parser.rb', line 35 def visit_not_equal(node) Operator::NotEqual.new node[:value], node[:value_type] end |