Class: Appfuel::Repository::ExprTransform

Inherits:
Parslet::Transform
  • Object
show all
Defined in:
lib/appfuel/storage/repository/expr_transform.rb

Overview

A PEG (Parser Expression Grammer) transformer for our domain language.

Direct Known Subclasses

SearchTransform

Class Method Summary collapse

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