Class: XML::MappingExtensions::TypesafeEnumNode
- Inherits:
-
NodeBase
- Object
- XML::Mapping::SingleAttributeNode
- NodeBase
- XML::MappingExtensions::TypesafeEnumNode
- Defined in:
- lib/xml/mapping_extensions/typesafe_enum_node.rb
Overview
Base class for single-attribute nodes with values that extend TypesafeEnum::Base
Usage: # for node class MyEnum typesafe_enum_node :my_enum, '@my_enum', default_value: nil, class: MyEnum
Instance Method Summary collapse
-
#initialize(*args) ⇒ TypesafeEnumNode
constructor
Creates a new TypesafeEnumNode.
-
#to_value(xml_text) ⇒ TypesafeEnum::Base?
Converts an enum value or value string to an enum instance.
-
#to_xml_text(enum_instance) ⇒ String?
Converts an enum value or value string to an enum instance.
Methods inherited from NodeBase
#extract_attr_value, #set_attr_value
Constructor Details
#initialize(*args) ⇒ TypesafeEnumNode
Creates a new XML::MappingExtensions::TypesafeEnumNode
17 18 19 20 21 |
# File 'lib/xml/mapping_extensions/typesafe_enum_node.rb', line 17 def initialize(*args) super @enum_class = @options[:class] raise ArgumentError, "No :class found for TypesafeEnumNode #{@attrname} of #{@owner}" unless @enum_class end |
Instance Method Details
#to_value(xml_text) ⇒ TypesafeEnum::Base?
Converts an enum value or value string to an enum instance
27 28 29 30 31 32 33 |
# File 'lib/xml/mapping_extensions/typesafe_enum_node.rb', line 27 def to_value(xml_text) return nil unless xml_text enum_instance = @enum_class.find_by_value(xml_text) enum_instance ||= @enum_class.find_by_value_str(xml_text) raise ArgumentError, "No instance of enum class #{@enum_class.name} found for value '#{xml_text}'" unless enum_instance enum_instance end |
#to_xml_text(enum_instance) ⇒ String?
Converts an enum value or value string to an enum instance
38 39 40 |
# File 'lib/xml/mapping_extensions/typesafe_enum_node.rb', line 38 def to_xml_text(enum_instance) enum_instance.value.to_s if enum_instance end |