pump 0.0.4 → 0.0.5

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.
data/lib/pump/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pump
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/pump/xml/tag.rb CHANGED
@@ -34,13 +34,13 @@ module Pump
34
34
  if level == 0
35
35
  options[:instruct] ? INSTRUCT : (tabs)
36
36
  else
37
- "\n#{tabs}"
37
+ "#{tabs}"
38
38
  end
39
39
  end
40
40
 
41
41
  def value_and_close_tag(path=nil)
42
- value = value_nodes? ? nodes.first.to_s(path) : (nodes.map(&:to_s).join << "\n")
43
- ">#{value}#{tabs unless value_nodes?}</#{name}>"
42
+ value = value_nodes? ? nodes.first.to_s(path) : ("\n" << nodes.map(&:to_s).join)
43
+ ">#{value}#{tabs unless value_nodes?}</#{name}>\n"
44
44
  end
45
45
 
46
46
  def value_and_close_tag_with_blank_check
@@ -67,7 +67,7 @@ module Pump
67
67
  end
68
68
 
69
69
  def close_blank_tag
70
- "\"/>\""
70
+ "\"/>\n\""
71
71
  end
72
72
 
73
73
  def condition_start
@@ -6,7 +6,7 @@ module Pump
6
6
  class TagArray < Node
7
7
  def initialize(name, attributes={}, nodes=[], options={})
8
8
  tag = Tag.new(name, attributes, nodes, {:level => 1, :extra_indent => options[:extra_indent]})
9
- array_root = options[:array_root] || name.pluralize
9
+ array_root = options[:array_root] || name.to_s.pluralize
10
10
  super(array_root, {}, [tag], options)
11
11
  end
12
12
 
@@ -21,11 +21,15 @@ module Pump
21
21
  end
22
22
 
23
23
  def loop_and_close_tag
24
- "\#{ objects.empty? ? \" />\" : \">#{tag_loop}#{tabs}</#{name}>\" }"
24
+ "\#{ #{objects_path}.empty? ? \" />\n\" : \">\n#{tag_loop}#{tabs}</#{name}>\n\" }"
25
+ end
26
+
27
+ def objects_path
28
+ options[:array_method] ? "object.#{options[:array_method]}" : "objects"
25
29
  end
26
30
 
27
31
  def tag_loop
28
- "\#{objects.map{|object| \"#{nodes.first}\" }.join('')}\n"
32
+ "\#{#{objects_path}.map{|object| \"#{nodes.first}\" }.join('')}"
29
33
  end
30
34
  end
31
35
  end
data/lib/pump/xml.rb CHANGED
@@ -46,6 +46,8 @@ module Pump
46
46
  tag_name, method_name = config.keys.first, config.values.first
47
47
  if method_name.is_a?(Array)
48
48
  Tag.new(tag_name, config[:attributes], method_name.map{|conf| build_tag(conf) }, config)
49
+ elsif config[:array].is_a?(Array)
50
+ TagArray.new(tag_name, config[:attributes], config[:array].map{|conf| build_tag(conf) }, config.merge({:array_method => method_name}))
49
51
  else
50
52
  Tag.new(tag_name, config[:attributes], Value.new(method_name), config)
51
53
  end
@@ -15,14 +15,14 @@ describe Pump::Xml::Tag do
15
15
  subject{ Pump::Xml::Tag.new("tag", attributes, Pump::Xml::Value.new('method'), options).to_s }
16
16
 
17
17
  it {should eql(
18
- "<tag\#{v = object.method;''}\#{v.nil? || v == '' ? \"/>\" : \">\#{v.to_s.encode(:xml => :text)}</tag>\"}"
18
+ "<tag\#{v = object.method;''}\#{v.nil? || v == '' ? \"/>\n\" : \">\#{v.to_s.encode(:xml => :text)}</tag>\n\"}"
19
19
  )}
20
20
 
21
21
  context "with :nil_check => true" do
22
22
  let(:options) { {:nil_check => true} }
23
23
 
