Module: Coradoc::Query

Defined in:
lib/coradoc/query.rb

Overview

Document querying and introspection API.

Provides CSS-like selectors for navigating and querying document trees.

Defined Under Namespace

Classes: Engine, ResultSet, Selector

Class Method Summary collapse

Class Method Details

.get_children(element) ⇒ Object



432
433
434
435
436
437
438
439
440
441
442
# File 'lib/coradoc/query.rb', line 432

def get_children(element)
  return [] unless element

  if element.is_a?(CoreModel::StructuralElement) && element.children&.any?
    element.children
  elsif element.is_a?(CoreModel::Block) && element.content
    Array(element.content).select { |c| c.is_a?(CoreModel::Base) }
  else
    []
  end
end

.query(document, selector) ⇒ Object



412
413
414
# File 'lib/coradoc/query.rb', line 412

def query(document, selector)
  Engine.query(document, selector)
end

.query_within(element, selector) ⇒ Object



416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
# File 'lib/coradoc/query.rb', line 416

def query_within(element, selector)
  parsed = Selector.parse(selector)
  results = []

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

      results << child
    end
  end

  ResultSet.new(results)
end