ruby-fs-stack 0.2.2 → 0.2.3
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/VERSION +1 -1
- data/lib/ruby-fs-stack/familytree.rb +49 -9
- data/ruby-fs-stack.gemspec +5 -2
- data/spec/familytree_v2/familytree_communicator_spec.rb +258 -189
- data/spec/familytree_v2/json/combine_request.js +1 -0
- data/spec/familytree_v2/json/combine_response.js +1 -0
- data/spec/familytree_v2/json/person/multiple_version_read.js +1 -0
- data/spec/familytree_v2/person_spec.rb +25 -0
- metadata +5 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
@@ -28,7 +28,7 @@ module FamilytreeV2
|
|
28
28
|
end
|
29
29
|
|
30
30
|
# ===params
|
31
|
-
# <tt>
|
31
|
+
# <tt>id_or_ids</tt> should be a string of the persons identifier. For the 'me' person, use :me or 'me'. Can also accept an array of ID strings.
|
32
32
|
# <tt>options</tt> accepts a hash of parameters as documented by the API.
|
33
33
|
# For full parameter documentation, see DevNet[https://devnet.familysearch.org/docs/api-manual-reference-system/familytree-v2/r_api_family_tree_person_read_v2.html]
|
34
34
|
#
|
@@ -39,19 +39,29 @@ module FamilytreeV2
|
|
39
39
|
#
|
40
40
|
# p.version # => '90194378772'
|
41
41
|
# p.id # => 'KW3B-NNM'
|
42
|
-
def person(
|
43
|
-
|
44
|
-
|
45
|
-
url = Base + 'person'
|
42
|
+
def person(id_or_ids, options = {})
|
43
|
+
if id_or_ids.kind_of? Array
|
44
|
+
multiple_ids = true
|
45
|
+
url = Base + 'person/' + id_or_ids.join(',')
|
46
46
|
else
|
47
|
-
|
47
|
+
multiple_ids = false
|
48
|
+
id = id_or_ids.to_s
|
49
|
+
if id == 'me'
|
50
|
+
url = Base + 'person'
|
51
|
+
else
|
52
|
+
url = Base + 'person/' + id
|
53
|
+
end
|
48
54
|
end
|
49
55
|
url += "?"+FsUtils.querystring_from_hash(options) unless options.empty?
|
50
56
|
response = @fs_communicator.get(url)
|
51
57
|
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(response.body)
|
52
|
-
|
53
|
-
|
54
|
-
|
58
|
+
if multiple_ids
|
59
|
+
return familytree.persons
|
60
|
+
else
|
61
|
+
person = familytree.persons.find{|p| p.requestedId == id }
|
62
|
+
person ||= familytree.persons.first if id == 'me'
|
63
|
+
return person
|
64
|
+
end
|
55
65
|
end
|
56
66
|
|
57
67
|
def save_person(person)
|
@@ -189,6 +199,22 @@ module FamilytreeV2
|
|
189
199
|
end
|
190
200
|
end
|
191
201
|
|
202
|
+
# Combines person into a new person
|
203
|
+
#
|
204
|
+
# ====Params
|
205
|
+
# * <tt>person_array</tt> - an array of person IDs.
|
206
|
+
def combine(person_array)
|
207
|
+
url = Base + 'person'
|
208
|
+
version_persons = self.person person_array, :genders => 'none', :events => 'none', :names => 'none'
|
209
|
+
combine_person = Org::Familysearch::Ws::Familytree::V2::Schema::Person.new
|
210
|
+
combine_person.create_combine(version_persons)
|
211
|
+
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.new
|
212
|
+
familytree.persons = [combine_person]
|
213
|
+
res = @fs_communicator.post(url,familytree.to_json)
|
214
|
+
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(res.body)
|
215
|
+
return familytree.persons[0]
|
216
|
+
end
|
217
|
+
|
192
218
|
private
|
193
219
|
#options will either have a :parent, :child, or :spouse key. We need to find which one
|
194
220
|
def get_relationship_type(options)
|
@@ -785,6 +811,20 @@ module Org::Familysearch::Ws::Familytree::V2::Schema
|
|
785
811
|
add_relationships!
|
786
812
|
self.relationships.add_relationship(options)
|
787
813
|
end
|
814
|
+
|
815
|
+
# This method should only be called from FamilytreeV2::Communicator#combine
|
816
|
+
#
|
817
|
+
# ====Params
|
818
|
+
# * <tt>persons</tt> - an array of person objects. All persons must have an id and version
|
819
|
+
def create_combine(persons)
|
820
|
+
self.personas = Org::Familysearch::Ws::Familytree::V2::Schema::PersonPersonas.new
|
821
|
+
self.personas.personas = persons.map do |person|
|
822
|
+
persona = Org::Familysearch::Ws::Familytree::V2::Schema::PersonPersona.new
|
823
|
+
persona.id = person.id
|
824
|
+
persona.version = person.version
|
825
|
+
persona
|
826
|
+
end
|
827
|
+
end
|
788
828
|
|
789
829
|
private
|
790
830
|
|
data/ruby-fs-stack.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruby-fs-stack}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jimmy Zimmerman"]
|
12
|
-
s.date = %q{2009-12-
|
12
|
+
s.date = %q{2009-12-14}
|
13
13
|
s.description = %q{A library that enables you to read and update information with the new.familysearch.org API.}
|
14
14
|
s.email = %q{jimmy.zimmerman@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -39,9 +39,12 @@ Gem::Specification.new do |s|
|
|
39
39
|
"ruby-fs-stack.gemspec",
|
40
40
|
"spec/communicator_spec.rb",
|
41
41
|
"spec/familytree_v2/familytree_communicator_spec.rb",
|
42
|
+
"spec/familytree_v2/json/combine_request.js",
|
43
|
+
"spec/familytree_v2/json/combine_response.js",
|
42
44
|
"spec/familytree_v2/json/match_KW3B-NNM.js",
|
43
45
|
"spec/familytree_v2/json/person/KJ86-3VD_all.js",
|
44
46
|
"spec/familytree_v2/json/person/KJ86-3VD_version.js",
|
47
|
+
"spec/familytree_v2/json/person/multiple_version_read.js",
|
45
48
|
"spec/familytree_v2/json/person/post_response.js",
|
46
49
|
"spec/familytree_v2/json/person/relationship_not_found.js",
|
47
50
|
"spec/familytree_v2/json/person/relationship_read.js",
|
@@ -1,11 +1,23 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
|
3
3
|
describe FamilytreeV2::Communicator do
|
4
|
+
FamilyTreeV2 = Org::Familysearch::Ws::Familytree::V2::Schema
|
5
|
+
|
4
6
|
def read_file(filename)
|
5
7
|
fname = File.join(File.dirname(__FILE__),'json','person',filename)
|
6
8
|
File.read(fname)
|
7
9
|
end
|
8
10
|
|
11
|
+
def new_person
|
12
|
+
Org::Familysearch::Ws::Familytree::V2::Schema::Person.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def existing_person
|
16
|
+
person_json = read_file('KJ86-3VD_version.js')
|
17
|
+
ft = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(person_json)
|
18
|
+
ft.persons.first
|
19
|
+
end
|
20
|
+
|
9
21
|
describe "fs_familytree_v1 call on the FsCommunicator" do
|
10
22
|
before(:each) do
|
11
23
|
@com = FsCommunicator.new
|
@@ -64,24 +76,31 @@ describe FamilytreeV2::Communicator do
|
|
64
76
|
|
65
77
|
end
|
66
78
|
|
67
|
-
describe "
|
79
|
+
describe "person read w/ multiple IDs" do
|
68
80
|
before(:each) do
|
69
81
|
@fs_com_mock = mock("FsCommunicator")
|
70
82
|
@res = mock("HTTP::Response")
|
71
|
-
@json = read_file('
|
83
|
+
@json = read_file('multiple_version_read.js')
|
72
84
|
@res.stub!(:body).and_return(@json)
|
73
|
-
@fs_com_mock.stub!(:
|
85
|
+
@fs_com_mock.stub!(:get).and_return(@res)
|
74
86
|
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
75
87
|
end
|
76
88
|
|
77
|
-
|
78
|
-
|
89
|
+
it "should accept an array of person IDs" do
|
90
|
+
@fs_com_mock.should_receive(:get).with('/familytree/v2/person/KW3B-VCY,KW3B-VCB,KW3B-VC1?names=none').and_return(@res)
|
91
|
+
results = @ft_v2_com.person ["KW3B-VCY", "KW3B-VCB", "KW3B-VC1"], :names => 'none'
|
92
|
+
results.should be_a_kind_of(Array)
|
79
93
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "save_person" do
|
97
|
+
before(:each) do
|
98
|
+
@fs_com_mock = mock("FsCommunicator")
|
99
|
+
@res = mock("HTTP::Response")
|
100
|
+
@json = read_file('post_response.js')
|
101
|
+
@res.stub!(:body).and_return(@json)
|
102
|
+
@fs_com_mock.stub!(:post).and_return(@res)
|
103
|
+
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
85
104
|
end
|
86
105
|
|
87
106
|
describe "saving new persons" do
|
@@ -122,229 +141,279 @@ describe FamilytreeV2::Communicator do
|
|
122
141
|
end
|
123
142
|
|
124
143
|
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "search" do
|
147
|
+
|
148
|
+
before(:each) do
|
149
|
+
@fs_com_mock = mock("FsCommunicator")
|
150
|
+
@res = mock("HTTP::Response")
|
151
|
+
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
152
|
+
|
153
|
+
@json = read_file('../search.js')
|
154
|
+
@res.stub!(:body).and_return(@json)
|
155
|
+
@res.stub!(:code).and_return('200')
|
156
|
+
@fs_com_mock.stub!(:get).and_return(@res)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should call the search endpoint" do
|
160
|
+
@fs_com_mock.should_receive(:get).with("/familytree/v2/search?name=John")
|
161
|
+
@ft_v2_com.search :name => "John"
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should return the SearchResult element" do
|
165
|
+
search_results = @ft_v2_com.search :name => "John"
|
166
|
+
search_results.class.should == Org::Familysearch::Ws::Familytree::V2::Schema::SearchResults
|
167
|
+
search_results.partial.should == 246
|
168
|
+
search_results.close.should == 100
|
169
|
+
search_results.count.should == 40
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should serialize embedded parent parameters" do
|
173
|
+
@fs_com_mock.should_receive(:get).with("/familytree/v2/search?father.name=John")
|
174
|
+
@ft_v2_com.search :father => {:name => "John"}
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "match" do
|
125
180
|
|
126
|
-
|
181
|
+
before(:each) do
|
182
|
+
@fs_com_mock = mock("FsCommunicator")
|
183
|
+
@res = mock("HTTP::Response")
|
184
|
+
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
127
185
|
|
186
|
+
@json = read_file('../match_KW3B-NNM.js')
|
187
|
+
@res.stub!(:body).and_return(@json)
|
188
|
+
@res.stub!(:code).and_return('200')
|
189
|
+
@fs_com_mock.stub!(:get).and_return(@res)
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should call the match endpoint" do
|
193
|
+
@fs_com_mock.should_receive(:get).with("/familytree/v2/match?name=John")
|
194
|
+
@ft_v2_com.match :name => "John"
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should return the MatchResults element" do
|
198
|
+
search_results = @ft_v2_com.match :name => "John"
|
199
|
+
search_results.class.should == Org::Familysearch::Ws::Familytree::V2::Schema::MatchResults
|
200
|
+
search_results.count.should == 4
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should serialize embedded parent parameters" do
|
204
|
+
@fs_com_mock.should_receive(:get).with("/familytree/v2/match?father.name=John")
|
205
|
+
@ft_v2_com.match :father => {:name => "John"}
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should accept an id as the first parameter" do
|
209
|
+
@fs_com_mock.should_receive(:get).with("/familytree/v2/match/KWQS-BBQ")
|
210
|
+
@ft_v2_com.match 'KWQS-BBQ'
|
211
|
+
end
|
212
|
+
|
213
|
+
it "should accept an id AND hash if passed" do
|
214
|
+
@fs_com_mock.should_receive(:get).with("/familytree/v2/match/KWQS-BBQ?maxResults=5")
|
215
|
+
@ft_v2_com.match 'KWQS-BBQ', :maxResults => 5
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
|
220
|
+
describe "reading relationships" do
|
221
|
+
before(:each) do
|
222
|
+
@fs_com_mock = mock("FsCommunicator")
|
223
|
+
@res = mock("HTTP::Response")
|
224
|
+
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
225
|
+
end
|
226
|
+
|
227
|
+
|
228
|
+
describe "for relationships that already exist" do
|
128
229
|
before(:each) do
|
129
|
-
@
|
130
|
-
@res = mock("HTTP::Response")
|
131
|
-
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
230
|
+
@json = read_file('relationship_read.js')
|
132
231
|
|
133
|
-
@json = read_file('../search.js')
|
134
232
|
@res.stub!(:body).and_return(@json)
|
135
233
|
@res.stub!(:code).and_return('200')
|
136
|
-
@fs_com_mock.stub!(:get).and_return(@res)
|
137
|
-
|
138
|
-
|
139
|
-
it "should call the search endpoint" do
|
140
|
-
@fs_com_mock.should_receive(:get).with("/familytree/v2/search?name=John")
|
141
|
-
@ft_v2_com.search :name => "John"
|
234
|
+
@fs_com_mock.stub!(:get).and_return(@res)
|
235
|
+
|
142
236
|
end
|
143
237
|
|
144
|
-
it "should
|
145
|
-
|
146
|
-
|
147
|
-
search_results.partial.should == 246
|
148
|
-
search_results.close.should == 100
|
149
|
-
search_results.count.should == 40
|
238
|
+
it "should read the relationship" do
|
239
|
+
@fs_com_mock.should_receive(:get).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR').and_return(@res)
|
240
|
+
@ft_v2_com.relationship 'KWQS-BBQ', :parent => 'KWQS-BBR'
|
150
241
|
end
|
151
242
|
|
152
|
-
it "should
|
153
|
-
@fs_com_mock.should_receive(:get).with(
|
154
|
-
@ft_v2_com.
|
243
|
+
it "should return a person" do
|
244
|
+
@fs_com_mock.should_receive(:get).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR').and_return(@res)
|
245
|
+
person = @ft_v2_com.relationship 'KWQS-BBQ', :parent => 'KWQS-BBR'
|
246
|
+
person.id.should == 'KWQS-BBQ'
|
247
|
+
person.relationships.parents[0].id.should == 'KWQS-BBR'
|
155
248
|
end
|
156
249
|
|
157
250
|
end
|
158
251
|
|
159
|
-
|
160
|
-
|
252
|
+
end
|
253
|
+
|
254
|
+
describe "writing relationships" do
|
255
|
+
before(:each) do
|
256
|
+
@fs_com_mock = mock("FsCommunicator")
|
257
|
+
@res = mock("HTTP::Response")
|
258
|
+
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
259
|
+
end
|
260
|
+
|
261
|
+
describe "for relationships that don't yet exist" do
|
161
262
|
before(:each) do
|
162
|
-
@
|
163
|
-
@res = mock("HTTP::Response")
|
164
|
-
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
165
|
-
|
166
|
-
@json = read_file('../match_KW3B-NNM.js')
|
263
|
+
@json = read_file('relationship_not_found.js')
|
167
264
|
@res.stub!(:body).and_return(@json)
|
168
|
-
@res.stub!(:code).and_return('
|
265
|
+
@res.stub!(:code).and_return('404')
|
169
266
|
@fs_com_mock.stub!(:get).and_return(@res)
|
267
|
+
|
268
|
+
@post_json = read_file('relationship_update.js')
|
269
|
+
@post_res = mock("HTTP::Response")
|
270
|
+
@post_res.stub!(:body).and_return(@post_json)
|
271
|
+
@fs_com_mock.stub!(:post).and_return(@post_res)
|
272
|
+
|
273
|
+
@person = new_person
|
274
|
+
@person2 = new_person
|
275
|
+
Org::Familysearch::Ws::Familytree::V2::Schema::Person.stub!(:new).and_return(@person)
|
276
|
+
|
170
277
|
end
|
171
278
|
|
172
|
-
it "should
|
173
|
-
@fs_com_mock.should_receive(:get).with(
|
174
|
-
@ft_v2_com.
|
279
|
+
it "should first try to read the relationship" do
|
280
|
+
@fs_com_mock.should_receive(:get).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR').and_return(@res)
|
281
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
175
282
|
end
|
176
283
|
|
177
|
-
it "should
|
178
|
-
|
179
|
-
|
180
|
-
|
284
|
+
it "should create a new person with a relationship since it wasn't yet found" do
|
285
|
+
Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
|
286
|
+
@person.should_receive(:id=).with('KWQS-BBQ')
|
287
|
+
@person.should_receive(:create_relationship).with(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
|
288
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
181
289
|
end
|
182
290
|
|
183
|
-
it "should
|
184
|
-
|
185
|
-
@
|
291
|
+
it "should add a marriage event if sent an event key" do
|
292
|
+
Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
|
293
|
+
@person.should_receive(:id=).with('KWQS-BBQ')
|
294
|
+
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'})
|
295
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'}
|
186
296
|
end
|
187
297
|
|
188
|
-
it "should
|
189
|
-
|
190
|
-
@
|
298
|
+
it "should add an ordinances if sent an ordinance key" do
|
299
|
+
Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
|
300
|
+
@person.should_receive(:id=).with('KWQS-BBQ')
|
301
|
+
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'})
|
302
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'}
|
191
303
|
end
|
192
304
|
|
193
|
-
it "should
|
194
|
-
@
|
195
|
-
@
|
305
|
+
it "should post a familytree request with the person to the correct endpoint" do
|
306
|
+
@person2.create_relationship(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
|
307
|
+
@person2.id = 'KWQS-BBQ'
|
308
|
+
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.new
|
309
|
+
|
310
|
+
familytree.persons = [@person2]
|
311
|
+
@fs_com_mock.should_receive(:post).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR', familytree.to_json).and_return(@post_res)
|
312
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
196
313
|
end
|
197
314
|
|
198
315
|
end
|
199
316
|
|
200
|
-
describe "
|
201
|
-
|
202
|
-
|
203
|
-
before(:each) do
|
204
|
-
@json = read_file('relationship_read.js')
|
205
|
-
|
206
|
-
@res.stub!(:body).and_return(@json)
|
207
|
-
@res.stub!(:code).and_return('200')
|
208
|
-
@fs_com_mock.stub!(:get).and_return(@res)
|
209
|
-
|
210
|
-
end
|
317
|
+
describe "for relationships that already exist" do
|
318
|
+
before(:each) do
|
319
|
+
@json = read_file('relationship_read.js')
|
211
320
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
321
|
+
@res.stub!(:body).and_return(@json)
|
322
|
+
@res.stub!(:code).and_return('200')
|
323
|
+
@fs_com_mock.stub!(:get).and_return(@res)
|
324
|
+
|
325
|
+
@post_json = read_file('relationship_update.js')
|
326
|
+
@post_res = mock("HTTP::Response")
|
327
|
+
@post_res.stub!(:body).and_return(@post_json)
|
328
|
+
@fs_com_mock.stub!(:post).and_return(@post_res)
|
216
329
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
330
|
+
# Create a payload to compare against
|
331
|
+
ft = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(@json)
|
332
|
+
person = ft.persons.find{|p|p.id=='KWQS-BBQ'}
|
333
|
+
person.create_relationship :type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological'
|
334
|
+
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.new
|
335
|
+
familytree.persons = [person]
|
336
|
+
@req_payload = familytree.to_json
|
337
|
+
|
338
|
+
@familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(@json)
|
339
|
+
Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.stub!(:from_json).and_return(@familytree)
|
223
340
|
|
341
|
+
@person = @familytree.persons.find{|p|p.id=='KWQS-BBQ'}
|
224
342
|
end
|
225
343
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
before(:each) do
|
230
|
-
@fs_com_mock = mock("FsCommunicator")
|
231
|
-
@res = mock("HTTP::Response")
|
232
|
-
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
344
|
+
it "should first try to read the relationship" do
|
345
|
+
@fs_com_mock.should_receive(:get).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR').and_return(@res)
|
346
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
233
347
|
end
|
234
348
|
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
@res.stub!(:code).and_return('404')
|
240
|
-
@fs_com_mock.stub!(:get).and_return(@res)
|
241
|
-
|
242
|
-
@post_json = read_file('relationship_update.js')
|
243
|
-
@post_res = mock("HTTP::Response")
|
244
|
-
@post_res.stub!(:body).and_return(@post_json)
|
245
|
-
@fs_com_mock.stub!(:post).and_return(@post_res)
|
246
|
-
|
247
|
-
@person = new_person
|
248
|
-
@person2 = new_person
|
249
|
-
Org::Familysearch::Ws::Familytree::V2::Schema::Person.stub!(:new).and_return(@person)
|
250
|
-
|
251
|
-
end
|
252
|
-
|
253
|
-
it "should first try to read the relationship" do
|
254
|
-
@fs_com_mock.should_receive(:get).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR').and_return(@res)
|
255
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
256
|
-
end
|
257
|
-
|
258
|
-
it "should create a new person with a relationship since it wasn't yet found" do
|
259
|
-
Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
|
260
|
-
@person.should_receive(:id=).with('KWQS-BBQ')
|
261
|
-
@person.should_receive(:create_relationship).with(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
|
262
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
263
|
-
end
|
264
|
-
|
265
|
-
it "should add a marriage event if sent an event key" do
|
266
|
-
Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
|
267
|
-
@person.should_receive(:id=).with('KWQS-BBQ')
|
268
|
-
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'})
|
269
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'}
|
270
|
-
end
|
271
|
-
|
272
|
-
it "should add an ordinances if sent an ordinance key" do
|
273
|
-
Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
|
274
|
-
@person.should_receive(:id=).with('KWQS-BBQ')
|
275
|
-
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'})
|
276
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'}
|
277
|
-
end
|
278
|
-
|
279
|
-
it "should post a familytree request with the person to the correct endpoint" do
|
280
|
-
@person2.create_relationship(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
|
281
|
-
@person2.id = 'KWQS-BBQ'
|
282
|
-
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.new
|
283
|
-
|
284
|
-
familytree.persons = [@person2]
|
285
|
-
@fs_com_mock.should_receive(:post).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR', familytree.to_json).and_return(@post_res)
|
286
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
287
|
-
end
|
288
|
-
|
349
|
+
it "should create a new person with a relationship since it wasn't yet found" do
|
350
|
+
@person.should_not_receive(:id=).with('KWQS-BBQ')
|
351
|
+
@person.should_receive(:create_relationship).with(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
|
352
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
289
353
|
end
|
290
354
|
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
@fs_com_mock.stub!(:post).and_return(@post_res)
|
303
|
-
|
304
|
-
# Create a payload to compare against
|
305
|
-
ft = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(@json)
|
306
|
-
person = ft.persons.find{|p|p.id=='KWQS-BBQ'}
|
307
|
-
person.create_relationship :type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological'
|
308
|
-
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.new
|
309
|
-
familytree.persons = [person]
|
310
|
-
@req_payload = familytree.to_json
|
311
|
-
|
312
|
-
@familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(@json)
|
313
|
-
Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.stub!(:from_json).and_return(@familytree)
|
314
|
-
|
315
|
-
@person = @familytree.persons.find{|p|p.id=='KWQS-BBQ'}
|
316
|
-
end
|
317
|
-
|
318
|
-
it "should first try to read the relationship" do
|
319
|
-
@fs_com_mock.should_receive(:get).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR').and_return(@res)
|
320
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
321
|
-
end
|
322
|
-
|
323
|
-
it "should create a new person with a relationship since it wasn't yet found" do
|
324
|
-
@person.should_not_receive(:id=).with('KWQS-BBQ')
|
325
|
-
@person.should_receive(:create_relationship).with(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
|
326
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
327
|
-
end
|
328
|
-
|
329
|
-
it "should add a marriage event if sent an event key" do
|
330
|
-
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'})
|
331
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'}
|
332
|
-
end
|
333
|
-
|
334
|
-
it "should add an ordinances if sent an ordinance key" do
|
335
|
-
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'})
|
336
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'}
|
337
|
-
end
|
338
|
-
|
339
|
-
it "should post a familytree request with the person to the correct endpoint" do
|
340
|
-
|
341
|
-
@fs_com_mock.should_receive(:post).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR', @req_payload).and_return(@post_res)
|
342
|
-
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
343
|
-
end
|
355
|
+
it "should add a marriage event if sent an event key" do
|
356
|
+
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'})
|
357
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'}
|
358
|
+
end
|
359
|
+
|
360
|
+
it "should add an ordinances if sent an ordinance key" do
|
361
|
+
@person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'})
|
362
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'}
|
363
|
+
end
|
364
|
+
|
365
|
+
it "should post a familytree request with the person to the correct endpoint" do
|
344
366
|
|
367
|
+
@fs_com_mock.should_receive(:post).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-BBR', @req_payload).and_return(@post_res)
|
368
|
+
@ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
|
345
369
|
end
|
370
|
+
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
describe "combining persons" do
|
375
|
+
def new_person(id,version)
|
376
|
+
p = FamilyTreeV2::Person.new
|
377
|
+
p.id = id
|
378
|
+
p.version = version
|
379
|
+
p
|
380
|
+
end
|
381
|
+
|
382
|
+
before(:each) do
|
383
|
+
@fs_com_mock = mock("FsCommunicator")
|
384
|
+
@post_res = mock("HTTP::Response")
|
385
|
+
@post_res.stub!(:body).and_return(read_file('../combine_response.js'))
|
386
|
+
|
387
|
+
@ft_v2_com = FamilytreeV2::Communicator.new @fs_com_mock
|
388
|
+
|
389
|
+
@persons = [new_person('KWQS-BBQ','1'),new_person('KWQS-BBR','2'),new_person('KWQS-BBB','3')]
|
390
|
+
@ft_v2_com.stub!(:person).and_return(@persons)
|
391
|
+
@fs_com_mock.stub!(:post).and_return(@post_res)
|
392
|
+
end
|
393
|
+
|
394
|
+
it "should accept an array of IDs and return the response person" do
|
395
|
+
new_person = @ft_v2_com.combine ['KWQS-BBQ','KWQS-BBR','KWQS-BBB']
|
396
|
+
new_person.should be_instance_of(FamilyTreeV2::Person)
|
397
|
+
end
|
398
|
+
|
399
|
+
it "should perform a person (version) read on all of the IDs passed" do
|
400
|
+
@ft_v2_com.should_receive(:person).with(['KWQS-BBQ','KWQS-BBR','KWQS-BBB'],{:genders => 'none', :events => 'none', :names => 'none'}).and_return(@persons)
|
401
|
+
result = @ft_v2_com.combine ['KWQS-BBQ','KWQS-BBR','KWQS-BBB']
|
402
|
+
end
|
403
|
+
|
404
|
+
it "should call post on /familytree/v2/person" do
|
405
|
+
familytree = FamilyTreeV2::FamilyTree.new
|
406
|
+
FamilyTreeV2::FamilyTree.should_receive(:new).and_return(familytree,familytree)
|
407
|
+
familytree.should_receive(:to_json).and_return('ftjson')
|
408
|
+
@fs_com_mock.should_receive(:post).with('/familytree/v2/person','ftjson').and_return(@post_res)
|
409
|
+
result = @ft_v2_com.combine ['KWQS-BBQ','KWQS-BBR','KWQS-BBB']
|
346
410
|
end
|
347
411
|
|
412
|
+
it "should result in a new person record with an id and version" do
|
413
|
+
result = @ft_v2_com.combine ['KWQS-BBQ','KWQS-BBR','KWQS-BBB']
|
414
|
+
result.id.should == "KW3B-VZC"
|
415
|
+
result.version.should == "65537"
|
416
|
+
end
|
348
417
|
end
|
349
418
|
|
350
419
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{"persons":[{"personas":{"persona":[{"id":"KW3B-VCY","version":"65537"},{"id":"KW3B-VCB","version":"65537"},{"id":"KW3B-VC1","version":"65537"}]}}]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"persons":[{"id":"KW3B-VZC","version":"65537"}],"version":"2.0.20091103.5176","statusCode":200,"statusMessage":"OK"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"persons":[{"id":"KW3B-VCY","version":"65537","requestedId":"KW3B-VCY"},{"id":"KW3B-VCB","version":"65537","requestedId":"KW3B-VCB"},{"id":"KW3B-VC1","version":"65537","requestedId":"KW3B-VC1"}],"version":"2.0.20091103.5176","statusCode":200,"statusMessage":"OK"}
|
@@ -576,4 +576,29 @@ describe Org::Familysearch::Ws::Familytree::V2::Schema::Person do
|
|
576
576
|
|
577
577
|
end
|
578
578
|
|
579
|
+
describe "create_combine" do
|
580
|
+
def new_combine_person(id,version)
|
581
|
+
person = new_person
|
582
|
+
person.id = id
|
583
|
+
person.version = version
|
584
|
+
person
|
585
|
+
end
|
586
|
+
|
587
|
+
before(:each) do
|
588
|
+
@person = new_person
|
589
|
+
@persons = [new_combine_person('KWQS-BBR','1'),new_combine_person('KWQS-BBQ','2'),new_combine_person('KWQS-BBZ','3')]
|
590
|
+
end
|
591
|
+
|
592
|
+
it "should accept an array of person objects" do
|
593
|
+
@person.create_combine(@persons)
|
594
|
+
@person.personas.personas[0].id.should == 'KWQS-BBR'
|
595
|
+
@person.personas.personas[0].version.should == '1'
|
596
|
+
@person.personas.personas[1].id.should == 'KWQS-BBQ'
|
597
|
+
@person.personas.personas[1].version.should == '2'
|
598
|
+
@person.personas.personas[2].id.should == 'KWQS-BBZ'
|
599
|
+
@person.personas.personas[2].version.should == '3'
|
600
|
+
end
|
601
|
+
|
602
|
+
end
|
603
|
+
|
579
604
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-fs-stack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmy Zimmerman
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-14 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -64,9 +64,12 @@ files:
|
|
64
64
|
- ruby-fs-stack.gemspec
|
65
65
|
- spec/communicator_spec.rb
|
66
66
|
- spec/familytree_v2/familytree_communicator_spec.rb
|
67
|
+
- spec/familytree_v2/json/combine_request.js
|
68
|
+
- spec/familytree_v2/json/combine_response.js
|
67
69
|
- spec/familytree_v2/json/match_KW3B-NNM.js
|
68
70
|
- spec/familytree_v2/json/person/KJ86-3VD_all.js
|
69
71
|
- spec/familytree_v2/json/person/KJ86-3VD_version.js
|
72
|
+
- spec/familytree_v2/json/person/multiple_version_read.js
|
70
73
|
- spec/familytree_v2/json/person/post_response.js
|
71
74
|
- spec/familytree_v2/json/person/relationship_not_found.js
|
72
75
|
- spec/familytree_v2/json/person/relationship_read.js
|