24
24
  it {should eql(
25
- "<tag\#{v = object.method;''}\#{\" nil=\\\"true\\\"\" if v.nil?}\#{v.nil? || v == '' ? \"/>\" : \">\#{v.to_s.encode(:xml => :text)}</tag>\"}"
25
+ "<tag\#{v = object.method;''}\#{\" nil=\\\"true\\\"\" if v.nil?}\#{v.nil? || v == '' ? \"/>\n\" : \">\#{v.to_s.encode(:xml => :text)}</tag>\n\"}"
26
26
  )}
27
27
  end
28
28
 
@@ -30,14 +30,14 @@ describe Pump::Xml::Tag do
30
30
  let(:options) { {:never_blank => true} }
31
31
 
32
32
  it {should eql(
33
- "<tag>\#{object.method.to_s.encode(:xml => :text)}</tag>"
33
+ "<tag>\#{object.method.to_s.encode(:xml => :text)}</tag>\n"
34
34
  )}
35
35
 
36
36
  context "with attributes" do
37
37
  let(:attributes) { {:foo => "bar"} }
38
38
 
39
39
  it {should eql(
40
- "<tag foo=\\\"bar\\\">\#{object.method.to_s.encode(:xml => :text)}</tag>"
40
+ "<tag foo=\\\"bar\\\">\#{object.method.to_s.encode(:xml => :text)}</tag>\n"
41
41
  )}
42
42
  end
43
43
  end
@@ -46,7 +46,7 @@ describe Pump::Xml::Tag do
46
46
  let(:options) { {:skip_encoding => true} }
47
47
 
48
48
  it {should eql(
49
- "<tag\#{v = object.method;''}\#{v.nil? || v == '' ? \"/>\" : \">\#{v}</tag>\"}"
49
+ "<tag\#{v = object.method;''}\#{v.nil? || v == '' ? \"/>\n\" : \">\#{v}</tag>\n\"}"
50
50
  )}
51
51
  end
52
52
 
@@ -54,7 +54,7 @@ describe Pump::Xml::Tag do
54
54
  let(:attributes) { {:foo => "bar"} }
55
55
 
56
56
  it {should eql(
57
- "<tag foo=\\\"bar\\\"\#{v = object.method;''}\#{v.nil? || v == '' ? \"/>\" : \">\#{v.to_s.encode(:xml => :text)}</tag>\"}"
57
+ "<tag foo=\\\"bar\\\"\#{v = object.method;''}\#{v.nil? || v == '' ? \"/>\n\" : \">\#{v.to_s.encode(:xml => :text)}</tag>\n\"}"
58
58
  )}
59
59
  end
60
60
  end
@@ -69,7 +69,7 @@ describe Pump::Xml::Tag do
69
69
  subject{ tag1.to_s }
70
70
 
71
71
  it {should eql(
72
- "<root>\n <child>\#{object.method}</child>\n</root>"
72
+ "<root>\n <child>\#{object.method}</child>\n</root>\n"
73
73
  )}
74
74
  end
75
75
  end
@@ -19,7 +19,7 @@ describe Pump::Xml do
19
19
  end
20
20
 
21
21
  it "returns xml string" do
22
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Benny</name>\n</person>")
22
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Benny</name>\n</person>\n")
23
23
  end
24
24
 
25
25
  context "with array" do
@@ -28,7 +28,7 @@ describe Pump::Xml do
28
28
  let(:people) { [person] }
29
29
 
30
30
  it "returns xml string" do
31
- xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n</people>")
31
+ xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n</people>\n")
32
32
  end
33
33
  end
34
34
 
@@ -36,7 +36,7 @@ describe Pump::Xml do
36
36
  let(:people) { [person, Struct.new(:name, :age).new('Carlo', 5)] }
37
37
 
38
38
  it "returns xml string" do
39
- xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n <person>\n <name>Carlo</name>\n </person>\n</people>")
39
+ xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n <person>\n <name>Carlo</name>\n </person>\n</people>\n")
40
40
  end
41
41
  end
42
42
 
@@ -44,7 +44,7 @@ describe Pump::Xml do
44
44
  let(:people) { [] }
45
45
 
46
46
  it "returns xml string" do
47
- xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\" />")
47
+ xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\" />\n")
48
48
  end
49
49
  end
50
50
 
@@ -53,7 +53,7 @@ describe Pump::Xml do
53
53
  let(:people) { [] }
54
54
 
55
55
  it "returns xml string" do
