Sha256: 56c8b94fc05eeac0cd183a0bb05d4edf574dd710db5a7a9e2b2bf5d30ae87b94

Contents?: true

Size: 1.6 KB

Versions: 28

Compression:

Stored size: 1.6 KB

Contents

require 'singleton'

class Puppeteer::QueryHandlerManager
  include Singleton

  def query_handlers
    @query_handlers ||= {
      aria: Puppeteer::AriaQueryHandler.new,
    }
  end

  private def default_handler
    @default_handler ||= Puppeteer::CustomQueryHandler.new(
      query_one: '(element, selector) => element.querySelector(selector)',
      query_all: '(element, selector) => element.querySelectorAll(selector)',
    )
  end

  class Result
    def initialize(query_handler:, selector:)
      @query_handler = query_handler
      @selector = selector
    end

    def query_one(element_handle)
      @query_handler.query_one(element_handle, @selector)
    end

    def wait_for(dom_world, visible:, hidden:, timeout:)
      @query_handler.wait_for(dom_world, @selector, visible: visible, hidden: hidden, timeout: timeout)
    end

    def query_all(element_handle)
      @query_handler.query_all(element_handle, @selector)
    end

    def query_all_array(element_handle)
      @query_handler.query_all_array(element_handle, @selector)
    end
  end

  def detect_query_handler(selector)
    unless /^[a-zA-Z]+\// =~ selector
      return Result.new(
        query_handler: default_handler,
        selector: selector,
      )
    end

    chunk = selector.split("/")
    name = chunk.shift
    updated_selector = chunk.join("/")

    query_handler = query_handlers[name.to_sym]

    unless query_handler
      raise ArgumentError.new("Query set to use \"#{name}\", but no query handler of that name was found")
    end

    Result.new(
      query_handler: query_handler,
      selector: updated_selector,
    )
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
puppeteer-ruby-0.39.0 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.38.0 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.37.4 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.37.3 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.37.2 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.37.1 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.37.0 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.36.0 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.35.1 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.35.0 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.34.3 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.34.2 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.34.1 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.34.0 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.33.0 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.32.4 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.32.3 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.32.2 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.32.1 lib/puppeteer/query_handler_manager.rb
puppeteer-ruby-0.32.0 lib/puppeteer/query_handler_manager.rb