Class: Coradoc::Query::ResultSet
- Inherits:
-
Object
- Object
- Coradoc::Query::ResultSet
- Includes:
- Enumerable
- Defined in:
- lib/coradoc/query.rb
Overview
Query result set - collection of matched elements
Provides array-like access with additional query methods for chaining and further filtering.
Instance Attribute Summary collapse
-
#elements ⇒ Array<CoreModel::Base>
readonly
Matched elements.
Instance Method Summary collapse
-
#[](index) ⇒ CoreModel::Base?
Get element at index.
-
#each {|CoreModel::Base| ... } ⇒ Enumerator
Iterate over elements.
-
#empty? ⇒ Boolean
Check if result set is empty.
-
#filter(selector) ⇒ ResultSet
Filter results with an additional selector.
-
#first ⇒ CoreModel::Base?
Get first element.
-
#initialize(elements = []) ⇒ ResultSet
constructor
Create a new result set.
-
#inspect ⇒ String
Pretty print representation.
-
#last ⇒ CoreModel::Base?
Get last element.
-
#length ⇒ Integer
(also: #size)
Number of matched elements.
-
#map {|CoreModel::Base| ... } ⇒ ResultSet
Map over elements and return new result set.
-
#query(selector) ⇒ ResultSet
Query within each element in the result set.
-
#reject {|CoreModel::Base| ... } ⇒ ResultSet
Reject elements matching block.
-
#select {|CoreModel::Base| ... } ⇒ ResultSet
Select elements matching block.
-
#to_a ⇒ Array<CoreModel::Base>
Convert to array.
Constructor Details
#initialize(elements = []) ⇒ ResultSet
Create a new result set
301 302 303 |
# File 'lib/coradoc/query.rb', line 301 def initialize(elements = []) @elements = Array(elements).compact end |
Instance Attribute Details
#elements ⇒ Array<CoreModel::Base> (readonly)
Returns Matched elements.
296 297 298 |
# File 'lib/coradoc/query.rb', line 296 def elements @elements end |
Instance Method Details
#[](index) ⇒ CoreModel::Base?
Get element at index
317 318 319 |
# File 'lib/coradoc/query.rb', line 317 def [](index) @elements[index] end |
#each {|CoreModel::Base| ... } ⇒ Enumerator
Iterate over elements
309 310 311 |
# File 'lib/coradoc/query.rb', line 309 def each(&block) @elements.each(&block) end |
#empty? ⇒ Boolean
Check if result set is empty
332 333 334 |
# File 'lib/coradoc/query.rb', line 332 def empty? @elements.empty? end |
#filter(selector) ⇒ ResultSet
Filter results with an additional selector
354 355 356 357 358 |
# File 'lib/coradoc/query.rb', line 354 def filter(selector) parsed = Selector.parse(selector) filtered = @elements.select { |e| parsed.matches?(e) } ResultSet.new(filtered) end |
#first ⇒ CoreModel::Base?
Get first element
339 340 341 |
# File 'lib/coradoc/query.rb', line 339 def first @elements.first end |
#inspect ⇒ String
Pretty print representation
405 406 407 |
# File 'lib/coradoc/query.rb', line 405 def inspect "#<Coradoc::Query::ResultSet count=#{length}>" end |
#last ⇒ CoreModel::Base?
Get last element
346 347 348 |
# File 'lib/coradoc/query.rb', line 346 def last @elements.last end |
#length ⇒ Integer Also known as: size
Number of matched elements
324 325 326 |
# File 'lib/coradoc/query.rb', line 324 def length @elements.length end |
#map {|CoreModel::Base| ... } ⇒ ResultSet
Map over elements and return new result set
375 376 377 |
# File 'lib/coradoc/query.rb', line 375 def map(&block) ResultSet.new(@elements.map(&block)) end |
#query(selector) ⇒ ResultSet
Query within each element in the result set
364 365 366 367 368 369 |
# File 'lib/coradoc/query.rb', line 364 def query(selector) results = @elements.flat_map do |element| Query.query_within(element, selector).to_a end ResultSet.new(results.uniq) end |
#reject {|CoreModel::Base| ... } ⇒ ResultSet
Reject elements matching block
391 392 393 |
# File 'lib/coradoc/query.rb', line 391 def reject(&block) ResultSet.new(@elements.reject(&block)) end |
#select {|CoreModel::Base| ... } ⇒ ResultSet
Select elements matching block
383 384 385 |
# File 'lib/coradoc/query.rb', line 383 def select(&block) ResultSet.new(@elements.select(&block)) end |
#to_a ⇒ Array<CoreModel::Base>
Convert to array
398 399 400 |
# File 'lib/coradoc/query.rb', line 398 def to_a @elements.dup end |