happymapper 0.4.0 → 0.4.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.
- data/lib/happymapper.rb +5 -3
- data/lib/happymapper/version.rb +1 -1
- data/spec/fixtures/intrade.xml +29 -0
- data/spec/happymapper_spec.rb +13 -0
- data/spec/support/models.rb +36 -1
- metadata +37 -48
data/lib/happymapper.rb
CHANGED
@@ -97,9 +97,11 @@ module HappyMapper
|
|
97
97
|
namespace = @namespace || (node.namespaces && node.namespaces.default)
|
98
98
|
namespace = "#{DEFAULT_NS}:#{namespace}" if namespace
|
99
99
|
|
100
|
-
xpath =
|
101
|
-
|
102
|
-
|
100
|
+
unless xpath = options[:xpath]
|
101
|
+
xpath = root ? '/' : './/'
|
102
|
+
xpath += "#{DEFAULT_NS}:" if namespace
|
103
|
+
xpath += tag_name
|
104
|
+
end
|
103
105
|
|
104
106
|
nodes = node.find(xpath, Array(namespace))
|
105
107
|
collection = nodes.collect do |n|
|
data/lib/happymapper/version.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
<tsResponse requestOp="getUserMessages" resultCode="0" timestamp="1329416249820"
|
2
|
+
timetaken="475">
|
3
|
+
<msg msgID="123456">
|
4
|
+
<msgID>123456</msgID>
|
5
|
+
<conID>789012</conID>
|
6
|
+
<symbol>2012.PIGS.FLY</symbol>
|
7
|
+
<readFlag>false</readFlag>
|
8
|
+
<type>T</type>
|
9
|
+
<msg>345678901</msg>
|
10
|
+
<price>13.0</price>
|
11
|
+
<quantity>100</quantity>
|
12
|
+
<side>B</side>
|
13
|
+
<timestamp>1329415852000</timestamp>
|
14
|
+
</msg>
|
15
|
+
<msg msgID="123460">
|
16
|
+
<msgID>123460</msgID>
|
17
|
+
<conID>789013</conID>
|
18
|
+
<symbol>2012.SNOWBALL.INFERNO.MELT</symbol>
|
19
|
+
<readFlag>false</readFlag>
|
20
|
+
<type>T</type>
|
21
|
+
<msg>345678933</msg>
|
22
|
+
<price>13.0</price>
|
23
|
+
<quantity>100</quantity>
|
24
|
+
<side>S</side>
|
25
|
+
<timestamp>1329415873000</timestamp>
|
26
|
+
</msg>
|
27
|
+
<faildesc>Ok</faildesc>
|
28
|
+
<sessionData>10R3M1p5um0010r5174m37c0n53C737uR401p151C1N931175300031U5m0073mp0r1Nc1010UN7u71480R3370010R3m49n44119u4U73N1M40M1n1MV3n14M9U15n057Ru03X3Rc174710Nu114Mc01480r15n151u74119U1P3x34C0mm000C0n539u470u154u731ruR30010r1Nr3PR3h3n03R171Nv01up7473v31173553C111Um0010R33ufU9147nu114P4R147Ur3XC3P73uR51n70CC43C47CuP104747n0nPR0103N75un71ncu1p49U10fF1C140353rUn7m011174N1M103571480Rum</sessionData>
|
29
|
+
</tsResponse>
|
data/spec/happymapper_spec.rb
CHANGED
@@ -350,6 +350,19 @@ describe HappyMapper do
|
|
350
350
|
# tree.people.first.id.should == 'KWQS-BBQ'
|
351
351
|
end
|
352
352
|
|
353
|
+
it "should support :xpath option" do
|
354
|
+
message_box = Intrade::Messages.parse(fixture_file('intrade.xml'))
|
355
|
+
message_box.timestamp.should == Time.at(1329416249)
|
356
|
+
message_box.error_message.should == "Ok"
|
357
|
+
|
358
|
+
# default xpath would default to './/msg', which would include
|
359
|
+
# nested nodes which are also named "msg", so xpath is
|
360
|
+
# explicitly supplied as option :xpath => './msg'
|
361
|
+
message_box.messages.should have(2).messages
|
362
|
+
message_box.messages[0].message_id.should == 123456
|
363
|
+
message_box.messages[1].message_id.should == 123460
|
364
|
+
end
|
365
|
+
|
353
366
|
describe 'nested elements with namespaces' do
|
354
367
|
module Namespaces
|
355
368
|
class Info
|
data/spec/support/models.rb
CHANGED
@@ -299,4 +299,39 @@ module Backpack
|
|
299
299
|
|
300
300
|
content :body
|
301
301
|
end
|
302
|
-
end
|
302
|
+
end
|
303
|
+
|
304
|
+
module Intrade
|
305
|
+
class EpochMillis
|
306
|
+
def self.parse(millis); Time.at(millis.to_i / 1000); end
|
307
|
+
end
|
308
|
+
|
309
|
+
class Message
|
310
|
+
include HappyMapper
|
311
|
+
|
312
|
+
tag 'msg'
|
313
|
+
attribute :message_id, Integer, :tag => 'msgID'
|
314
|
+
element :contract_id, Integer, :tag => 'conID'
|
315
|
+
element :symbol, String, :tag => 'symbol'
|
316
|
+
element :is_read, Boolean, :tag => 'readFlag'
|
317
|
+
element :type, String, :tag => 'type'
|
318
|
+
element :text, String, :tag => 'msg'
|
319
|
+
element :price, Float, :tag => 'price'
|
320
|
+
element :quantity, Integer, :tag => 'quantity'
|
321
|
+
element :side, String, :tag => 'side'
|
322
|
+
element :timestamp, EpochMillis, :tag => 'timestamp', :parser => :parse
|
323
|
+
end
|
324
|
+
|
325
|
+
class Messages
|
326
|
+
include HappyMapper
|
327
|
+
|
328
|
+
tag 'tsResponse'
|
329
|
+
attribute :operation, String, :tag => 'requestOp'
|
330
|
+
attribute :timestamp, EpochMillis, :tag => 'timestamp', :parser => :parse
|
331
|
+
attribute :result_code, Integer, :tag => 'resultCode'
|
332
|
+
element :error_message, String, :tag => 'faildesc'
|
333
|
+
element :session_key, String, :tag => 'sessionData'
|
334
|
+
has_many :messages, Message, :tag => 'msg', :xpath => './msg'
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
metadata
CHANGED
@@ -1,47 +1,39 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: happymapper
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 0
|
10
|
-
version: 0.4.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- John Nunemaker
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
-
|
12
|
+
date: 2013-09-26 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: libxml-ruby
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.0'
|
21
22
|
type: :runtime
|
22
23
|
prerelease: false
|
23
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
none: false
|
25
|
-
requirements:
|
26
|
+
requirements:
|
26
27
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 2
|
31
|
-
- 0
|
32
|
-
version: "2.0"
|
33
|
-
version_requirements: *id001
|
34
|
-
name: libxml-ruby
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.0'
|
35
30
|
description:
|
36
|
-
email:
|
31
|
+
email:
|
37
32
|
- nunemaker@gmail.com
|
38
33
|
executables: []
|
39
|
-
|
40
34
|
extensions: []
|
41
|
-
|
42
35
|
extra_rdoc_files: []
|
43
|
-
|
44
|
-
files:
|
36
|
+
files:
|
45
37
|
- examples/amazon.rb
|
46
38
|
- examples/current_weather.rb
|
47
39
|
- examples/dashed_elements.rb
|
@@ -58,6 +50,7 @@ files:
|
|
58
50
|
- spec/fixtures/commit.xml
|
59
51
|
- spec/fixtures/current_weather.xml
|
60
52
|
- spec/fixtures/family_tree.xml
|
53
|
+
- spec/fixtures/intrade.xml
|
61
54
|
- spec/fixtures/multi_street_address.xml
|
62
55
|
- spec/fixtures/multiple_namespaces.xml
|
63
56
|
- spec/fixtures/nested_namespaces.xml
|
@@ -83,36 +76,32 @@ files:
|
|
83
76
|
- README.rdoc
|
84
77
|
homepage: http://happymapper.rubyforge.org
|
85
78
|
licenses: []
|
86
|
-
|
87
79
|
post_install_message:
|
88
80
|
rdoc_options: []
|
89
|
-
|
90
|
-
require_paths:
|
81
|
+
require_paths:
|
91
82
|
- lib
|
92
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
84
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
|
98
|
-
segments:
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
segments:
|
99
90
|
- 0
|
100
|
-
|
101
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
hash: -3590435398206402919
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
93
|
none: false
|
103
|
-
requirements:
|
104
|
-
- -
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
segments:
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
segments:
|
108
99
|
- 0
|
109
|
-
|
100
|
+
hash: -3590435398206402919
|
110
101
|
requirements: []
|
111
|
-
|
112
102
|
rubyforge_project: happymapper
|
113
|
-
rubygems_version: 1.8.
|
103
|
+
rubygems_version: 1.8.23
|
114
104
|
signing_key:
|
115
105
|
specification_version: 3
|
116
106
|
summary: object to xml mapping library
|
117
107
|
test_files: []
|
118
|
-
|