Sha256: 56db43eaddcb633a66165616639386b3dfe0dd016cabc8eddb540a6e3d3c2740

Contents?: true

Size: 1.27 KB

Versions: 2

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module ProxyFetcher
  # HTML document abstraction class. Used to work with different HTML parser adapters
  # such as Nokogiri, Oga or a custom one. Stores <i>backend</i< that will handle all
  # the DOM manipulation logic.
  class Document
    # @!attribute [r] backend
    #   @return [Object] Backend object that handles DOM processing
    attr_reader :backend

    # Parses raw HTML data to abstract ProxyFetcher document.
    #
    # @param data [String] HTML
    #
    # @return [ProxyFetcher::Document]
    #   ProxyFetcher document model
    #
    def self.parse(data)
      new(ProxyFetcher.config.adapter_class.parse(data))
    end

    # Initialize abstract ProxyFetcher HTML Document
    #
    # @return [Document]
    #
    def initialize(backend)
      @backend = backend
    end

    # Searches elements by XPath selector.
    #
    # @return [Array<ProxyFetcher::Document::Node>]
    #   collection of nodes
    #
    def xpath(*args)
      backend.xpath(*args).map { |node| backend.proxy_node.new(node) }
    end

    # Searches elements by CSS selector.
    #
    # @return [Array<ProxyFetcher::Document::Node>]
    #   collection of nodes
    #
    def css(*args)
      backend.css(*args).map { |node| backend.proxy_node.new(node) }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
proxy_fetcher-0.10.2 lib/proxy_fetcher/document.rb
proxy_fetcher-0.10.1 lib/proxy_fetcher/document.rb