class Spidy::Binder::Xml

Bind xml and convert to object

Public Class Methods

let(name, query = nil, &block) click to toggle source
# File lib/spidy/binder/xml.rb, line 7
def self.let(name, query = nil, &block)
  @attribute_names ||= []
  @attribute_names << name

  return define_method(name) { xml.at(query)&.text&.strip } if block.nil?

  define_method(name) do
    if query.present?
      instance_exec(xml.at(query), &block)
    else
      instance_exec(&block)
    end
  rescue StandardError => e
    fail Spidy::Binder::Error, "spidy(#{@define_name})##{name} => #{e.message}"
  end
end