jimmyz-fs-familytree-v1 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +2 -2
- data/lib/communicator.rb +33 -0
- data/lib/fs_familytree_v1.rb +22 -1
- data/spec/communicator_spec.rb +52 -0
- metadata +3 -1
data/VERSION.yml
CHANGED
data/lib/communicator.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'fs_communicator'
|
2
|
+
|
3
|
+
module FsFamilytreeV1
|
4
|
+
|
5
|
+
# This method gets mixed into the FsCommunicator so that
|
6
|
+
# you can make calls on the fs_familytree_v1 module
|
7
|
+
def fs_familytree_v1
|
8
|
+
@com ||= Communicator.new self # self at this point refers to the FsCommunicator instance
|
9
|
+
end
|
10
|
+
|
11
|
+
class Communicator
|
12
|
+
Base = '/familytree/v1/'
|
13
|
+
|
14
|
+
# ==params
|
15
|
+
# fs_communicator: FsCommunicator instance
|
16
|
+
def initialize(fs_communicator)
|
17
|
+
@fs_communicator = fs_communicator
|
18
|
+
end
|
19
|
+
|
20
|
+
def person(id, options = {})
|
21
|
+
url = Base + 'person/' + id
|
22
|
+
response = @fs_communicator.get(url)
|
23
|
+
familytree = Familytree.parse response.body
|
24
|
+
person = familytree.persons.person.find{|p| p.requestedId == id }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
# Mix in the module so that the fs_familytree_v1 can be called
|
31
|
+
class FsCommunicator
|
32
|
+
include FsFamilytreeV1
|
33
|
+
end
|
data/lib/fs_familytree_v1.rb
CHANGED
@@ -1,12 +1,19 @@
|
|
1
|
+
dir = File.dirname(__FILE__)
|
2
|
+
$:.unshift(dir) unless $:.include?(dir) || $:.include?(File.expand_path(dir))
|
3
|
+
|
1
4
|
require 'rubygems'
|
2
5
|
gem 'jimmyz-happymapper'
|
3
6
|
require 'happymapper'
|
4
7
|
|
5
|
-
|
8
|
+
require 'communicator'
|
6
9
|
|
10
|
+
module FsFamilytreeV1
|
11
|
+
NS = 'http://api.familysearch.org/familytree/v1'
|
12
|
+
|
7
13
|
class AlternateIds
|
8
14
|
include HappyMapper
|
9
15
|
|
16
|
+
namespace_url NS
|
10
17
|
tag :alternateIds
|
11
18
|
has_many :id, String
|
12
19
|
end
|
@@ -14,6 +21,7 @@ module FsFamilytreeV1
|
|
14
21
|
class PersonInformation
|
15
22
|
include HappyMapper
|
16
23
|
|
24
|
+
namespace_url NS
|
17
25
|
tag :information
|
18
26
|
element :gender, String
|
19
27
|
element :living, Boolean
|
@@ -23,6 +31,7 @@ module FsFamilytreeV1
|
|
23
31
|
class NamePiece
|
24
32
|
include HappyMapper
|
25
33
|
|
34
|
+
namespace_url NS
|
26
35
|
tag :piece
|
27
36
|
attribute :type, String
|
28
37
|
element :value, String
|
@@ -31,12 +40,14 @@ module FsFamilytreeV1
|
|
31
40
|
class Pieces
|
32
41
|
include HappyMapper
|
33
42
|
|
43
|
+
namespace_url NS
|
34
44
|
has_many :piece, NamePiece
|
35
45
|
end
|
36
46
|
|
37
47
|
class NameForm
|
38
48
|
include HappyMapper
|
39
49
|
|
50
|
+
namespace_url NS
|
40
51
|
tag :form
|
41
52
|
element :fullText, String
|
42
53
|
has_one :pieces, Pieces
|
@@ -46,6 +57,7 @@ module FsFamilytreeV1
|
|
46
57
|
class Forms
|
47
58
|
include HappyMapper
|
48
59
|
|
60
|
+
namespace_url NS
|
49
61
|
has_many :form, NameForm
|
50
62
|
end
|
51
63
|
|
@@ -53,6 +65,7 @@ module FsFamilytreeV1
|
|
53
65
|
def self.init(options = {})
|
54
66
|
include HappyMapper
|
55
67
|
|
68
|
+
namespace_url NS
|
56
69
|
attribute :id, String
|
57
70
|
attribute :version, String
|
58
71
|
attribute :submitter, String
|
@@ -80,6 +93,7 @@ module FsFamilytreeV1
|
|
80
93
|
class DateAstro
|
81
94
|
include HappyMapper
|
82
95
|
|
96
|
+
namespace_url NS
|
83
97
|
tag :astro
|
84
98
|
element :earliest, Integer
|
85
99
|
element :latest, Integer
|
@@ -88,6 +102,7 @@ module FsFamilytreeV1
|
|
88
102
|
class Date
|
89
103
|
include HappyMapper
|
90
104
|
|
105
|
+
namespace_url NS
|
91
106
|
element :original, String
|
92
107
|
element :normalized, String
|
93
108
|
element :astro, DateAstro
|
@@ -96,6 +111,7 @@ module FsFamilytreeV1
|
|
96
111
|
class Place
|
97
112
|
include HappyMapper
|
98
113
|
|
114
|
+
namespace_url NS
|
99
115
|
element :original, String
|
100
116
|
element :normalized, String, :attributes => {:placeId => String}
|
101
117
|
end
|
@@ -104,6 +120,7 @@ module FsFamilytreeV1
|
|
104
120
|
def self.init
|
105
121
|
include HappyMapper
|
106
122
|
|
123
|
+
namespace_url NS
|
107
124
|
attribute :role, String
|
108
125
|
attribute :ref, String
|
109
126
|
attribute :tempId, String
|
@@ -158,6 +175,7 @@ module FsFamilytreeV1
|
|
158
175
|
class Assertions
|
159
176
|
include HappyMapper
|
160
177
|
|
178
|
+
namespace_url NS
|
161
179
|
has_many :name, Name
|
162
180
|
has_many :gender, Gender
|
163
181
|
has_many :event, Event
|
@@ -168,6 +186,7 @@ module FsFamilytreeV1
|
|
168
186
|
class Person
|
169
187
|
include HappyMapper
|
170
188
|
|
189
|
+
namespace_url NS
|
171
190
|
attribute :id, String
|
172
191
|
attribute :requestedId, String
|
173
192
|
attribute :version, String
|
@@ -179,12 +198,14 @@ module FsFamilytreeV1
|
|
179
198
|
class Persons
|
180
199
|
include HappyMapper
|
181
200
|
|
201
|
+
namespace_url NS
|
182
202
|
has_many :person, Person
|
183
203
|
end
|
184
204
|
|
185
205
|
class Familytree
|
186
206
|
include HappyMapper
|
187
207
|
|
208
|
+
namespace_url NS
|
188
209
|
attribute :version, String
|
189
210
|
attribute :statusMessage, String
|
190
211
|
attribute :statusCode, Integer
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe FsFamilytreeV1::Communicator do
|
4
|
+
|
5
|
+
describe "fs_familytree_v1 call on the FsCommunicator" do
|
6
|
+
before(:each) do
|
7
|
+
@com = FsCommunicator.new
|
8
|
+
@ft_com_mock = mock("FsFamilytreeV1::Communicator")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should add an fs_familytree_v1 method to the communicator" do
|
12
|
+
@com.should respond_to(:fs_familytree_v1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return a Communicator object when called" do
|
16
|
+
FsFamilytreeV1::Communicator.should_receive(:new).with(@com).and_return(@ft_com_mock)
|
17
|
+
famtree_com = @com.fs_familytree_v1
|
18
|
+
famtree_com.should == @ft_com_mock
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "person read" do
|
23
|
+
before(:each) do
|
24
|
+
@fs_com_mock = mock("FsCommunicator")
|
25
|
+
@res = mock("HTTP::Response")
|
26
|
+
@xml = fixture_file('person/KJ86-3VD.xml')
|
27
|
+
@res.stub!(:body).and_return(@xml)
|
28
|
+
@fs_com_mock.stub!(:get).and_return(@res)
|
29
|
+
|
30
|
+
@ft_v1_com = FsFamilytreeV1::Communicator.new @fs_com_mock
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should call get on the FsCommunicator" do
|
34
|
+
@fs_com_mock.should_receive(:get).with('/familytree/v1/person/KJ86-3VD').and_return(@res)
|
35
|
+
@ft_v1_com.person('KJ86-3VD')
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should parse the result body from the call" do
|
39
|
+
ft = FsFamilytreeV1::Familytree.parse(@xml)
|
40
|
+
FsFamilytreeV1::Familytree.should_receive(:parse).with(@xml).and_return(ft)
|
41
|
+
@ft_v1_com.person('KJ86-3VD')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return a person of the id requested" do
|
45
|
+
id = 'KJ86-3VD'
|
46
|
+
person = @ft_v1_com.person(id)
|
47
|
+
person.id.should == id
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jimmyz-fs-familytree-v1
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmy Zimmerman
|
@@ -42,7 +42,9 @@ extra_rdoc_files: []
|
|
42
42
|
|
43
43
|
files:
|
44
44
|
- VERSION.yml
|
45
|
+
- lib/communicator.rb
|
45
46
|
- lib/fs_familytree_v1.rb
|
47
|
+
- spec/communicator_spec.rb
|
46
48
|
- spec/fixtures
|
47
49
|
- spec/fixtures/person
|
48
50
|
- spec/fixtures/person/KJ86-3VD.xml
|