Class: Appfuel::Repository::ExprTransform
- Inherits:
-
Parslet::Transform
- Object
- Parslet::Transform
- Appfuel::Repository::ExprTransform
- Defined in:
- lib/appfuel/storage/repository/expr_transform.rb
Overview
A PEG (Parser Expression Grammer) transformer for our domain language.
Direct Known Subclasses
Class Method Summary collapse
- .build_conjunction(op, data) ⇒ Object
- .build_conjunction_node(data) ⇒ Object
- .build_domain_attrs(domain_attr) ⇒ Object
Class Method Details
.build_conjunction(op, data) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/appfuel/storage/repository/expr_transform.rb', line 34 def self.build_conjunction(op, data) left = build_conjunction_node(data[:left]) right = build_conjunction_node(data[:right]) ExprConjunction.new(op, left, right) end |
.build_conjunction_node(data) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/appfuel/storage/repository/expr_transform.rb', line 41 def self.build_conjunction_node(data) if data.is_a?(Expr) || data.is_a?(ExprConjunction) node = data elsif data.key?(:root) node = data[:root] elsif data.key?(:domain_expr) node = data[:domain_expr] elsif data.key?(:and) || data.key?(:or) op = data.key?(:and) ? :and : :or node = build_conjunction(op, data[op]) end node end |
.build_domain_attrs(domain_attr) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/appfuel/storage/repository/expr_transform.rb', line 55 def self.build_domain_attrs(domain_attr) attr_list = [] if domain_attr.is_a?(Hash) attr_list << domain_attr[:attr_label].to_s else domain_attr.each do |label| attr_list << label[:attr_label].to_s end end attr_list end |