xmlmapper 0.5.9 → 0.6.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -4
- data/README.md +35 -35
- data/lib/xmlmapper.rb +776 -1
- data/lib/{happymapper → xmlmapper}/anonymous_mapper.rb +23 -23
- data/lib/{happymapper → xmlmapper}/attribute.rb +1 -1
- data/lib/{happymapper → xmlmapper}/element.rb +1 -1
- data/lib/{happymapper → xmlmapper}/item.rb +1 -1
- data/lib/{happymapper → xmlmapper}/supported_types.rb +2 -2
- data/lib/{happymapper → xmlmapper}/text_node.rb +1 -1
- data/lib/xmlmapper/version.rb +3 -0
- data/spec/attribute_default_value_spec.rb +1 -1
- data/spec/attributes_spec.rb +2 -2
- data/spec/fixtures/unformatted_address.xml +1 -0
- data/spec/has_many_empty_array_spec.rb +2 -2
- data/spec/ignay_spec.rb +5 -5
- data/spec/inheritance_spec.rb +6 -6
- data/spec/mixed_namespaces_spec.rb +2 -2
- data/spec/parse_with_object_to_update_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/to_xml_spec.rb +5 -5
- data/spec/to_xml_with_namespaces_spec.rb +6 -6
- data/spec/wilcard_tag_name_spec.rb +8 -8
- data/spec/wrap_spec.rb +5 -5
- data/spec/{happymapper → xmlmapper}/attribute_spec.rb +1 -1
- data/spec/{happymapper → xmlmapper}/element_spec.rb +2 -2
- data/spec/{happymapper → xmlmapper}/item_spec.rb +16 -16
- data/spec/xmlmapper/text_node_spec.rb +9 -0
- data/spec/{happymapper_parse_spec.rb → xmlmapper_parse_spec.rb} +3 -3
- data/spec/{happymapper_spec.rb → xmlmapper_spec.rb} +87 -66
- data/spec/xpath_spec.rb +5 -5
- metadata +22 -21
- data/lib/happymapper.rb +0 -776
- data/lib/happymapper/version.rb +0 -3
- data/spec/happymapper/text_node_spec.rb +0 -9
data/spec/wrap_spec.rb
CHANGED
@@ -4,13 +4,13 @@ describe "wrap which allows you to specify a wrapper element" do
|
|
4
4
|
|
5
5
|
module Wrap
|
6
6
|
class SubClass
|
7
|
-
include
|
7
|
+
include XmlMapper
|
8
8
|
tag 'subclass'
|
9
9
|
attribute :myattr, String
|
10
10
|
has_many :items, String, :tag => 'item'
|
11
11
|
end
|
12
12
|
class Root
|
13
|
-
include
|
13
|
+
include XmlMapper
|
14
14
|
tag 'root'
|
15
15
|
attribute :attr1, String
|
16
16
|
element :name, String
|
@@ -31,7 +31,7 @@ describe "wrap which allows you to specify a wrapper element" do
|
|
31
31
|
expect(subject.name).to eq 'myname'
|
32
32
|
expect(subject.description).to eq 'some description'
|
33
33
|
expect(subject.subclass.myattr).to eq 'attrvalue'
|
34
|
-
expect(subject.subclass.items).to
|
34
|
+
expect(subject.subclass.items.size).to eq 2
|
35
35
|
expect(subject.subclass.items[0]).to eq 'item1'
|
36
36
|
expect(subject.subclass.items[1]).to eq 'item2'
|
37
37
|
expect(subject.number).to eq 12345
|
@@ -72,11 +72,11 @@ describe "wrap which allows you to specify a wrapper element" do
|
|
72
72
|
expect(xml.xpath('/root/name').text).to eq 'myname'
|
73
73
|
expect(xml.xpath('/root/mywraptag/description').text).to eq 'some description'
|
74
74
|
expect(xml.xpath('/root/mywraptag/subclass/@myattr').text).to eq 'attrvalue'
|
75
|
-
expect(xml.xpath('/root/mywraptag/subclass/item')).to
|
75
|
+
expect(xml.xpath('/root/mywraptag/subclass/item').size).to eq 2
|
76
76
|
expect(xml.xpath('/root/mywraptag/subclass/item[1]').text).to eq 'item1'
|
77
77
|
expect(xml.xpath('/root/mywraptag/subclass/item[2]').text).to eq 'item2'
|
78
78
|
expect(xml.xpath('/root/number').text).to eq '12345'
|
79
79
|
end
|
80
80
|
|
81
81
|
end
|
82
|
-
end
|
82
|
+
end
|
@@ -4,11 +4,11 @@ module Foo
|
|
4
4
|
class Bar; end
|
5
5
|
end
|
6
6
|
|
7
|
-
describe
|
7
|
+
describe XmlMapper::Item do
|
8
8
|
|
9
9
|
describe "new instance" do
|
10
10
|
before do
|
11
|
-
@item =
|
11
|
+
@item = XmlMapper::Item.new(:foo, String, :tag => 'foobar')
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should accept a name" do
|
@@ -30,41 +30,41 @@ describe HappyMapper::Item do
|
|
30
30
|
|
31
31
|
describe "#constant" do
|
32
32
|
it "should just use type if constant" do
|
33
|
-
item =
|
33
|
+
item = XmlMapper::Item.new(:foo, String)
|
34
34
|
item.constant.should == String
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should convert string type to constant" do
|
38
|
-
item =
|
38
|
+
item = XmlMapper::Item.new(:foo, 'String')
|
39
39
|
item.constant.should == String
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should convert string with :: to constant" do
|
43
|
-
item =
|
43
|
+
item = XmlMapper::Item.new(:foo, 'Foo::Bar')
|
44
44
|
item.constant.should == Foo::Bar
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
describe "#method_name" do
|
49
49
|
it "should convert dashes to underscores" do
|
50
|
-
item =
|
50
|
+
item = XmlMapper::Item.new(:'foo-bar', String, :tag => 'foobar')
|
51
51
|
item.method_name.should == 'foo_bar'
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
55
|
describe "#xpath" do
|
56
56
|
it "should default to tag" do
|
57
|
-
item =
|
57
|
+
item = XmlMapper::Item.new(:foo, String, :tag => 'foobar')
|
58
58
|
item.xpath.should == 'foobar'
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should prepend with .// if options[:deep] true" do
|
62
|
-
item =
|
62
|
+
item = XmlMapper::Item.new(:foo, String, :tag => 'foobar', :deep => true)
|
63
63
|
item.xpath.should == './/foobar'
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should prepend namespace if namespace exists" do
|
67
|
-
item =
|
67
|
+
item = XmlMapper::Item.new(:foo, String, :tag => 'foobar')
|
68
68
|
item.namespace = 'v2'
|
69
69
|
item.xpath.should == 'v2:foobar'
|
70
70
|
end
|
@@ -72,43 +72,43 @@ describe HappyMapper::Item do
|
|
72
72
|
|
73
73
|
describe "typecasting" do
|
74
74
|
it "should work with Strings" do
|
75
|
-
item =
|
75
|
+
item = XmlMapper::Item.new(:foo, String)
|
76
76
|
[21, '21'].each do |a|
|
77
77
|
item.typecast(a).should == '21'
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
81
|
it "should work with Integers" do
|
82
|
-
item =
|
82
|
+
item = XmlMapper::Item.new(:foo, Integer)
|
83
83
|
[21, 21.0, '21'].each do |a|
|
84
84
|
item.typecast(a).should == 21
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
88
|
it "should work with Floats" do
|
89
|
-
item =
|
89
|
+
item = XmlMapper::Item.new(:foo, Float)
|
90
90
|
[21, 21.0, '21'].each do |a|
|
91
91
|
item.typecast(a).should == 21.0
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should work with Times" do
|
96
|
-
item =
|
96
|
+
item = XmlMapper::Item.new(:foo, Time)
|
97
97
|
item.typecast('2000-01-01 01:01:01.123456').should == Time.local(2000, 1, 1, 1, 1, 1, 123456)
|
98
98
|
end
|
99
99
|
|
100
100
|
it "should work with Dates" do
|
101
|
-
item =
|
101
|
+
item = XmlMapper::Item.new(:foo, Date)
|
102
102
|
item.typecast('2000-01-01').should == Date.new(2000, 1, 1)
|
103
103
|
end
|
104
104
|
|
105
105
|
it "should work with DateTimes" do
|
106
|
-
item =
|
106
|
+
item = XmlMapper::Item.new(:foo, DateTime)
|
107
107
|
item.typecast('2000-01-01 00:00:00').should == DateTime.new(2000, 1, 1, 0, 0, 0)
|
108
108
|
end
|
109
109
|
|
110
110
|
it "should work with Boolean" do
|
111
|
-
item =
|
111
|
+
item = XmlMapper::Item.new(:foo, XmlMapper::Boolean)
|
112
112
|
item.typecast('false').should == false
|
113
113
|
end
|
114
114
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe XmlMapper do
|
4
4
|
|
5
5
|
context ".parse" do
|
6
6
|
|
@@ -85,7 +85,7 @@ describe HappyMapper do
|
|
85
85
|
context "after_parse callbacks" do
|
86
86
|
module AfterParseSpec
|
87
87
|
class Address
|
88
|
-
include
|
88
|
+
include XmlMapper
|
89
89
|
element :street, String
|
90
90
|
end
|
91
91
|
end
|
@@ -110,4 +110,4 @@ describe HappyMapper do
|
|
110
110
|
|
111
111
|
end
|
112
112
|
|
113
|
-
end
|
113
|
+
end
|
@@ -3,7 +3,7 @@ require 'uri'
|
|
3
3
|
|
4
4
|
module Analytics
|
5
5
|
class Property
|
6
|
-
include
|
6
|
+
include XmlMapper
|
7
7
|
|
8
8
|
tag 'property'
|
9
9
|
namespace 'dxp'
|
@@ -12,7 +12,7 @@ module Analytics
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class Goal
|
15
|
-
include
|
15
|
+
include XmlMapper
|
16
16
|
|
17
17
|
# Google Analytics does a dirtry trick where a user with no goals
|
18
18
|
# returns a profile without any goals data or the declared namespace
|
@@ -35,7 +35,7 @@ module Analytics
|
|
35
35
|
end
|
36
36
|
|
37
37
|
class Profile
|
38
|
-
include
|
38
|
+
include XmlMapper
|
39
39
|
|
40
40
|
tag 'entry'
|
41
41
|
element :title, String
|
@@ -47,7 +47,7 @@ module Analytics
|
|
47
47
|
|
48
48
|
|
49
49
|
class Entry
|
50
|
-
include
|
50
|
+
include XmlMapper
|
51
51
|
|
52
52
|
tag 'entry'
|
53
53
|
element :id, String
|
@@ -58,7 +58,7 @@ module Analytics
|
|
58
58
|
end
|
59
59
|
|
60
60
|
class Feed
|
61
|
-
include
|
61
|
+
include XmlMapper
|
62
62
|
|
63
63
|
tag 'feed'
|
64
64
|
element :id, String
|
@@ -70,7 +70,7 @@ end
|
|
70
70
|
|
71
71
|
module Atom
|
72
72
|
class Feed
|
73
|
-
include
|
73
|
+
include XmlMapper
|
74
74
|
tag 'feed'
|
75
75
|
|
76
76
|
attribute :xmlns, String, :single => true
|
@@ -87,7 +87,10 @@ module Atom
|
|
87
87
|
end
|
88
88
|
|
89
89
|
class Address
|
90
|
-
include
|
90
|
+
include XmlMapper
|
91
|
+
|
92
|
+
attr_accessor :xml_value
|
93
|
+
attr_accessor :xml_content
|
91
94
|
|
92
95
|
tag 'address'
|
93
96
|
element :street, String
|
@@ -98,12 +101,12 @@ class Address
|
|
98
101
|
end
|
99
102
|
|
100
103
|
class Feature
|
101
|
-
include
|
104
|
+
include XmlMapper
|
102
105
|
element :name, String, :xpath => './/text()'
|
103
106
|
end
|
104
107
|
|
105
108
|
class FeatureBullet
|
106
|
-
include
|
109
|
+
include XmlMapper
|
107
110
|
|
108
111
|
tag 'features_bullets'
|
109
112
|
has_many :features, Feature
|
@@ -111,7 +114,7 @@ class FeatureBullet
|
|
111
114
|
end
|
112
115
|
|
113
116
|
class Product
|
114
|
-
include
|
117
|
+
include XmlMapper
|
115
118
|
|
116
119
|
element :title, String
|
117
120
|
has_one :feature_bullets, FeatureBullet
|
@@ -119,25 +122,25 @@ class Product
|
|
119
122
|
end
|
120
123
|
|
121
124
|
class Rate
|
122
|
-
include
|
125
|
+
include XmlMapper
|
123
126
|
end
|
124
127
|
|
125
128
|
module FamilySearch
|
126
129
|
class AlternateIds
|
127
|
-
include
|
130
|
+
include XmlMapper
|
128
131
|
|
129
132
|
tag 'alternateIds'
|
130
133
|
has_many :ids, String, :tag => 'id'
|
131
134
|
end
|
132
135
|
|
133
136
|
class Information
|
134
|
-
include
|
137
|
+
include XmlMapper
|
135
138
|
|
136
139
|
has_one :alternateIds, AlternateIds
|
137
140
|
end
|
138
141
|
|
139
142
|
class Person
|
140
|
-
include
|
143
|
+
include XmlMapper
|
141
144
|
|
142
145
|
attribute :version, String
|
143
146
|
attribute :modified, Time
|
@@ -146,12 +149,12 @@ module FamilySearch
|
|
146
149
|
end
|
147
150
|
|
148
151
|
class Persons
|
149
|
-
include
|
152
|
+
include XmlMapper
|
150
153
|
has_many :person, Person
|
151
154
|
end
|
152
155
|
|
153
156
|
class FamilyTree
|
154
|
-
include
|
157
|
+
include XmlMapper
|
155
158
|
|
156
159
|
tag 'familytree'
|
157
160
|
attribute :version, String
|
@@ -163,7 +166,7 @@ end
|
|
163
166
|
|
164
167
|
module FedEx
|
165
168
|
class Address
|
166
|
-
include
|
169
|
+
include XmlMapper
|
167
170
|
|
168
171
|
tag 'Address'
|
169
172
|
namespace 'v2'
|
@@ -175,7 +178,7 @@ module FedEx
|
|
175
178
|
end
|
176
179
|
|
177
180
|
class Event
|
178
|
-
include
|
181
|
+
include XmlMapper
|
179
182
|
|
180
183
|
tag 'Events'
|
181
184
|
namespace 'v2'
|
@@ -186,7 +189,7 @@ module FedEx
|
|
186
189
|
end
|
187
190
|
|
188
191
|
class PackageWeight
|
189
|
-
include
|
192
|
+
include XmlMapper
|
190
193
|
|
191
194
|
tag 'PackageWeight'
|
192
195
|
namespace 'v2'
|
@@ -195,7 +198,7 @@ module FedEx
|
|
195
198
|
end
|
196
199
|
|
197
200
|
class TrackDetails
|
198
|
-
include
|
201
|
+
include XmlMapper
|
199
202
|
|
200
203
|
tag 'TrackDetails'
|
201
204
|
namespace 'v2'
|
@@ -210,7 +213,7 @@ module FedEx
|
|
210
213
|
end
|
211
214
|
|
212
215
|
class Notification
|
213
|
-
include
|
216
|
+
include XmlMapper
|
214
217
|
|
215
218
|
tag 'Notifications'
|
216
219
|
namespace 'v2'
|
@@ -222,7 +225,7 @@ module FedEx
|
|
222
225
|
end
|
223
226
|
|
224
227
|
class TransactionDetail
|
225
|
-
include
|
228
|
+
include XmlMapper
|
226
229
|
|
227
230
|
tag 'TransactionDetail'
|
228
231
|
namespace 'v2'
|
@@ -230,7 +233,7 @@ module FedEx
|
|
230
233
|
end
|
231
234
|
|
232
235
|
class TrackReply
|
233
|
-
include
|
236
|
+
include XmlMapper
|
234
237
|
|
235
238
|
tag 'TrackReply'
|
236
239
|
namespace 'v2'
|
@@ -243,17 +246,17 @@ module FedEx
|
|
243
246
|
end
|
244
247
|
|
245
248
|
class Place
|
246
|
-
include
|
249
|
+
include XmlMapper
|
247
250
|
element :name, String
|
248
251
|
end
|
249
252
|
|
250
253
|
class Radar
|
251
|
-
include
|
254
|
+
include XmlMapper
|
252
255
|
has_many :places, Place, :tag => :place
|
253
256
|
end
|
254
257
|
|
255
258
|
class Post
|
256
|
-
include
|
259
|
+
include XmlMapper
|
257
260
|
|
258
261
|
attribute :href, String
|
259
262
|
attribute :hash, String
|
@@ -265,7 +268,7 @@ class Post
|
|
265
268
|
end
|
266
269
|
|
267
270
|
class User
|
268
|
-
include
|
271
|
+
include XmlMapper
|
269
272
|
|
270
273
|
element :id, Integer
|
271
274
|
element :name, String
|
@@ -279,7 +282,7 @@ class User
|
|
279
282
|
end
|
280
283
|
|
281
284
|
class Status
|
282
|
-
include
|
285
|
+
include XmlMapper
|
283
286
|
|
284
287
|
register_namespace 'fake', "faka:namespace"
|
285
288
|
|
@@ -296,7 +299,7 @@ class Status
|
|
296
299
|
end
|
297
300
|
|
298
301
|
class CurrentWeather
|
299
|
-
include
|
302
|
+
include XmlMapper
|
300
303
|
|
301
304
|
tag 'ob'
|
302
305
|
namespace 'aws'
|
@@ -306,7 +309,7 @@ class CurrentWeather
|
|
306
309
|
end
|
307
310
|
|
308
311
|
class Country
|
309
|
-
include
|
312
|
+
include XmlMapper
|
310
313
|
|
311
314
|
attribute :code, String
|
312
315
|
content :name, String
|
@@ -314,11 +317,11 @@ end
|
|
314
317
|
|
315
318
|
|
316
319
|
class State
|
317
|
-
include
|
320
|
+
include XmlMapper
|
318
321
|
end
|
319
322
|
|
320
323
|
class Address
|
321
|
-
include
|
324
|
+
include XmlMapper
|
322
325
|
|
323
326
|
tag 'address'
|
324
327
|
element :street, String
|
@@ -334,7 +337,7 @@ class ProductGroup < String; end
|
|
334
337
|
|
335
338
|
module PITA
|
336
339
|
class Item
|
337
|
-
include
|
340
|
+
include XmlMapper
|
338
341
|
|
339
342
|
tag 'Item' # if you put class in module you need tag
|
340
343
|
element :asin, String, :tag => 'ASIN'
|
@@ -345,7 +348,7 @@ module PITA
|
|
345
348
|
end
|
346
349
|
|
347
350
|
class Items
|
348
|
-
include
|
351
|
+
include XmlMapper
|
349
352
|
|
350
353
|
tag 'Items' # if you put class in module you need tag
|
351
354
|
element :total_results, Integer, :tag => 'TotalResults'
|
@@ -356,7 +359,7 @@ end
|
|
356
359
|
|
357
360
|
module GitHub
|
358
361
|
class Commit
|
359
|
-
include
|
362
|
+
include XmlMapper
|
360
363
|
|
361
364
|
tag "commit"
|
362
365
|
element :url, String
|
@@ -369,20 +372,20 @@ end
|
|
369
372
|
|
370
373
|
module QuarterTest
|
371
374
|
class Quarter
|
372
|
-
include
|
375
|
+
include XmlMapper
|
373
376
|
|
374
377
|
element :start, String
|
375
378
|
end
|
376
379
|
|
377
380
|
class Details
|
378
|
-
include
|
381
|
+
include XmlMapper
|
379
382
|
|
380
383
|
element :round, Integer
|
381
384
|
element :quarter, Integer
|
382
385
|
end
|
383
386
|
|
384
387
|
class Game
|
385
|
-
include
|
388
|
+
include XmlMapper
|
386
389
|
|
387
390
|
# in an ideal world, the following elements would all be
|
388
391
|
# called 'quarter' with an attribute indicating which quarter
|
@@ -399,7 +402,7 @@ end
|
|
399
402
|
|
400
403
|
# To check for multiple primitives
|
401
404
|
class Artist
|
402
|
-
include
|
405
|
+
include XmlMapper
|
403
406
|
|
404
407
|
tag 'artist'
|
405
408
|
element :images, String, :tag => "image", :single => false
|
@@ -407,7 +410,7 @@ class Artist
|
|
407
410
|
end
|
408
411
|
|
409
412
|
class Location
|
410
|
-
include
|
413
|
+
include XmlMapper
|
411
414
|
|
412
415
|
tag 'point'
|
413
416
|
namespace "geo"
|
@@ -417,7 +420,7 @@ end
|
|
417
420
|
# Testing the XmlContent type
|
418
421
|
module Dictionary
|
419
422
|
class Variant
|
420
|
-
include
|
423
|
+
include XmlMapper
|
421
424
|
tag 'var'
|
422
425
|
has_xml_content
|
423
426
|
|
@@ -427,14 +430,14 @@ module Dictionary
|
|
427
430
|
end
|
428
431
|
|
429
432
|
class Definition
|
430
|
-
include
|
433
|
+
include XmlMapper
|
431
434
|
|
432
435
|
tag 'def'
|
433
436
|
element :text, XmlContent, :tag => 'dtext'
|
434
437
|
end
|
435
438
|
|
436
439
|
class Record
|
437
|
-
include
|
440
|
+
include XmlMapper
|
438
441
|
|
439
442
|
tag 'record'
|
440
443
|
has_many :definitions, Definition
|
@@ -444,7 +447,7 @@ end
|
|
444
447
|
|
445
448
|
module AmbigousItems
|
446
449
|
class Item
|
447
|
-
include
|
450
|
+
include XmlMapper
|
448
451
|
|
449
452
|
tag 'item'
|
450
453
|
element :name, String
|
@@ -453,7 +456,7 @@ module AmbigousItems
|
|
453
456
|
end
|
454
457
|
|
455
458
|
class PublishOptions
|
456
|
-
include
|
459
|
+
include XmlMapper
|
457
460
|
|
458
461
|
tag 'publishOptions'
|
459
462
|
|
@@ -470,7 +473,7 @@ class PublishOptions
|
|
470
473
|
end
|
471
474
|
|
472
475
|
class Article
|
473
|
-
include
|
476
|
+
include XmlMapper
|
474
477
|
|
475
478
|
tag 'Article'
|
476
479
|
namespace 'article'
|
@@ -487,7 +490,7 @@ class Article
|
|
487
490
|
end
|
488
491
|
|
489
492
|
class PartiallyBadArticle
|
490
|
-
include
|
493
|
+
include XmlMapper
|
491
494
|
|
492
495
|
attr_writer :xml_value
|
493
496
|
|
@@ -504,7 +507,7 @@ class PartiallyBadArticle
|
|
504
507
|
end
|
505
508
|
|
506
509
|
class Photo
|
507
|
-
include
|
510
|
+
include XmlMapper
|
508
511
|
|
509
512
|
tag 'Photo'
|
510
513
|
namespace 'photo'
|
@@ -517,7 +520,7 @@ class Photo
|
|
517
520
|
end
|
518
521
|
|
519
522
|
class Gallery
|
520
|
-
include
|
523
|
+
include XmlMapper
|
521
524
|
|
522
525
|
tag 'Gallery'
|
523
526
|
namespace 'gallery'
|
@@ -529,7 +532,7 @@ class Gallery
|
|
529
532
|
end
|
530
533
|
|
531
534
|
class Video
|
532
|
-
include
|
535
|
+
include XmlMapper
|
533
536
|
|
534
537
|
tag 'Video'
|
535
538
|
namespace 'video'
|
@@ -542,14 +545,14 @@ class Video
|
|
542
545
|
end
|
543
546
|
|
544
547
|
class OptionalAttribute
|
545
|
-
include
|
548
|
+
include XmlMapper
|
546
549
|
tag 'address'
|
547
550
|
|
548
551
|
attribute :street, String
|
549
552
|
end
|
550
553
|
|
551
554
|
class DefaultNamespaceCombi
|
552
|
-
include
|
555
|
+
include XmlMapper
|
553
556
|
|
554
557
|
|
555
558
|
register_namespace 'bk', "urn:loc.gov:books"
|
@@ -564,12 +567,12 @@ class DefaultNamespaceCombi
|
|
564
567
|
element :author, String, :namespace => 'p', :tag => "author"
|
565
568
|
end
|
566
569
|
|
567
|
-
describe
|
570
|
+
describe XmlMapper do
|
568
571
|
|
569
572
|
describe "being included into another class" do
|
570
573
|
before do
|
571
574
|
@klass = Class.new do
|
572
|
-
include
|
575
|
+
include XmlMapper
|
573
576
|
|
574
577
|
def self.to_s
|
575
578
|
'Boo'
|
@@ -577,7 +580,7 @@ describe HappyMapper do
|
|
577
580
|
end
|
578
581
|
end
|
579
582
|
|
580
|
-
class Boo; include
|
583
|
+
class Boo; include XmlMapper end
|
581
584
|
|
582
585
|
it "should set attributes to an array" do
|
583
586
|
@klass.attributes.should == []
|
@@ -643,7 +646,7 @@ describe HappyMapper do
|
|
643
646
|
end
|
644
647
|
|
645
648
|
it "should default tag name of class in modules to the last constant lowercase" do
|
646
|
-
module Bar; class Baz; include
|
649
|
+
module Bar; class Baz; include XmlMapper; end; end
|
647
650
|
Bar::Baz.tag_name.should == 'baz'
|
648
651
|
end
|
649
652
|
|
@@ -713,10 +716,10 @@ describe HappyMapper do
|
|
713
716
|
first.id.should == 882281424
|
714
717
|
first.created_at.should == Time.utc(2008, 8, 9, 5, 38, 12)
|
715
718
|
first.source.should == 'web'
|
716
|
-
first.truncated.should
|
719
|
+
first.truncated.should be_falsey
|
717
720
|
first.in_reply_to_status_id.should == 1234
|
718
721
|
first.in_reply_to_user_id.should == 12345
|
719
|
-
first.favorited.should
|
722
|
+
first.favorited.should be_falsey
|
720
723
|
first.user.id.should == 4243
|
721
724
|
first.user.name.should == 'John Nunemaker'
|
722
725
|
first.user.screen_name.should == 'jnunemaker'
|
@@ -724,7 +727,7 @@ describe HappyMapper do
|
|
724
727
|
first.user.description.should == 'Loves his wife, ruby, notre dame football and iu basketball'
|
725
728
|
first.user.profile_image_url.should == 'http://s3.amazonaws.com/twitter_production/profile_images/53781608/Photo_75_normal.jpg'
|
726
729
|
first.user.url.should == 'http://addictedtonew.com'
|
727
|
-
first.user.protected.should
|
730
|
+
first.user.protected.should be_falsey
|
728
731
|
first.user.followers_count.should == 486
|
729
732
|
end
|
730
733
|
|
@@ -854,7 +857,7 @@ describe HappyMapper do
|
|
854
857
|
it "should parse xml with multiple namespaces" do
|
855
858
|
track = FedEx::TrackReply.parse(fixture_file('multiple_namespaces.xml'))
|
856
859
|
track.highest_severity.should == 'SUCCESS'
|
857
|
-
track.more_data.should
|
860
|
+
track.more_data.should be_falsey
|
858
861
|
notification = track.notifications.first
|
859
862
|
notification.code.should == 0
|
860
863
|
notification.localized_message.should == 'Request was successfully processed.'
|
@@ -878,7 +881,7 @@ describe HappyMapper do
|
|
878
881
|
first_event.timestamp.should == '2009-01-02T06:00:00'
|
879
882
|
first_event.address.city.should == 'WICHITA'
|
880
883
|
first_event.address.countrycode.should == 'US'
|
881
|
-
first_event.address.residential.should
|
884
|
+
first_event.address.residential.should be_falsey
|
882
885
|
first_event.address.state.should == 'KS'
|
883
886
|
first_event.address.zip.should == '67226'
|
884
887
|
last_event = events[-1]
|
@@ -887,7 +890,7 @@ describe HappyMapper do
|
|
887
890
|
last_event.timestamp.should == '2008-12-27T09:40:00'
|
888
891
|
last_event.address.city.should == 'LONGWOOD'
|
889
892
|
last_event.address.countrycode.should == 'US'
|
890
|
-
last_event.address.residential.should
|
893
|
+
last_event.address.residential.should be_falsey
|
891
894
|
last_event.address.state.should == 'FL'
|
892
895
|
last_event.address.zip.should == '327506398'
|
893
896
|
track.tran_detail.cust_tran_id.should == '20090102-111321'
|
@@ -920,12 +923,12 @@ describe HappyMapper do
|
|
920
923
|
it "should allow instantiating with a string" do
|
921
924
|
module StringFoo
|
922
925
|
class Bar
|
923
|
-
include
|
926
|
+
include XmlMapper
|
924
927
|
has_many :things, 'StringFoo::Thing'
|
925
928
|
end
|
926
929
|
|
927
930
|
class Thing
|
928
|
-
include
|
931
|
+
include XmlMapper
|
929
932
|
end
|
930
933
|
end
|
931
934
|
end
|
@@ -1077,13 +1080,13 @@ describe HappyMapper do
|
|
1077
1080
|
context "when letting user set Nokogiri::XML::ParseOptions" do
|
1078
1081
|
let(:default) {
|
1079
1082
|
Class.new do
|
1080
|
-
include
|
1083
|
+
include XmlMapper
|
1081
1084
|
element :item, String
|
1082
1085
|
end
|
1083
1086
|
}
|
1084
1087
|
let(:custom) {
|
1085
1088
|
Class.new do
|
1086
|
-
include
|
1089
|
+
include XmlMapper
|
1087
1090
|
element :item, String
|
1088
1091
|
with_nokogiri_config do |config|
|
1089
1092
|
config.default_xml
|
@@ -1113,4 +1116,22 @@ describe HappyMapper do
|
|
1113
1116
|
end
|
1114
1117
|
end
|
1115
1118
|
|
1119
|
+
context 'xml_value' do
|
1120
|
+
it 'does not reformat the xml' do
|
1121
|
+
xml = fixture_file('unformatted_address.xml')
|
1122
|
+
address = Address.parse(xml, single: true)
|
1123
|
+
|
1124
|
+
expect(address.xml_value).to eq %{<address><street>Milchstrasse</street><housenumber>23</housenumber></address>}
|
1125
|
+
end
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
context 'xml_content' do
|
1129
|
+
it 'does not reformat the xml' do
|
1130
|
+
xml = fixture_file('unformatted_address.xml')
|
1131
|
+
address = Address.parse(xml)
|
1132
|
+
|
1133
|
+
expect(address.xml_content).to eq %{<street>Milchstrasse</street><housenumber>23</housenumber>}
|
1134
|
+
end
|
1135
|
+
end
|
1136
|
+
|
1116
1137
|
end
|