Class: HappyMapper::Element
Instance Attribute Summary
Attributes inherited from Item
#name, #namespace, #options, #tag, #type
Instance Method Summary collapse
- #find(node, namespace, xpath_options) ⇒ Object
- #handle_attributes_option(result, value, xpath_options) ⇒ Object
Methods inherited from Item
#constant, #from_xml_node, #initialize, #method_name, #typecast, #xpath
Constructor Details
This class inherits a constructor from HappyMapper::Item
Instance Method Details
#find(node, namespace, xpath_options) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/happymapper/element.rb', line 5 def find(node, namespace, ) if self.namespace # from the class definition namespace = self.namespace elsif [:namespace] namespace = [:namespace] end if [:single] result = if [:xpath] node.xpath([:xpath], ) else node.xpath(xpath(namespace), ) end if result value = yield(result.first) handle_attributes_option(result, value, ) value end else target_path = [:xpath] || xpath(namespace) node.xpath(target_path, ).collect do |item| value = yield(item) handle_attributes_option(item, value, ) value end end end |
#handle_attributes_option(result, value, xpath_options) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/happymapper/element.rb', line 35 def handle_attributes_option(result, value, ) return unless [:attributes].is_a?(Hash) result = result.first unless result.respond_to?(:attribute_nodes) return unless result.respond_to?(:attribute_nodes) result.attribute_nodes.each do |xml_attribute| next unless ( = [:attributes][xml_attribute.name.to_sym]) attribute_value = Attribute.new(xml_attribute.name.to_sym, *). from_xml_node(result, namespace, ) method_name = xml_attribute.name.tr('-', '_') value.define_singleton_method(method_name) { attribute_value } end end |