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
- #any_results?(executor, context_fields, context_result = nil) ⇒ Boolean
-
#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?
14 15 16 17 18 19 20 |
# File 'lib/marc/spec/queries/query.rb', line 14 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.
10 11 12 |
# File 'lib/marc/spec/queries/query.rb', line 10 def condition @condition end |
#selector ⇒ Object (readonly)
Returns the value of attribute selector.
10 11 12 |
# File 'lib/marc/spec/queries/query.rb', line 10 def selector @selector end |
#subqueries ⇒ Object (readonly)
Returns the value of attribute subqueries.
10 11 12 |
# File 'lib/marc/spec/queries/query.rb', line 10 def subqueries @subqueries end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
10 11 12 |
# File 'lib/marc/spec/queries/query.rb', line 10 def tag @tag end |
Instance Method Details
#any_results?(executor, context_fields, context_result = nil) ⇒ Boolean
43 44 45 46 47 48 |
# File 'lib/marc/spec/queries/query.rb', line 43 def any_results?(executor, context_fields, context_result = nil) fields = tag_or_context_fields(executor, context_fields) return false if fields.empty? any_field_results?(executor, fields, context_result) end |
#execute(executor, context_fields, context_result = nil) ⇒ Object
TODO: don’t support nested subqueries
36 37 38 39 40 41 |
# File 'lib/marc/spec/queries/query.rb', line 36 def execute(executor, context_fields, context_result = nil) fields = tag_or_context_fields(executor, context_fields) return [] if fields.empty? field_results(executor, fields, context_result) end |
#tag_str ⇒ Object
22 23 24 |
# File 'lib/marc/spec/queries/query.rb', line 22 def tag_str tag.to_s if tag end |
#to_s ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/marc/spec/queries/query.rb', line 26 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 |