Class: Coradoc::Query::ResultSet

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(elements = []) ⇒ ResultSet

Create a new result set

Parameters:



301
302
303
# File 'lib/coradoc/query.rb', line 301

def initialize(elements = [])
  @elements = Array(elements).compact
end

Instance Attribute Details

#elementsArray<CoreModel::Base> (readonly)

Returns Matched elements.

Returns:



296
297
298
# File 'lib/coradoc/query.rb', line 296

def elements
  @elements
end

Instance Method Details

#[](index) ⇒ CoreModel::Base?

Get element at index

Parameters:

  • index (Integer)

    Element index

Returns:



317
318
319
# File 'lib/coradoc/query.rb', line 317

def [](index)
  @elements[index]
end

#each {|CoreModel::Base| ... } ⇒ Enumerator

Iterate over elements

Yields:

Returns:

  • (Enumerator)


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

Returns:

  • (Boolean)


332
333
334
# File 'lib/coradoc/query.rb', line 332

def empty?
  @elements.empty?
end

#filter(selector) ⇒ ResultSet

Filter results with an additional selector

Parameters:

  • selector (String)

    CSS-like selector

Returns:



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

#firstCoreModel::Base?

Get first element

Returns:



339
340
341
# File 'lib/coradoc/query.rb', line 339

def first
  @elements.first
end

#inspectString

Pretty print representation

Returns:

  • (String)


405
406
407
# File 'lib/coradoc/query.rb', line 405

def inspect
  "#<Coradoc::Query::ResultSet count=#{length}>"
end

#lastCoreModel::Base?

Get last element

Returns:



346
347
348
# File 'lib/coradoc/query.rb', line 346

def last
  @elements.last
end

#lengthInteger Also known as: size

Number of matched elements

Returns:

  • (Integer)


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

Yields:

Returns:



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

Parameters:

  • selector (String)

    CSS-like selector

Returns:



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

Yields:

Returns:



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

Yields:

Returns:



383
384
385
# File 'lib/coradoc/query.rb', line 383

def select(&block)
  ResultSet.new(@elements.select(&block))
end

#to_aArray<CoreModel::Base>

Convert to array

Returns:



398
399
400
# File 'lib/coradoc/query.rb', line 398

def to_a
  @elements.dup
end