lightningdb-happymapper 0.3.1 → 0.3.2
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/happymapper.gemspec +3 -3
- data/lib/happymapper/item.rb +31 -18
- data/spec/fixtures/family_tree.xml +15 -1
- data/spec/happymapper_spec.rb +21 -5
- metadata +3 -2
data/happymapper.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{happymapper}
|
5
|
-
s.version = "0.3.
|
5
|
+
s.version = "0.3.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["John Nunemaker"]
|
9
|
-
s.date = %q{2009-
|
8
|
+
s.authors = ["John Nunemaker", "Dave Bolton"]
|
9
|
+
s.date = %q{2009-03-17}
|
10
10
|
s.description = %q{object to xml mapping library}
|
11
11
|
s.email = %q{nunemaker@gmail.com}
|
12
12
|
s.extra_rdoc_files = ["lib/happymapper/attribute.rb", "lib/happymapper/element.rb", "lib/happymapper/item.rb", "lib/happymapper/version.rb", "lib/happymapper.rb", "README", "TODO"]
|
data/lib/happymapper/item.rb
CHANGED
@@ -18,7 +18,7 @@ module HappyMapper
|
|
18
18
|
self.type = type
|
19
19
|
#self.tag = o.delete(:tag) || name.to_s
|
20
20
|
self.tag = o[:tag] || name.to_s
|
21
|
-
self.options = o.merge(:name => self.name)
|
21
|
+
self.options = { :single => true }.merge(o.merge(:name => self.name))
|
22
22
|
|
23
23
|
@xml_type = self.class.to_s.split('::').last.downcase
|
24
24
|
end
|
@@ -120,29 +120,42 @@ module HappyMapper
|
|
120
120
|
end
|
121
121
|
|
122
122
|
if element?
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
result.instance_eval <<-EOV
|
132
|
-
def value.#{xml_attribute.name}
|
133
|
-
#{attribute_value.inspect}
|
134
|
-
end
|
135
|
-
EOV
|
136
|
-
end
|
137
|
-
end
|
123
|
+
if options[:single]
|
124
|
+
result = node.find_first(xpath(namespace))
|
125
|
+
if result
|
126
|
+
value = yield(result)
|
127
|
+
handle_attributes_option(result,value)
|
128
|
+
value
|
129
|
+
else
|
130
|
+
nil
|
138
131
|
end
|
139
|
-
value
|
140
132
|
else
|
141
|
-
|
133
|
+
results = node.find(xpath(namespace)).collect do |result|
|
134
|
+
value = yield(result)
|
135
|
+
handle_attributes_option(result,value)
|
136
|
+
value
|
137
|
+
end
|
138
|
+
results
|
142
139
|
end
|
143
140
|
else
|
144
141
|
yield(node[tag])
|
145
142
|
end
|
146
143
|
end
|
144
|
+
|
145
|
+
def handle_attributes_option(result, value)
|
146
|
+
if options[:attributes].is_a?(Hash)
|
147
|
+
result.attributes.each do |xml_attribute|
|
148
|
+
if attribute_options = options[:attributes][xml_attribute.name.to_sym]
|
149
|
+
attribute_value = Attribute.new(xml_attribute.name.to_sym, *attribute_options).from_xml_node(result, namespace)
|
150
|
+
result.instance_eval <<-EOV
|
151
|
+
def value.#{xml_attribute.name}
|
152
|
+
#{attribute_value.inspect}
|
153
|
+
end
|
154
|
+
EOV
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
147
159
|
end
|
148
160
|
end
|
161
|
+
|
@@ -2,6 +2,20 @@
|
|
2
2
|
<familytree xmlns="http://api.familysearch.org/familytree/v1" xmlns:fsapi-v1="http://api.familysearch.org/v1" version="1.0.20071213.942" statusMessage="OK" statusCode="200">
|
3
3
|
<persons>
|
4
4
|
<person version="1199378491000" modified="2008-01-03T09:41:31-07:00" id="KWQS-BBQ">
|
5
|
+
<information>
|
6
|
+
<alternateIds>
|
7
|
+
<id>gedcom.1B5E3087E36D814FA9CBE0BE5B3721EA</id>
|
8
|
+
<id>KWQS-BB3</id>
|
9
|
+
<id>KWQS-W23</id>
|
10
|
+
<id>KWQS-W2S</id>
|
11
|
+
<id>KWQS-W29</id>
|
12
|
+
<id>KWQM-MMM</id>
|
13
|
+
<id>KWQS-W2Q</id>
|
14
|
+
<id>KWQS-BBQ</id>
|
15
|
+
</alternateIds>
|
16
|
+
<gender>Male</gender>
|
17
|
+
<living>false</living>
|
18
|
+
</information>
|
5
19
|
</person>
|
6
20
|
</persons>
|
7
|
-
</familytree>
|
21
|
+
</familytree>
|
data/spec/happymapper_spec.rb
CHANGED
@@ -35,12 +35,26 @@ class Product
|
|
35
35
|
end
|
36
36
|
|
37
37
|
module FamilySearch
|
38
|
+
class AlternateIds
|
39
|
+
include HappyMapper
|
40
|
+
|
41
|
+
tag 'alternateIds'
|
42
|
+
has_many :ids, String, :tag => 'id'
|
43
|
+
end
|
44
|
+
|
45
|
+
class Information
|
46
|
+
include HappyMapper
|
47
|
+
|
48
|
+
has_one :alternateIds, AlternateIds
|
49
|
+
end
|
50
|
+
|
38
51
|
class Person
|
39
52
|
include HappyMapper
|
40
53
|
|
41
54
|
attribute :version, String
|
42
55
|
attribute :modified, Time
|
43
56
|
attribute :id, String
|
57
|
+
has_one :information, Information
|
44
58
|
end
|
45
59
|
|
46
60
|
class Persons
|
@@ -542,14 +556,16 @@ describe HappyMapper do
|
|
542
556
|
track.tran_detail.cust_tran_id.should == '20090102-111321'
|
543
557
|
end
|
544
558
|
|
545
|
-
|
559
|
+
it "should parse family search xml" do
|
546
560
|
tree = FamilySearch::FamilyTree.parse(fixture_file('family_tree.xml'))
|
547
561
|
tree.version.should == '1.0.20071213.942'
|
548
562
|
tree.status_message.should == 'OK'
|
549
563
|
tree.status_code.should == '200'
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
564
|
+
tree.persons.person.size.should == 1
|
565
|
+
tree.persons.person.first.version.should == '1199378491000'
|
566
|
+
tree.persons.person.first.modified.should == Time.utc(2008, 1, 3, 16, 41, 31) # 2008-01-03T09:41:31-07:00
|
567
|
+
tree.persons.person.first.id.should == 'KWQS-BBQ'
|
568
|
+
tree.persons.person.first.information.alternateIds.ids.should_not be_kind_of(String)
|
569
|
+
tree.persons.person.first.information.alternateIds.ids.size.should == 8
|
554
570
|
end
|
555
571
|
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lightningdb-happymapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
8
|
+
- Dave Bolton
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date: 2009-
|
13
|
+
date: 2009-03-17 00:00:00 -07:00
|
13
14
|
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|