Class: Spidy::Binder::Xml

Inherits:
Base
  • Object
show all
Defined in:
lib/spidy/binder/xml.rb

Overview

Bind xml and convert to object

Instance Attribute Summary

Attributes inherited from Base

#resource, #url

Class Method Summary collapse

Methods inherited from Base

#initialize, #to_h, #to_s

Constructor Details

This class inherits a constructor from Spidy::Binder::Base

Class Method Details

.let(name, query = nil, &block) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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