Class: MARC::Spec::Queries::Query
- Inherits:
-
Object
- Object
- MARC::Spec::Queries::Query
- Includes:
- Part
- Defined in:
- lib/marc/spec/queries/query.rb
Instance Attribute Summary collapse
-
#condition ⇒ Object
readonly
Returns the value of attribute condition.
-
#selector ⇒ Object
readonly
Returns the value of attribute selector.
-
#subqueries ⇒ Object
readonly
Returns the value of attribute subqueries.
-
#tag ⇒ Object
readonly
Returns the value of attribute tag.
Instance Method Summary collapse
-
#execute(executor, context_fields, context_result = nil) ⇒ Object
TODO: don’t support nested subqueries.
-
#initialize(tag: nil, selector: nil, condition: nil, subqueries: []) ⇒ Query
constructor
TODO: separate factory methods for possible cases? (see transform.rb) TODO: separate query (w/o subqueries) from wrapper w/subqueries?.
- #tag_str ⇒ Object
- #to_s ⇒ Object
Methods included from Part
Constructor Details
#initialize(tag: nil, selector: nil, condition: nil, subqueries: []) ⇒ Query
TODO: separate factory methods for possible cases? (see transform.rb) TODO: separate query (w/o subqueries) from wrapper w/subqueries?
13 14 15 16 17 18 19 |
# File 'lib/marc/spec/queries/query.rb', line 13 def initialize(tag: nil, selector: nil, condition: nil, subqueries: []) @tag = ensure_type(tag, Tag, allow_nil: true) # TODO: do we need the Selector interface at all? @selector = ensure_type(selector, Applicable, allow_nil: true) @condition = ensure_type(condition, Condition, allow_nil: true) @subqueries = subqueries.map { |sq| ensure_type(sq, Query) } end |
Instance Attribute Details
#condition ⇒ Object (readonly)
Returns the value of attribute condition.
9 10 11 |
# File 'lib/marc/spec/queries/query.rb', line 9 def condition @condition end |
#selector ⇒ Object (readonly)
Returns the value of attribute selector.
9 10 11 |
# File 'lib/marc/spec/queries/query.rb', line 9 def selector @selector end |
#subqueries ⇒ Object (readonly)
Returns the value of attribute subqueries.
9 10 11 |
# File 'lib/marc/spec/queries/query.rb', line 9 def subqueries @subqueries end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
9 10 11 |
# File 'lib/marc/spec/queries/query.rb', line 9 def tag @tag end |
Instance Method Details
#execute(executor, context_fields, context_result = nil) ⇒ Object
TODO: don’t support nested subqueries
35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/marc/spec/queries/query.rb', line 35 def execute(executor, context_fields, context_result = nil) fields = tag ? executor.apply_tag(tag) : context_fields return [] if fields.empty? field_results = root_results(fields, executor, context_result) return field_results if subqueries.empty? fields.each_with_object([]) do |field, results| subqueries.each do |subquery| subquery_results = subquery.execute(executor, [field]) results.concat(subquery_results) end end end |
#tag_str ⇒ Object
21 22 23 |
# File 'lib/marc/spec/queries/query.rb', line 21 def tag_str tag.to_s if tag end |
#to_s ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/marc/spec/queries/query.rb', line 25 def to_s StringIO.new.tap do |out| out << tag if tag out << selector if selector out << "{#{condition}}" if condition out << subqueries.join end.string end |