class Pincers::Core::Helpers::Query
Attributes
lang[R]
limit[R]
query[R]
Public Class Methods
build_from_options(_backend, _selector, _options = {}, &_block)
click to toggle source
# File lib/pincers/core/helpers/query.rb, line 7 def self.build_from_options(_backend, _selector, _options = {}, &_block) limit = _options.delete(:limit) lang = :xpath exp = nil if _selector parser = Pincers::CSS::Parser.new _selector if parser.is_extended? exp = parser.to_xpath('.//') # Should we use // for root? exp = exp.first if exp.length == 1 else lang = :css exp = _selector end elsif _options[:xpath] exp = _options[:xpath] else builder = Pincers::Support::XPathBuilder.new _options _block.call builder unless _block.nil? exp = builder.expression end self.new _backend, lang, exp, limit end
new(_backend, _lang, _query, _limit)
click to toggle source
# File lib/pincers/core/helpers/query.rb, line 34 def initialize(_backend, _lang, _query, _limit) @backend = _backend @lang = _lang @query = _query @limit = _limit end
Public Instance Methods
execute(_elements, _force_limit = nil)
click to toggle source
# File lib/pincers/core/helpers/query.rb, line 41 def execute(_elements, _force_limit = nil) fun = case @lang when :xpath then :search_by_xpath else :search_by_css end query_elements _elements, fun, _force_limit || @limit end
Private Instance Methods
explode_elements(_elements) { |element, q| ... }
click to toggle source
# File lib/pincers/core/helpers/query.rb, line 61 def explode_elements(_elements) _elements.each do |element| if @query.is_a? Array @query.each { |q| yield element, q } else yield element, @query end end end
query_elements(_elements, _fun, _limit)
click to toggle source
# File lib/pincers/core/helpers/query.rb, line 51 def query_elements(_elements, _fun, _limit) elements = [] explode_elements(_elements) do |element, query| limit = _limit.nil? ? nil : _limit - elements.count elements += @backend.send(_fun, element, query, limit) break if !_limit.nil? && elements.length >= _limit end elements end