56
- xml.encode(people).should eql("<people type=\"array\" />")
56
+ xml.encode(people).should eql("<people type=\"array\" />\n")
57
57
  end
58
58
  end
59
59
 
@@ -62,7 +62,7 @@ describe Pump::Xml do
62
62
  let(:xml) { Pump::Xml.new('person', [{:name => :name}], :instruct => false, :extra_indent => 1) }
63
63
 
64
64
  it "returns xml string" do
65
- xml.encode(people).should eql(" <people type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n </people>")
65
+ xml.encode(people).should eql(" <people type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n </people>\n")
66
66
  end
67
67
  end
68
68
 
@@ -71,7 +71,7 @@ describe Pump::Xml do
71
71
  let(:xml) { Pump::Xml.new('person', [{:name => :name}], :instruct => false, :array_root => "personas") }
72
72
 
73
73
  it "returns xml string" do
74
- xml.encode(people).should eql("<personas type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n</personas>")
74
+ xml.encode(people).should eql("<personas type=\"array\">\n <person>\n <name>Benny</name>\n </person>\n</personas>\n")
75
75
  end
76
76
  end
77
77
  end
@@ -80,7 +80,7 @@ describe Pump::Xml do
80
80
  let(:xml) { Pump::Xml.new('person', [{:name => :name}], :instruct => false) }
81
81
 
82
82
  it "returns xml string" do
83
- xml.encode(person).should eql("<person>\n <name>Benny</name>\n</person>")
83
+ xml.encode(person).should eql("<person>\n <name>Benny</name>\n</person>\n")
84
84
  end
85
85
  end
86
86
 
@@ -88,7 +88,7 @@ describe Pump::Xml do
88
88
  let(:xml) { Pump::Xml.new('person', [{:name => :name}], :instruct => false, :extra_indent => 1) }
89
89
 
90
90
  it "returns xml string" do
91
- xml.encode(person).should eql(" <person>\n <name>Benny</name>\n </person>")
91
+ xml.encode(person).should eql(" <person>\n <name>Benny</name>\n </person>\n")
92
92
  end
93
93
  end
94
94
 
@@ -101,7 +101,7 @@ describe Pump::Xml do
101
101
  end
102
102
 
103
103
  it do
104
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Benny</name>\n <age type=\"integer\">9</age>\n</person>")
104
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Benny</name>\n <age type=\"integer\">9</age>\n</person>\n")
105
105
  end
106
106
  end
107
107
 
@@ -109,7 +109,7 @@ describe Pump::Xml do
109
109
  let(:person) { Struct.new(:name, :age).new('', 9) }
110
110
 
111
111
  it do
112
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name/>\n</person>")
112
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name/>\n</person>\n")
113
113
  end
114
114
  end
115
115
 
@@ -117,14 +117,14 @@ describe Pump::Xml do
117
117
  let(:person) { Struct.new(:name, :age).new(nil, 9) }
118
118
 
119
119
  it do
120
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name/>\n</person>")
120
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name/>\n</person>\n")
121
121
  end
122
122
 
123
123
  context "and with :nil_check => true" do
124
124
  let(:xml) { Pump::Xml.new('person', [{:name => :name, :nil_check => true}]) }
125
125
 
126
126
  it do
127
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name nil=\"true\"/>\n</person>")
127
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name nil=\"true\"/>\n</person>\n")
128
128
  end
129
129
  end
130
130
  end
@@ -133,7 +133,7 @@ describe Pump::Xml do
133
133
  let(:xml) { Pump::Xml.new('person', [{:name => :name}, {:age => :age}]) }
134
134
 
135
135
  it "returns xml string" do
136
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Benny</name>\n <age>9</age>\n</person>")
136
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Benny</name>\n <age>9</age>\n</person>\n")
137
137
  end
138
138
  end
139
139
 
@@ -141,7 +141,7 @@ describe Pump::Xml do
141
141
  let(:xml) { Pump::Xml.new('person', [{"last-name" => :last_name}]) }
142
142
 
143
143
  it "returns xml string" do
144
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <last-name>Hellman</last-name>\n</person>")
144
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <last-name>Hellman</last-name>\n</person>\n")
145
145
  end
146
146
  end
147
147
 
