Class: MARC::Spec::Queries::Query

Inherits:
Object
  • Object
show all
Includes:
Part
Defined in:
lib/marc/spec/queries/query.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Part

#eql?, #hash, #inspect

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

#conditionObject (readonly)

Returns the value of attribute condition.



10
11
12
# File 'lib/marc/spec/queries/query.rb', line 10

def condition
  @condition
end

#selectorObject (readonly)

Returns the value of attribute selector.



10
11
12
# File 'lib/marc/spec/queries/query.rb', line 10

def selector
  @selector
end

#subqueriesObject (readonly)

Returns the value of attribute subqueries.



10
11
12
# File 'lib/marc/spec/queries/query.rb', line 10

def subqueries
  @subqueries
end

#tagObject (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

Returns:

  • (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_strObject



22
23
24
# File 'lib/marc/spec/queries/query.rb', line 22

def tag_str
  tag.to_s if tag
end

#to_sObject



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