pump 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +8 -1
- data/lib/pump/encoder.rb +32 -1
- data/lib/pump/json.rb +48 -23
- data/lib/pump/version.rb +1 -1
- data/lib/pump/xml.rb +11 -6
- data/lib/pump/xml/tag.rb +15 -3
- data/spec/pump/json_spec.rb +57 -6
- data/spec/pump/xml_spec.rb +47 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b23d242fff172d8de112af6c2fc6f326e101bd14
|
4
|
+
data.tar.gz: 4e369b0d6f692526571a487c1e692199b21d1efb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3593cfcda6c0a33bd2f1cdf0d7010fb6f1b627a11a33c675fa2ab0854771e8b3cd109137d26bb8cf557e41ea21345b4c2b018f0b6a0b3105fa73bfc1c16917e3
|
7
|
+
data.tar.gz: 6c366d3a85852a28c5bb536bd2daed8eaf23f1e2d14972e73fd3c951c00d0dd8dd1895450b65a21d6ab33d1d2ad13529fa0ebc5e949616c7e42969f4019d3c24
|
data/CHANGES.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
### dev
|
2
2
|
|
3
|
-
[full changelog](http://github.com/yolk/pump/compare/v0.6.
|
3
|
+
[full changelog](http://github.com/yolk/pump/compare/v0.6.3...master)
|
4
|
+
|
5
|
+
### 0.6.3 / 2013-07-26
|
6
|
+
|
7
|
+
[full changelog](http://github.com/yolk/valvat/compare/v0.6.2...v0.6.3)
|
8
|
+
|
9
|
+
* Pump::Xml allow partial output with :fields option
|
10
|
+
* Pump::JSON allow partial output with :fields option
|
4
11
|
|
5
12
|
### 0.6.2 / 2013-07-26
|
6
13
|
|
data/lib/pump/encoder.rb
CHANGED
@@ -41,6 +41,7 @@ module Pump
|
|
41
41
|
@root_name = root_name
|
42
42
|
merge_base
|
43
43
|
|
44
|
+
compile_field_map
|
44
45
|
compile
|
45
46
|
end
|
46
47
|
|
@@ -53,7 +54,14 @@ module Pump
|
|
53
54
|
# @return [String]
|
54
55
|
def encode(object, options={})
|
55
56
|
object = object.to_a if defined?(ActiveRecord::Relation) && object.is_a?(ActiveRecord::Relation)
|
56
|
-
|
57
|
+
fields_to_hash(options)
|
58
|
+
if object.is_a?(Array)
|
59
|
+
encode_array(object, options)
|
60
|
+
elsif options[:fields]
|
61
|
+
encode_partial_single(object, options)
|
62
|
+
else
|
63
|
+
encode_single(object, options)
|
64
|
+
end
|
57
65
|
end
|
58
66
|
|
59
67
|
private
|
@@ -64,6 +72,21 @@ module Pump
|
|
64
72
|
|
65
73
|
def compile_string;end
|
66
74
|
|
75
|
+
def compile_field_map
|
76
|
+
instance_eval("@fields_map = { #{compile_string_fields_map} }")
|
77
|
+
end
|
78
|
+
|
79
|
+
def compile_string_fields_map
|
80
|
+
encoder_config.map do |config|
|
81
|
+
config.keys.first
|
82
|
+
end.inject([]) do |array, name|
|
83
|
+
underscores = name.to_s.underscore
|
84
|
+
dashes = name.to_s.dasherize
|
85
|
+
array << "'#{dashes}' => true" if dashes != underscores
|
86
|
+
array << "'#{underscores}' => true"
|
87
|
+
end.join(',')
|
88
|
+
end
|
89
|
+
|
67
90
|
def merge_base
|
68
91
|
return unless @encoder_options[:base]
|
69
92
|
@base = @encoder_options.delete(:base)
|
@@ -89,5 +112,13 @@ module Pump
|
|
89
112
|
def merge_base_options
|
90
113
|
encoder_options.merge!(base.encoder_options) { |key, v1, v2| v1 }
|
91
114
|
end
|
115
|
+
|
116
|
+
def fields_to_hash(options)
|
117
|
+
return unless options[:fields]
|
118
|
+
options[:fields] = options[:fields].inject({}) do |hash, name|
|
119
|
+
hash[name.to_s.underscore.to_sym] = true if @fields_map[name.to_s]
|
120
|
+
hash
|
121
|
+
end
|
122
|
+
end
|
92
123
|
end
|
93
124
|
end
|
data/lib/pump/json.rb
CHANGED
@@ -8,13 +8,15 @@ module Pump
|
|
8
8
|
private
|
9
9
|
|
10
10
|
OJ_OPTIONS = {
|
11
|
-
:mode => :compat,
|
12
|
-
:time_format => :xmlschema,
|
11
|
+
:mode => :compat,
|
12
|
+
:time_format => :xmlschema,
|
13
13
|
:second_precision => 0
|
14
14
|
}
|
15
15
|
|
16
16
|
def compile_string
|
17
17
|
main = build_main
|
18
|
+
partial_main = build_main(:partial => true)
|
19
|
+
|
18
20
|
<<-EOV
|
19
21
|
def encode_single(object, options)
|
20
22
|
#{main}
|
@@ -24,6 +26,14 @@ module Pump
|
|
24
26
|
Oj.dump(json, OJ_OPTIONS)
|
25
27
|
end
|
26
28
|
|
29
|
+
def encode_partial_single(object, options)
|
30
|
+
#{partial_main}
|
31
|
+
unless options[:exclude_root_in_json]
|
32
|
+
json = { :'#{format_name(root_name)}' => json }
|
33
|
+
end
|
34
|
+
Oj.dump(json, OJ_OPTIONS)
|
35
|
+
end
|
36
|
+
|
27
37
|
def encode_array(objects, options)
|
28
38
|
Oj.dump(if options[:exclude_root_in_json]
|
29
39
|
objects.map do |object|
|
@@ -40,52 +50,54 @@ module Pump
|
|
40
50
|
EOV
|
41
51
|
end
|
42
52
|
|
43
|
-
def build_main
|
53
|
+
def build_main(options={})
|
44
54
|
<<-EOV
|
55
|
+
field_hash = options[:fields]
|
45
56
|
json = {}
|
46
|
-
#{build_part(encoder_config)}
|
57
|
+
#{build_part(encoder_config, 'json', options)}
|
47
58
|
EOV
|
48
59
|
end
|
49
60
|
|
50
|
-
def build_part(config, variable=
|
61
|
+
def build_part(config, variable, options, path=[])
|
51
62
|
config.inject("") do |str, config|
|
52
|
-
build_key_value_pair(str, config, variable)
|
63
|
+
build_key_value_pair(str, config, variable, options, path)
|
53
64
|
str
|
54
65
|
end
|
55
66
|
end
|
56
67
|
|
57
|
-
def build_key_value_pair(str, config, variable
|
68
|
+
def build_key_value_pair(str, config, variable, options, path)
|
58
69
|
name, method_name = config.keys.first, config.values.first
|
70
|
+
condition = build_condition(name, config, options, path)
|
59
71
|
if method_name.is_a?(Array) && !config.has_key?(:static_value)
|
60
|
-
build_hash(str, name, method_name, config, variable)
|
72
|
+
build_hash(str, name, method_name, config, variable, options, path, condition)
|
61
73
|
elsif config[:array]
|
62
|
-
build_array(str, name, method_name, config, variable)
|
74
|
+
build_array(str, name, method_name, config, variable, options, path, condition)
|
63
75
|
else
|
64
|
-
build_simple(str, name, method_name, config, variable)
|
76
|
+
build_simple(str, name, method_name, config, variable, options, path, condition)
|
65
77
|
end
|
66
78
|
end
|
67
79
|
|
68
|
-
def build_hash(str, name, method_name, config, variable)
|
69
|
-
str << "#{
|
80
|
+
def build_hash(str, name, method_name, config, variable, options, path, condition)
|
81
|
+
str << "#{condition}\n" if condition
|
70
82
|
str << "#{variable}[:'#{format_name(name)}'] = {}\n"
|
71
|
-
str << build_part(method_name, "#{variable}[:'#{format_name(name)}']")
|
72
|
-
str << "end\n" if
|
83
|
+
str << build_part(method_name, "#{variable}[:'#{format_name(name)}']", options, path.dup << name)
|
84
|
+
str << "end\n" if condition
|
73
85
|
end
|
74
86
|
|
75
|
-
def build_array(str, name, method_name, config, variable)
|
76
|
-
str << "#{
|
87
|
+
def build_array(str, name, method_name, config, variable, options, path, condition)
|
88
|
+
str << "#{condition}\n" if condition
|
77
89
|
str << "#{variable}[:'#{format_name(name)}'] = []\n"
|
78
90
|
unless config.has_key?(:static_value)
|
79
91
|
str << "object.#{method_name}.each do |object| "
|
80
92
|
str << "#{variable}[:'#{format_name(name)}'] << {}\n"
|
81
|
-
str << build_part(config[:array], "#{variable}[:'#{format_name(name)}'][-1]")
|
93
|
+
str << build_part(config[:array], "#{variable}[:'#{format_name(name)}'][-1]", options, path.dup << name)
|
82
94
|
str << "end\n"
|
83
95
|
end
|
84
|
-
str << "end\n" if
|
96
|
+
str << "end\n" if condition
|
85
97
|
end
|
86
98
|
|
87
|
-
def build_simple(str, name, method_name, config, variable)
|
88
|
-
str << "#{variable}[:'#{format_name(name)}']=#{build_value(method_name, config)}#{
|
99
|
+
def build_simple(str, name, method_name, config, variable, options, path, condition)
|
100
|
+
str << "#{variable}[:'#{format_name(name)}']=#{build_value(method_name, config)}#{condition}\n"
|
89
101
|
end
|
90
102
|
|
91
103
|
def build_value(method_name, config)
|
@@ -93,11 +105,24 @@ module Pump
|
|
93
105
|
"object.#{method_name}"
|
94
106
|
end
|
95
107
|
|
96
|
-
def build_condition(config)
|
108
|
+
def build_condition(name, config, options, path)
|
109
|
+
conditions = []
|
110
|
+
conditions << build_partial_condition(name, path) if options[:partial]
|
111
|
+
|
97
112
|
if config[:if]
|
98
|
-
|
113
|
+
conditions << "object.#{config[:if]}"
|
99
114
|
elsif config[:unless]
|
100
|
-
|
115
|
+
conditions << "!object.#{config[:unless]}"
|
116
|
+
end
|
117
|
+
|
118
|
+
conditions.any? ? " if #{conditions.join(" && ")} " : nil
|
119
|
+
end
|
120
|
+
|
121
|
+
def build_partial_condition(name, path)
|
122
|
+
if path.any?
|
123
|
+
"field_hash[:'#{path.join('.')}']"
|
124
|
+
else
|
125
|
+
"field_hash[:#{name.to_s.underscore}]"
|
101
126
|
end
|
102
127
|
end
|
103
128
|
|
data/lib/pump/version.rb
CHANGED
data/lib/pump/xml.rb
CHANGED
@@ -15,25 +15,30 @@ module Pump
|
|
15
15
|
def encode_array(objects, options)
|
16
16
|
"#{TagArray.new(root_name, {}, sub_tags, tag_options)}"
|
17
17
|
end
|
18
|
+
|
19
|
+
def encode_partial_single(object, options)
|
20
|
+
field_hash = options[:fields]
|
21
|
+
"#{Tag.new(root_name, {}, sub_tags(true), tag_options)}"
|
22
|
+
end
|
18
23
|
EOV
|
19
24
|
end
|
20
25
|
|
21
|
-
def sub_tags
|
26
|
+
def sub_tags(partial=false)
|
22
27
|
encoder_config.map do |config|
|
23
|
-
build_tag(config)
|
28
|
+
build_tag(config, partial)
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
27
|
-
def build_tag(config)
|
32
|
+
def build_tag(config, partial, path=[])
|
28
33
|
tag_name, method_name = config.keys.first, config.values.first
|
29
34
|
attrs = config[:attributes]
|
30
|
-
options = config.merge({:xml_key_style => encoder_options[:xml_key_style]})
|
35
|
+
options = config.merge({:xml_key_style => encoder_options[:xml_key_style], :partial => partial, :path => path})
|
31
36
|
if method_name.is_a?(Array)
|
32
|
-
Tag.new(tag_name, attrs, method_name.map{|conf| build_tag(conf) }, options)
|
37
|
+
Tag.new(tag_name, attrs, method_name.map{|conf| build_tag(conf, partial, path.dup << tag_name) }, options)
|
33
38
|
elsif config[:array]
|
34
39
|
options.merge!(:array_method => method_name, :array_root => tag_name)
|
35
40
|
child_root = config[:child_root] || tag_name.to_s.singularize
|
36
|
-
tags = config[:array].map{|conf| build_tag(conf) }
|
41
|
+
tags = config[:array].map{|conf| build_tag(conf, partial, path.dup << tag_name) }
|
37
42
|
TagArray.new(child_root, attrs, tags, options)
|
38
43
|
else
|
39
44
|
Tag.new(tag_name, attrs, Value.new(method_name), options)
|
data/lib/pump/xml/tag.rb
CHANGED
@@ -68,15 +68,27 @@ module Pump
|
|
68
68
|
def condition_end
|
69
69
|
return unless conditional?
|
70
70
|
|
71
|
+
conditions = []
|
72
|
+
|
73
|
+
if options[:partial]
|
74
|
+
conditions << if options[:path] && options[:path].any?
|
75
|
+
"field_hash[:'#{options[:path].join('.')}']"
|
76
|
+
else
|
77
|
+
"field_hash[:#{name.to_s.underscore}]"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
71
81
|
if options[:if]
|
72
|
-
|
82
|
+
conditions << "object.#{options[:if]}"
|
73
83
|
elsif options[:unless]
|
74
|
-
|
84
|
+
conditions << "!object.#{options[:unless]}"
|
75
85
|
end
|
86
|
+
|
87
|
+
"\" if #{conditions.join(" && ")} }" if conditions.any?
|
76
88
|
end
|
77
89
|
|
78
90
|
def conditional?
|
79
|
-
!!(options[:if] || options[:unless])
|
91
|
+
!!(options[:if] || options[:unless] || options[:partial])
|
80
92
|
end
|
81
93
|
end
|
82
94
|
end
|
data/spec/pump/json_spec.rb
CHANGED
@@ -156,14 +156,14 @@ describe Pump::Json do
|
|
156
156
|
end
|
157
157
|
|
158
158
|
context "deep hash-like nesting" do
|
159
|
-
let(:json) { Pump::Json.new('person', [{:name => :name}, {:parent => [{:name => :name}, {:age => :age}]}]
|
159
|
+
let(:json) { Pump::Json.new('person', [{:name => :name}, {:parent => [{:name => :name}, {:age => :age}]}]) }
|
160
160
|
|
161
161
|
it "returns static string" do
|
162
162
|
json.encode(person).should eql("{\"person\":{\"name\":\"Benny\",\"parent\":{\"name\":\"Benny\",\"age\":9}}}")
|
163
163
|
end
|
164
164
|
|
165
165
|
context "with static_value = nil" do
|
166
|
-
let(:json) { Pump::Json.new('person', [{:name => :name}, {:parent => [{:name => :name}, {:age => :age}], :static_value => nil}]
|
166
|
+
let(:json) { Pump::Json.new('person', [{:name => :name}, {:parent => [{:name => :name}, {:age => :age}], :static_value => nil}]) }
|
167
167
|
|
168
168
|
it "uses static value" do
|
169
169
|
json.encode(person).should eql("{\"person\":{\"name\":\"Benny\",\"parent\":null}}")
|
@@ -171,7 +171,7 @@ describe Pump::Json do
|
|
171
171
|
end
|
172
172
|
|
173
173
|
context "with static_value = {}" do
|
174
|
-
let(:json) { Pump::Json.new('person', [{:name => :name}, {:parent => [{:name => :name}, {:age => :age}], :static_value => {}}]
|
174
|
+
let(:json) { Pump::Json.new('person', [{:name => :name}, {:parent => [{:name => :name}, {:age => :age}], :static_value => {}}]) }
|
175
175
|
|
176
176
|
it "uses static value" do
|
177
177
|
json.encode(person).should eql("{\"person\":{\"name\":\"Benny\",\"parent\":{}}}")
|
@@ -187,7 +187,7 @@ describe Pump::Json do
|
|
187
187
|
]) }
|
188
188
|
|
189
189
|
let(:json) { Pump::Json.new('person', [{:name => :name}, {:children => :children,
|
190
|
-
:array => [{:name => :name}]}]
|
190
|
+
:array => [{:name => :name}]}]) }
|
191
191
|
|
192
192
|
it "returns json string" do
|
193
193
|
json.encode(person).should eql("{\"person\":{\"name\":\"Gustav\",\"children\":[{\"name\":\"Lilly\"},{\"name\":\"Lena\"}]}}")
|
@@ -195,7 +195,7 @@ describe Pump::Json do
|
|
195
195
|
|
196
196
|
context "with static_value = nil" do
|
197
197
|
let(:json) { Pump::Json.new('person', [{:name => :name}, {:children => :children,
|
198
|
-
:array => [{:name => :name}], :static_value => nil}]
|
198
|
+
:array => [{:name => :name}], :static_value => nil}]) }
|
199
199
|
it "uses static value" do
|
200
200
|
json.encode(person).should eql("{\"person\":{\"name\":\"Gustav\",\"children\":[]}}")
|
201
201
|
end
|
@@ -203,7 +203,7 @@ describe Pump::Json do
|
|
203
203
|
|
204
204
|
context "with static_value = []" do
|
205
205
|
let(:json) { Pump::Json.new('person', [{:name => :name}, {:children => :children,
|
206
|
-
:array => [{:name => :name}], :static_value => []}]
|
206
|
+
:array => [{:name => :name}], :static_value => []}]) }
|
207
207
|
it "uses static value" do
|
208
208
|
json.encode(person).should eql("{\"person\":{\"name\":\"Gustav\",\"children\":[]}}")
|
209
209
|
end
|
@@ -240,6 +240,57 @@ describe Pump::Json do
|
|
240
240
|
it "returns json string without root" do
|
241
241
|
json.encode(person, :exclude_root_in_json => true).should eql("{\"name\":\"Benny\"}")
|
242
242
|
end
|
243
|
+
|
244
|
+
it "returns json string without root on array" do
|
245
|
+
json.encode([person], :exclude_root_in_json => true).should eql("[{\"name\":\"Benny\"}]")
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
context "with :fields option" do
|
250
|
+
let(:json) { Pump::Json.new('person', [
|
251
|
+
{:name => :name}, {:age => :age}, {:last_name => :last_name},
|
252
|
+
{:parent => [{:name => :name}, {:age => :age}]}
|
253
|
+
])}
|
254
|
+
|
255
|
+
it "returns only specified fields" do
|
256
|
+
json.encode(person, :fields => ['name']).should eql("{\"person\":{\"name\":\"Benny\"}}")
|
257
|
+
json.encode(person, :fields => ['age']).should eql("{\"person\":{\"age\":9}}")
|
258
|
+
end
|
259
|
+
|
260
|
+
it "ignores unknown fields" do
|
261
|
+
json.encode(person, :fields => ['name', 'unknown']).should eql("{\"person\":{\"name\":\"Benny\"}}")
|
262
|
+
json.encode(person, :fields => ['unknown']).should eql("{\"person\":{}}")
|
263
|
+
end
|
264
|
+
|
265
|
+
it "accepts dasherized and underscored field names" do
|
266
|
+
json.encode(person, :fields => ['name', 'last-name']).should eql("{\"person\":{\"name\":\"Benny\",\"last_name\":\"Hellman\"}}")
|
267
|
+
json.encode(person, :fields => ['name', 'last_name']).should eql("{\"person\":{\"name\":\"Benny\",\"last_name\":\"Hellman\"}}")
|
268
|
+
end
|
269
|
+
|
270
|
+
context "deep hash-like nesting" do
|
271
|
+
it "adds all keys if fields contains parent" do
|
272
|
+
json.encode(person, :fields => ['name', 'parent']).should eql(
|
273
|
+
"{\"person\":{\"name\":\"Benny\",\"parent\":{\"name\":\"Benny\",\"age\":9}}}"
|
274
|
+
)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
context "deep array-like nesting" do
|
279
|
+
let(:person) {
|
280
|
+
Struct.new(:name, :age, :children).new('Gustav', 1, [
|
281
|
+
Struct.new(:name, :age).new('Lilly', 2),
|
282
|
+
Struct.new(:name, :age).new('Lena', 3)
|
283
|
+
]) }
|
284
|
+
|
285
|
+
let(:json) { Pump::Json.new('person', [{:name => :name}, {:age => :age}, {:children => :children,
|
286
|
+
:array => [{:name => :name}, {:age => :age}]}]) }
|
287
|
+
|
288
|
+
it "adds all keys if fields contains children" do
|
289
|
+
json.encode(person, :fields => ['name', 'children']).should eql(
|
290
|
+
"{\"person\":{\"name\":\"Gustav\",\"children\":[{\"name\":\"Lilly\",\"age\":2},{\"name\":\"Lena\",\"age\":3}]}}"
|
291
|
+
)
|
292
|
+
end
|
293
|
+
end
|
243
294
|
end
|
244
295
|
end
|
245
296
|
end
|
data/spec/pump/xml_spec.rb
CHANGED
@@ -332,5 +332,52 @@ describe Pump::Xml do
|
|
332
332
|
end
|
333
333
|
end
|
334
334
|
end
|
335
|
+
|
336
|
+
context "with :fields option" do
|
337
|
+
let(:xml) { Pump::Xml.new('person', [
|
338
|
+
{:name => :name}, {:age => :age}, {:last_name => :last_name},
|
339
|
+
{:parent => [{:name => :name}, {:age => :age}]}
|
340
|
+
])}
|
341
|
+
|
342
|
+
it "returns only specified fields" do
|
343
|
+
xml.encode(person, :fields => ['name']).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>Benny</name>\n</person>\n")
|
344
|
+
xml.encode(person, :fields => ['age']).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <age>9</age>\n</person>\n")
|
345
|
+
end
|
346
|
+
|
347
|
+
it "ignores unknown fields" do
|
348
|
+
xml.encode(person, :fields => ['name', 'unknown']).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>Benny</name>\n</person>\n")
|
349
|
+
xml.encode(person, :fields => ['unknown']).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n</person>\n")
|
350
|
+
end
|
351
|
+
|
352
|
+
it "accepts dasherized and underscored field names" do
|
353
|
+
xml.encode(person, :fields => ['name', 'last-name']).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>Benny</name>\n <last-name>Hellman</last-name>\n</person>\n")
|
354
|
+
xml.encode(person, :fields => ['name', 'last_name']).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>Benny</name>\n <last-name>Hellman</last-name>\n</person>\n")
|
355
|
+
end
|
356
|
+
|
357
|
+
context "deep hash-like nesting" do
|
358
|
+
it "adds all keys if fields contains parent" do
|
359
|
+
xml.encode(person, :fields => ['name', 'parent']).should eql(
|
360
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>Benny</name>\n <parent>\n <name>Benny</name>\n <age>9</age>\n </parent>\n</person>\n"
|
361
|
+
)
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
context "deep array-like nesting" do
|
366
|
+
let(:person) {
|
367
|
+
Struct.new(:name, :age, :children).new('Gustav', 1, [
|
368
|
+
Struct.new(:name, :age).new('Lilly', 2),
|
369
|
+
Struct.new(:name, :age).new('Lena', 3)
|
370
|
+
]) }
|
371
|
+
|
372
|
+
let(:xml) { Pump::Xml.new('person', [{:name => :name}, {:age => :age}, {:children => :children,
|
373
|
+
:array => [{:name => :name}, {:age => :age}]}]) }
|
374
|
+
|
375
|
+
it "adds all keys if fields contains children" do
|
376
|
+
xml.encode(person, :fields => ['name', 'children']).should eql(
|
377
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<person>\n <name>Gustav</name>\n <children type=\"array\">\n <child>\n <name>Lilly</name>\n <age>2</age>\n </child>\n <child>\n <name>Lena</name>\n <age>3</age>\n </child>\n </children>\n</person>\n"
|
378
|
+
)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
end
|
335
382
|
end
|
336
383
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pump
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Munz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07
|
11
|
+
date: 2013-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|