@@ -150,7 +150,7 @@ describe Pump::Xml do
150
150
  let(:xml) { Pump::Xml.new('person', [{:at => :at, :attributes => {:type => 'date'}}]) }
151
151
 
152
152
  it "returns xml string" do
153
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"date\">2013-02-07</at>\n</person>")
153
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"date\">2013-02-07</at>\n</person>\n")
154
154
  end
155
155
  end
156
156
 
@@ -159,14 +159,14 @@ describe Pump::Xml do
159
159
  let(:xml) { Pump::Xml.new('person', [{:at => :at, :typecast => :xmlschema, :attributes => {:type => 'datetime'}}]) }
160
160
 
161
161
  it "returns xml string" do
162
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"datetime\">2013-02-07T00:00:00+01:00</at>\n</person>")
162
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"datetime\">2013-02-07T00:00:00+01:00</at>\n</person>\n")
163
163
  end
164
164
 
165
165
  context "but nil" do
166
166
  let(:person) { Struct.new(:at).new(nil) }
167
167
 
168
168
  it "returns xml string" do
169
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"datetime\"/>\n</person>")
169
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"datetime\"/>\n</person>\n")
170
170
  end
171
171
  end
172
172
  end
@@ -178,7 +178,7 @@ describe Pump::Xml do
178
178
  let(:xml) { Pump::Xml.new('person', [{:name => :name}, {:age => :age, :if => :is_young}]) }
179
179
 
180
180
  it "skips tag on false" do
181
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Gorbatschow</name>\n</person>")
181
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Gorbatschow</name>\n</person>\n")
182
182
  end
183
183
  end
184
184
 
@@ -186,7 +186,7 @@ describe Pump::Xml do
186
186
  let(:xml) { Pump::Xml.new('person', [{:name => :name}, {:age => :age, :unless => :is_old}]) }
187
187
 
188
188
  it "skips tag on false" do
189
- xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Gorbatschow</name>\n</person>")
189
+ xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <name>Gorbatschow</name>\n</person>\n")
190
190
  end
191
191
  end
192
192
 
@@ -195,17 +195,29 @@ describe Pump::Xml do
195
195
  let(:people) { [person, Struct.new(:name, :age).new('Schewardnadse', nil)] }
196
196
 
197
197
  it "skips tag on false" do
198
- xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\">\n <person>\n <name>Gorbatschow</name>\n <age>82</age>\n </person>\n <person>\n <name>Schewardnadse</name>\n </person>\n</people>")
198
+ xml.encode(people).should eql("#{XML_INSTRUCT}<people type=\"array\">\n <person>\n <name>Gorbatschow</name>\n <age>82</age>\n </person>\n <person>\n <name>Schewardnadse</name>\n </person>\n</people>\n")
199
199
  end
200
200
  end
201
201
  end
202
202
 
203
- context "deeper nesting" do
203
+ context "deep hash-like nesting" do
204
204
  let(:xml) { Pump::Xml.new('person', [{:name => :name}, {:parent => [{:name => :name}, {:age => :age}]}], :instruct => false) }
205
205
 
206
206
  it "returns xml string" do
207
- xml.encode(person).should eql("<person>\n <name>Benny</name>\n <parent>\n <name>Benny</name>\n <age>9</age>\n </parent>\n</person>")
207
+ xml.encode(person).should eql("<person>\n <name>Benny</name>\n <parent>\n <name>Benny</name>\n <age>9</age>\n </parent>\n</person>\n")
208
208
  end
209
209
  end
210
+
211
+ context "deep array-like nesting" do
212
+ let(:person) { Struct.new(:name, :children).new('Gustav', [Struct.new(:name).new('Lilly'), Struct.new(:name).new('Lena')]) }
213
+ let(:xml) { Pump::Xml.new('person', [{:name => :name}, {:child => :children, :array => [{:name => :name}]}], :instruct => false) }
214
+
215
+ it "returns xml string" do
216
+ xml.encode(person).should eql("<person>\n <name>Gustav</name>\n <children type=\"array\">\n <child>\n <name>Lilly</name>\n </child>\n <child>\n <name>Lena</name>\n </child>\n </children>\n</person>\n")
217
+ end
218
+ end
219
+
220
+
221
+
210
222
  end
211
223
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: