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) ⇒ Object



298
299
300
# File 'lib/coradoc/query.rb', line 298

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

Instance Method Details

#query(document, selector) ⇒ Object



302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# File 'lib/coradoc/query.rb', line 302

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

  return query_multiple(document, selector.split(',').map(&:strip)) if selector.include?(',')

  return query_with_combinators(document, selector) if selector.include?('>') || selector.include?(' ')

  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