Module: Janeway::Interpreters::TreeConstructor

Defined in:
lib/janeway/interpreters/tree_constructor.rb

Overview

Constructs a tree of interpreter objects.

It is used when an iterator method such as #each has been called to construct the chain of interpreter objects to handle the query.

Defined Under Namespace

Classes: Literal

Class Method Summary collapse

Class Method Details

.ast_node_to_delete_if(expr, &block) ⇒ Interprteters::Base

Return a DeleteIf interpreter for the given AST node. This interpreter deletes matched values, but only after yielding to a block that returns a truthy value.

Parameters:

Returns:

  • (Interprteters::Base)


73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/janeway/interpreters/tree_constructor.rb', line 73

def self.ast_node_to_delete_if(expr, &block)
  case expr
  when AST::IndexSelector then IndexSelectorDeleteIf.new(expr, &block)
  when AST::ArraySliceSelector then ArraySliceSelectorDeleteIf.new(expr, &block)
  when AST::NameSelector then NameSelectorDeleteIf.new(expr, &block)
  when AST::FilterSelector then FilterSelectorDeleteIf.new(expr, &block)
  when AST::WildcardSelector then WildcardSelectorDeleteIf.new(expr, &block)
  when AST::ChildSegment then ChildSegmentDeleteIf.new(expr, &block)
  when AST::RootNode then RootNodeDeleteIf.new(expr, &block)
  else
    raise "Unknown AST expression: #{expr.inspect}"
  end
end

.ast_node_to_deleter(expr) ⇒ Interprteters::Base

Return a Deleter interpreter for the given AST node. This interpreter deletes matched values.

Parameters:

Returns:

  • (Interprteters::Base)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/janeway/interpreters/tree_constructor.rb', line 52

def self.ast_node_to_deleter(expr)
  case expr
  when AST::IndexSelector then IndexSelectorDeleter.new(expr)
  when AST::ArraySliceSelector then ArraySliceSelectorDeleter.new(expr)
  when AST::NameSelector then NameSelectorDeleter.new(expr)
  when AST::FilterSelector then FilterSelectorDeleter.new(expr)
  when AST::WildcardSelector then WildcardSelectorDeleter.new(expr)
  when AST::ChildSegment then ChildSegmentDeleter.new(expr)
  when AST::RootNode then RootNodeDeleter.new(expr)
  when nil then nil # caller has no @next node
  else
    raise "Unknown AST expression: #{expr.inspect}"
  end
end

.ast_node_to_interpreter(expr) ⇒ Interprteters::Base

Return an interpreter for the given AST node. This interpreter forwards matcheed values to the next interpreter, or returns them if there is no next interpreter.

Parameters:

Returns:

  • (Interprteters::Base)


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/janeway/interpreters/tree_constructor.rb', line 26

def self.ast_node_to_interpreter(expr)
  case expr
  when AST::RootNode then Interpreters::RootNodeInterpreter.new(expr)
  when AST::ArraySliceSelector then Interpreters::ArraySliceSelectorInterpreter.new(expr)
  when AST::IndexSelector then Interpreters::IndexSelectorInterpreter.new(expr)
  when AST::NameSelector then Interpreters::NameSelectorInterpreter.new(expr)
  when AST::WildcardSelector then Interpreters::WildcardSelectorInterpreter.new(expr)
  when AST::FilterSelector then Interpreters::FilterSelectorInterpreter.new(expr)
  when AST::ChildSegment then Interpreters::ChildSegmentInterpreter.new(expr)
  when AST::DescendantSegment then Interpreters::DescendantSegmentInterpreter.new(expr)
  when AST::BinaryOperator then Interpreters::BinaryOperatorInterpreter.new(expr)
  when AST::UnaryOperator then Interpreters::UnaryOperatorInterpreter.new(expr)
  when AST::CurrentNode then Interpreters::CurrentNodeInterpreter.new(expr)
  when AST::Function then Interpreters::FunctionInterpreter.new(expr)
  when AST::StringType, AST::Number, AST::Null, AST::Boolean then Literal.new expr.value
  when nil then nil # caller has no @next node
  else
    raise "Unknown AST expression: #{expr.inspect}"
  end
end