xmlparsable 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,7 +22,7 @@ module XmlParsable
22
22
  end
23
23
 
24
24
  def close(element, value)
25
- parser, *arguments = @parsers[element.name]
25
+ parser, arguments = @parsers[element.name]
26
26
 
27
27
  if arguments.include?(:repeated)
28
28
  (@elements[element.name.to_sym] ||= []) << value
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe XmlParsable do
4
+
5
+ # Shortcut declaration syntax
6
+ describe "repeated elements" do
7
+ let(:parser) do
8
+ Class.new do
9
+ inner = Class.new do
10
+ include XmlParsable
11
+ repeated :a, accessor: "as"
12
+ end
13
+
14
+ include XmlParsable
15
+ element :root, inner
16
+ end
17
+ end
18
+
19
+ it "accumulates repeated elements" do
20
+ expected = ["Y", "N", "?"]
21
+ input = "<root><a>Y</a><a>N</a><a>?</a></root>"
22
+
23
+ xml = parser.parse(input)
24
+ xml.root.as.should == expected
25
+ end
26
+ end
27
+
28
+ # Non-shortcut declaration syntax
29
+ describe "repeated elements" do
30
+ let(:parser) do
31
+ Class.new do
32
+ inner = Class.new do
33
+ include XmlParsable
34
+ element :a, repeated: true, accessor: "as"
35
+ end
36
+
37
+ include XmlParsable
38
+ element :root, inner
39
+ end
40
+ end
41
+
42
+ it "accumulates repeated elements" do
43
+ expected = ["Y", "N", "?"]
44
+ input = "<root><a>Y</a><a>N</a><a>?</a></root>"
45
+
46
+ xml = parser.parse(input)
47
+ xml.root.as.should == expected
48
+ end
49
+ end
50
+
51
+
52
+ describe "non-repeated elements" do
53
+ let(:parser) do
54
+ Class.new do
55
+ inner = Class.new do
56
+ include XmlParsable
57
+ element :a, accessor: "as"
58
+ end
59
+
60
+ include XmlParsable
61
+ element :root, inner
62
+ end
63
+ end
64
+
65
+ it "stores the last-occurring element" do
66
+ expected = "?"
67
+ input = "<root><a>Y</a><a>N</a><a>?</a></root>"
68
+
69
+ xml = parser.parse(input)
70
+ xml.root.as.should == expected
71
+ end
72
+ end
73
+
74
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xmlparsable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -57,6 +57,7 @@ files:
57
57
  - spec/examples/elements/time.example
58
58
  - spec/examples/elements/xml.example
59
59
  - spec/examples/inheritance.example
60
+ - spec/examples/repeated.example
60
61
  - spec/spec_helper.rb
61
62
  homepage: https://github.com/kputnam/xmlparsable
62
63
  licenses: []
@@ -93,3 +94,4 @@ test_files:
93
94
  - spec/examples/elements/time.example
94
95
  - spec/examples/elements/xml.example
95
96
  - spec/examples/inheritance.example
97
+ - spec/examples/repeated.example