Class: XML::MappingExtensions::NodeBase
- Inherits:
-
XML::Mapping::SingleAttributeNode
- Object
- XML::Mapping::SingleAttributeNode
- XML::MappingExtensions::NodeBase
- Defined in:
- lib/xml/mapping_extensions/node_base.rb
Overview
Base class for simple single-attribute nodes that convert XML strings to object values.
Usage:
- extend this class
- override
to_value(and, optionally,to_xml_text) to do your conversion - call
::XML::Mapping.add_node_classto add your new node class
Direct Known Subclasses
Instance Method Summary collapse
-
#extract_attr_value(xml) ⇒ Object?
Implements
::XML::Mapping::SingleAttributeNode#extract_attr_value. -
#initialize(*args) ⇒ NodeBase
constructor
See
::XML::Mapping::SingleAttributeNode#initialize. -
#set_attr_value(xml, value)
Implements
::XML::Mapping::SingleAttributeNode#set_attr_value. -
#to_value(xml_text) ⇒ Object
Override this method to convert XML text to an object value.
-
#to_xml_text(value) ⇒ String
Override this method to convert object values to XML text.
Constructor Details
Instance Method Details
#extract_attr_value(xml) ⇒ Object?
Implements ::XML::Mapping::SingleAttributeNode#extract_attr_value.
25 26 27 28 29 30 31 |
# File 'lib/xml/mapping_extensions/node_base.rb', line 25 def extract_attr_value(xml) xml_text = default_when_xpath_err { @path.first(xml).text } to_value(xml_text) if xml_text rescue => e bad_value = xml_text ? "'#{xml_text}'" : 'nil' raise e, "#{@owner}.#{@attrname}: Can't parse #{bad_value} as #{self.class}: #{e.}" end |
#set_attr_value(xml, value)
Implements ::XML::Mapping::SingleAttributeNode#set_attr_value.
The object value is passed to to_xml_text for string conversion.
37 38 39 40 |
# File 'lib/xml/mapping_extensions/node_base.rb', line 37 def set_attr_value(xml, value) text = to_xml_text(value) @path.first(xml, ensure_created: true).text = text end |
#to_value(xml_text) ⇒ Object
Override this method to convert XML text to an object value
45 46 47 |
# File 'lib/xml/mapping_extensions/node_base.rb', line 45 def to_value(xml_text) # rubocop:disable Lint/UnusedMethodArgument fail NoMethodError, "#{self.class} should override #to_value to convert an XML string to an object value" end |
#to_xml_text(value) ⇒ String
Override this method to convert object values to XML text.
The default implementation simply calls to_s.
53 54 55 |
# File 'lib/xml/mapping_extensions/node_base.rb', line 53 def to_xml_text(value) value.to_s end |