Class: Coradoc::Query::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/query.rb

Overview

Query engine for executing selectors

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.query(document, selector) ⇒ ResultSet

Query a document or element

Parameters:

  • document (CoreModel::Base)

    Root document/element

  • selector (String)

    CSS-like selector

Returns:



418
419
420
# File 'lib/coradoc/query.rb', line 418

def self.query(document, selector)
  new.query(document, selector)
end

Instance Method Details

#query(document, selector) ⇒ ResultSet

Query document with selector

Parameters:

  • document (CoreModel::Base)

    Root element

  • selector (String)

    CSS-like selector

Returns:



427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
# File 'lib/coradoc/query.rb', line 427

def query(document, selector)
  return ResultSet.new if document.nil? || selector.to_s.strip.empty?

  # Handle comma-separated selectors
  return query_multiple(document, selector.split(',').map(&:strip)) if selector.include?(',')

  # Handle descendant combinator (space) and child combinator (>)
  return query_with_combinators(document, selector) if selector.include?('>') || selector.include?(' ')

  # Simple single selector
  parsed = Selector.parse(selector)
  results = []

  traverse(document) do |element, siblings, index|
    if parsed.matches?(element)
      next if parsed.pseudo_classes.any? && !parsed.matches_pseudo_classes?(element, siblings: siblings,
                                                                                     index: index)

      results << element
    end
  end

  ResultSet.new(results)
end