Module: Nokogiri::Decorators::Slop

Defined in:
lib/nokogiri/decorators/slop.rb

Overview

The Slop decorator implements method missing such that a methods may be used instead of XPath or CSS. See Nokogiri.Slop

Constant Summary collapse

XPATH_PREFIX =

The default XPath search context for Slop

"./"

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object

look for node with name. See Nokogiri.Slop



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/nokogiri/decorators/slop.rb', line 14

def method_missing(name, *args, &block)
  if args.empty?
    list = xpath("#{XPATH_PREFIX}#{name.to_s.sub(/^_/, "")}")
  elsif args.first.is_a?(Hash)
    hash = args.first
    if hash[:css]
      list = css("#{name}#{hash[:css]}")
    elsif hash[:xpath]
      conds = Array(hash[:xpath]).join(" and ")
      list = xpath("#{XPATH_PREFIX}#{name}[#{conds}]")
    end
  else
    CSS::Parser.without_cache do
      list = xpath(
        *CSS.xpath_for("#{name}#{args.first}", prefix: XPATH_PREFIX),
      )
    end
  end

  super if list.empty?
  list.length == 1 ? list.first : list
end

Instance Method Details

#respond_to_missing?(name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
# File 'lib/nokogiri/decorators/slop.rb', line 37

def respond_to_missing?(name, include_private = false)
  list = xpath("#{XPATH_PREFIX}#{name.to_s.sub(/^_/, "")}")

  !list.empty?
end