handle empty xml-elements for nested entities
This commit is contained in:
parent
dd19526c5e
commit
26b7991def
3 changed files with 19 additions and 3 deletions
|
|
@ -286,7 +286,7 @@ module DiasporaFederation
|
||||||
# @return [Entity] parsed child entity
|
# @return [Entity] parsed child entity
|
||||||
private_class_method def self.parse_entity_from_node(type, root_node)
|
private_class_method def self.parse_entity_from_node(type, root_node)
|
||||||
node = root_node.xpath(type.entity_name)
|
node = root_node.xpath(type.entity_name)
|
||||||
type.from_xml(node.first) if node.any?
|
type.from_xml(node.first) if node.any? && node.first.children.any?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Collect all nested children of that type and create an array in the data hash
|
# Collect all nested children of that type and create an array in the data hash
|
||||||
|
|
@ -296,7 +296,7 @@ module DiasporaFederation
|
||||||
# @return [Array<Entity>] array with parsed child entities
|
# @return [Array<Entity>] array with parsed child entities
|
||||||
private_class_method def self.parse_array_from_node(type, root_node)
|
private_class_method def self.parse_array_from_node(type, root_node)
|
||||||
node = root_node.xpath(type.entity_name)
|
node = root_node.xpath(type.entity_name)
|
||||||
node.map {|child| type.from_xml(child) } unless node.empty?
|
node.select {|child| child.children.any? }.map {|child| type.from_xml(child) } unless node.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Raised, if entity is not valid
|
# Raised, if entity is not valid
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ module DiasporaFederation
|
||||||
|
|
||||||
class TestNestedEntity < DiasporaFederation::Entity
|
class TestNestedEntity < DiasporaFederation::Entity
|
||||||
property :asdf
|
property :asdf
|
||||||
entity :test, TestEntity
|
entity :test, TestEntity, default: nil
|
||||||
entity :multi, [OtherEntity]
|
entity :multi, [OtherEntity]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -300,6 +300,22 @@ XML
|
||||||
expect(entity.multi.first).to be_instance_of(Entities::OtherEntity)
|
expect(entity.multi.first).to be_instance_of(Entities::OtherEntity)
|
||||||
expect(entity.multi.first.asdf).to eq("asdf")
|
expect(entity.multi.first.asdf).to eq("asdf")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "handles empty xml-element for nested entities" do
|
||||||
|
xml = <<-XML
|
||||||
|
<test_nested_entity>
|
||||||
|
<asdf>FDSA</asdf>
|
||||||
|
<test_entity/>
|
||||||
|
<other_entity/>
|
||||||
|
</test_nested_entity>
|
||||||
|
XML
|
||||||
|
|
||||||
|
entity = Entities::TestNestedEntity.from_xml(Nokogiri::XML::Document.parse(xml).root)
|
||||||
|
|
||||||
|
expect(entity.asdf).to eq("FDSA")
|
||||||
|
expect(entity.test).to be_nil
|
||||||
|
expect(entity.multi).to be_empty
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "xml_name" do
|
context "xml_name" do
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue