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
-
.ast_node_to_delete_if(expr, &block) ⇒ Interprteters::Base
Return a DeleteIf interpreter for the given AST node.
-
.ast_node_to_deleter(expr) ⇒ Interprteters::Base
Return a Deleter interpreter for the given AST node.
-
.ast_node_to_interpreter(expr) ⇒ Interprteters::Base
Return an interpreter for the given AST node.
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.
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.
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.