Open
Description
I have a case where I want to create objects of different types from the same XML, depending on the value of certain attributes. I want to declare all the attributes in a superclass and then extend that for each subclass. Unfortunately, something in the mapping initialization seems to be dependent on declaring nodes in the leaf class. If I try to load_from_xml()
on a leaf class with no nodes of its own, I get
/Users/dmoles/.rvm/gems/ruby-2.2.1/gems/xml-mapping-0.10.0/lib/xml/mapping/base.rb:343:in
`load_from_xml': undefined mapping: :_default (XML::MappingError)
Clearly there's something going on by side effect when you declare a node, but I haven't figured out what it is.
Example:
#!/usr/bin/env ruby
require 'xml/mapping'
xml_str = '<foo bar="baz"/>'
xml = REXML::Document.new(xml_str).root
# ------------------------------
# No inheritance -- works
class Foo
include XML::Mapping
text_node :bar, '@bar', default_value: nil
end
foo = Foo.load_from_xml(xml)
puts "foo.bar: #{foo.bar}"
# ------------------------------
# Inheritance + defines an extra node -- works
class Bar < Foo
include XML::Mapping
text_node :baz, '@baz', default_value: nil
end
bar = Bar.load_from_xml(xml)
puts "bar.bar: #{bar.bar}"
# ------------------------------
# Inheritance + no nodes of its own -- fails
class Baz < Foo
include XML::Mapping
end
baz = Baz.load_from_xml(xml) # <- XML::MappingError
Metadata
Metadata
Assignees
Labels
No labels