ruby-fs-stack 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/VERSION +1 -1
- data/lib/ruby-fs-stack/familytree.rb +124 -0
- data/ruby-fs-stack.gemspec +8 -5
- data/spec/familytree_v2/familytree_communicator_spec.rb +26 -0
- data/spec/familytree_v2/json/fakeweb_pedigree.txt +13 -0
- data/spec/familytree_v2/json/fakeweb_pedigree2.txt +13 -0
- data/spec/familytree_v2/pedigree_spec.rb +160 -0
- metadata +6 -2
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.6
|
@@ -244,6 +244,31 @@ module FamilytreeV2
|
|
244
244
|
return familytree.persons[0]
|
245
245
|
end
|
246
246
|
|
247
|
+
def pedigree(id_or_ids)
|
248
|
+
if id_or_ids.kind_of? Array
|
249
|
+
multiple_ids = true
|
250
|
+
url = Base + 'pedigree/' + id_or_ids.join(',')
|
251
|
+
else
|
252
|
+
multiple_ids = false
|
253
|
+
id = id_or_ids.to_s
|
254
|
+
if id == 'me'
|
255
|
+
url = Base + 'pedigree'
|
256
|
+
else
|
257
|
+
url = Base + 'pedigree/' + id
|
258
|
+
end
|
259
|
+
end
|
260
|
+
# url += add_querystring(options)
|
261
|
+
response = @fs_communicator.get(url)
|
262
|
+
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(response.body)
|
263
|
+
if multiple_ids
|
264
|
+
return familytree.pedigrees
|
265
|
+
else
|
266
|
+
pedigree = familytree.pedigrees.find{|p| p.requestedId == id }
|
267
|
+
pedigree ||= familytree.pedigrees.first if id == 'me'
|
268
|
+
return pedigree
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
247
272
|
private
|
248
273
|
#options will either have a :parent, :child, or :spouse key. We need to find which one
|
249
274
|
def get_relationship_type(options)
|
@@ -1168,6 +1193,105 @@ module Org::Familysearch::Ws::Familytree::V2::Schema
|
|
1168
1193
|
end
|
1169
1194
|
end
|
1170
1195
|
|
1196
|
+
class PedigreePerson < Person
|
1197
|
+
attr_accessor :pedigree
|
1198
|
+
|
1199
|
+
def initialize(pedigree = nil, person = nil)
|
1200
|
+
if person
|
1201
|
+
@id = person.id
|
1202
|
+
# @version = person.version if person.version
|
1203
|
+
@assertions = person.assertions if person.assertions
|
1204
|
+
@families = person.families if person.families
|
1205
|
+
@parents = person.parents if person.parents
|
1206
|
+
end
|
1207
|
+
if pedigree
|
1208
|
+
@pedigree = pedigree
|
1209
|
+
end
|
1210
|
+
end
|
1211
|
+
|
1212
|
+
def father
|
1213
|
+
pedigree.get_person(father_id)
|
1214
|
+
end
|
1215
|
+
|
1216
|
+
def mother
|
1217
|
+
pedigree.get_person(mother_id)
|
1218
|
+
end
|
1219
|
+
|
1220
|
+
end
|
1221
|
+
|
1222
|
+
class Pedigree
|
1223
|
+
attr_accessor :person_hash
|
1224
|
+
|
1225
|
+
def initialize
|
1226
|
+
@person_hash = {}
|
1227
|
+
@persons = []
|
1228
|
+
end
|
1229
|
+
|
1230
|
+
def injest(pedigree)
|
1231
|
+
@person_hash.merge!(pedigree.person_hash)
|
1232
|
+
graft_persons_to_self(pedigree.persons)
|
1233
|
+
@persons = @persons + pedigree.persons
|
1234
|
+
end
|
1235
|
+
|
1236
|
+
def <<(person)
|
1237
|
+
p = PedigreePerson.new(self, person)
|
1238
|
+
@persons << p
|
1239
|
+
@person_hash[p.id] = p
|
1240
|
+
end
|
1241
|
+
|
1242
|
+
def continue_nodes
|
1243
|
+
@persons.select do |person|
|
1244
|
+
(!person.mother_id.nil? && person.mother.nil?) || (!person.father_id.nil? && person.father.nil?)
|
1245
|
+
end
|
1246
|
+
end
|
1247
|
+
|
1248
|
+
def continue_node_ids
|
1249
|
+
continue_nodes.collect{|n|n.id}
|
1250
|
+
end
|
1251
|
+
|
1252
|
+
def continue_ids
|
1253
|
+
cns = continue_nodes
|
1254
|
+
father_ids = cns.select{|n|!n.father_id.nil?}.collect{|n|n.father_id}
|
1255
|
+
mother_ids = cns.select{|n|!n.mother_id.nil?}.collect{|n|n.mother_id}
|
1256
|
+
father_ids + mother_ids
|
1257
|
+
end
|
1258
|
+
|
1259
|
+
def get_person(id)
|
1260
|
+
@person_hash[id]
|
1261
|
+
end
|
1262
|
+
|
1263
|
+
def person_ids
|
1264
|
+
@persons.collect{|p|p.id}
|
1265
|
+
end
|
1266
|
+
|
1267
|
+
def init_jaxb_json_hash(_o)
|
1268
|
+
@id = String.from_json(_o['id']) unless _o['id'].nil?
|
1269
|
+
@requestedId = String.from_json(_o['requestedId']) unless _o['requestedId'].nil?
|
1270
|
+
if !_o['persons'].nil?
|
1271
|
+
@persons = Array.new
|
1272
|
+
_oa = _o['persons']
|
1273
|
+
_oa.each do | _item |
|
1274
|
+
pedigree_person = Org::Familysearch::Ws::Familytree::V2::Schema::PedigreePerson.from_json(_item)
|
1275
|
+
pedigree_person.pedigree = self
|
1276
|
+
@persons.push pedigree_person
|
1277
|
+
@person_hash[pedigree_person.id] = pedigree_person
|
1278
|
+
end
|
1279
|
+
end
|
1280
|
+
end
|
1281
|
+
|
1282
|
+
def root
|
1283
|
+
persons.first
|
1284
|
+
end
|
1285
|
+
|
1286
|
+
private
|
1287
|
+
def graft_persons_to_self(persons_to_graft)
|
1288
|
+
persons_to_graft.each do |person|
|
1289
|
+
person.pedigree = self
|
1290
|
+
end
|
1291
|
+
end
|
1292
|
+
|
1293
|
+
end
|
1294
|
+
|
1171
1295
|
class Note
|
1172
1296
|
|
1173
1297
|
#Builds out the elements needed for the note.
|
data/ruby-fs-stack.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruby-fs-stack}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.6"
|
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{2010-02-
|
12
|
+
s.date = %q{2010-02-25}
|
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 = [
|
@@ -42,6 +42,8 @@ Gem::Specification.new do |s|
|
|
42
42
|
"spec/familytree_v2/familytree_communicator_spec.rb",
|
43
43
|
"spec/familytree_v2/json/combine_request.js",
|
44
44
|
"spec/familytree_v2/json/combine_response.js",
|
45
|
+
"spec/familytree_v2/json/fakeweb_pedigree.txt",
|
46
|
+
"spec/familytree_v2/json/fakeweb_pedigree2.txt",
|
45
47
|
"spec/familytree_v2/json/match_KW3B-NNM.js",
|
46
48
|
"spec/familytree_v2/json/note_create_response.js",
|
47
49
|
"spec/familytree_v2/json/person/KJ86-3VD_all.js",
|
@@ -56,6 +58,7 @@ Gem::Specification.new do |s|
|
|
56
58
|
"spec/familytree_v2/json/search.js",
|
57
59
|
"spec/familytree_v2/match_results_spec.rb",
|
58
60
|
"spec/familytree_v2/note_spec.rb",
|
61
|
+
"spec/familytree_v2/pedigree_spec.rb",
|
59
62
|
"spec/familytree_v2/person_spec.rb",
|
60
63
|
"spec/familytree_v2/search_results_spec.rb",
|
61
64
|
"spec/fixtures/fakeweb_response.txt",
|
@@ -76,6 +79,7 @@ Gem::Specification.new do |s|
|
|
76
79
|
"spec/familytree_v2/familytree_communicator_spec.rb",
|
77
80
|
"spec/familytree_v2/match_results_spec.rb",
|
78
81
|
"spec/familytree_v2/note_spec.rb",
|
82
|
+
"spec/familytree_v2/pedigree_spec.rb",
|
79
83
|
"spec/familytree_v2/person_spec.rb",
|
80
84
|
"spec/familytree_v2/search_results_spec.rb",
|
81
85
|
"spec/fs_utils_spec.rb",
|
@@ -102,4 +106,3 @@ Gem::Specification.new do |s|
|
|
102
106
|
s.add_dependency(%q<fakeweb>, [">= 0"])
|
103
107
|
end
|
104
108
|
end
|
105
|
-
|
@@ -502,4 +502,30 @@ describe FamilytreeV2::Communicator do
|
|
502
502
|
end
|
503
503
|
end
|
504
504
|
|
505
|
+
describe "pedigree read" do
|
506
|
+
before(:each) do
|
507
|
+
options = {
|
508
|
+
:domain => 'https://fakeweb.familysearch.org',
|
509
|
+
:key => '1111-1111',
|
510
|
+
:user_agent => "FsCommunicator/0.1",
|
511
|
+
:session => 'SESSID',
|
512
|
+
}
|
513
|
+
@com = FsCommunicator.new options
|
514
|
+
response = File.join(File.dirname(__FILE__),'json','fakeweb_pedigree.txt')
|
515
|
+
FakeWeb.register_uri(:get, "https://fakeweb.familysearch.org/familytree/v2/pedigree/KWZF-CFW?sessionId=SESSID&dataFormat=application/json",
|
516
|
+
:response => response)
|
517
|
+
end
|
518
|
+
|
519
|
+
it "should read the pedigree" do
|
520
|
+
pedigree = @com.familytree_v2.pedigree 'KWZF-CFW'
|
521
|
+
pedigree.id.should == 'KWZF-CFW'
|
522
|
+
end
|
523
|
+
|
524
|
+
it "should have persons, the first one being the requested ID" do
|
525
|
+
pedigree = @com.familytree_v2.pedigree 'KWZF-CFW'
|
526
|
+
pedigree.persons.first.id.should == 'KWZF-CFW'
|
527
|
+
end
|
528
|
+
|
529
|
+
end
|
530
|
+
|
505
531
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Date: Mon, 22 Feb 2010 14:33:41 GMT
|
3
|
+
APP_SVR_ID: -8.-87
|
4
|
+
Expires: Thu, 01 Jan 1970 00:00:00 GMT
|
5
|
+
Cache-Control: no-cache
|
6
|
+
Cache-Control: no-store
|
7
|
+
X-PROCESSING-TIME: 256
|
8
|
+
Content-Type: application/json;charset=utf-8
|
9
|
+
Content-Language: en-US
|
10
|
+
Content-Length: 7900
|
11
|
+
Via: 1.1 rl1-sigma (Juniper Networks Application Acceleration Platform - DX 5.1.8 0)
|
12
|
+
|
13
|
+
{"pedigrees":[{"id":"KWZF-CFW","persons":[{"id":"KWZF-CFW","assertions":{"names":[{"value":{"forms":[{"fullText":"Francis Moroni Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KW8W-RFD"},{"gender":"Female","id":"KW8W-RF8"}],"parent":[{"gender":"Male","id":"KW8W-RFD"},{"gender":"Female","id":"KW8W-RF8"}]}]},{"id":"KW8W-RFD","assertions":{"names":[{"value":{"forms":[{"fullText":"Charles Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KN1H-HBK"},{"gender":"Female","id":"KLYL-KPZ"}],"parent":[{"gender":"Male","id":"KN1H-HBK"},{"gender":"Female","id":"KLYL-KPZ"}]}]},{"id":"KW8W-RF8","assertions":{"names":[{"value":{"forms":[{"fullText":"Sarah Ellen Felch"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"2794-46L"},{"gender":"Female","id":"279W-NDV"}],"parent":[{"gender":"Male","id":"2794-46L"},{"gender":"Female","id":"279W-NDV"}]}]},{"id":"KN1H-HBK","assertions":{"names":[{"value":{"forms":[{"fullText":"Johannes Rudolf Eman Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KN3F-F9B"},{"gender":"Female","id":"KN3V-9RN"}],"parent":[{"gender":"Male","id":"KN3F-F9B"},{"gender":"Female","id":"KN3V-9RN"}]}]},{"id":"KLYL-KPZ","assertions":{"names":[{"value":{"forms":[{"fullText":"Anna M. Zimmerman"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KFRD-R4F"},{"gender":"Female","id":"K6MF-LQZ"}],"parent":[{"gender":"Male","id":"KFRD-R4F"},{"gender":"Female","id":"K6MF-LQZ"}]}]},{"id":"2794-46L","assertions":{"names":[{"value":{"forms":[{"fullText":"Marshall Parker Felch"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KJ86-3VD"},{"gender":"Female","id":"279W-XKJ"}],"parent":[{"gender":"Male","id":"KJ86-3VD"},{"gender":"Female","id":"279W-XKJ"}]}]},{"id":"279W-NDV","assertions":{"names":[{"value":{"forms":[{"fullText":"Amanda Matilda Colburn"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"K29J-9BD"},{"gender":"Female","id":"KCFB-WTR"}],"parent":[{"gender":"Male","id":"K29J-9BD"},{"gender":"Female","id":"KCFB-WTR"}]}]},{"id":"KN3F-F9B","assertions":{"names":[{"value":{"forms":[{"fullText":"Johann J. Zimmermen"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"27H1-GGG"},{"gender":"Female","id":"2HKB-PCJ"}],"parent":[{"gender":"Male","id":"27H1-GGG"},{"gender":"Female","id":"2HKB-PCJ"}]}]},{"id":"KN3V-9RN","assertions":{"names":[{"value":{"forms":[{"fullText":"Elisabeth Wenger"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KGCF-GBV"},{"gender":"Female","id":"K4F8-J4P"}],"parent":[{"gender":"Male","id":"KGCF-GBV"},{"gender":"Female","id":"K4F8-J4P"}]}]},{"id":"KFRD-R4F","assertions":{"names":[{"value":{"forms":[{"fullText":"Christian Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KNQP-VBQ"},{"gender":"Female","id":"KGP8-TR7"}],"parent":[{"gender":"Male","id":"KNQP-VBQ"},{"gender":"Female","id":"KGP8-TR7"}]}]},{"id":"K6MF-LQZ","assertions":{"names":[{"value":{"forms":[{"fullText":"Mary Magdalena Weiland"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KJ86-3VD","assertions":{"names":[{"value":{"forms":[{"fullText":"Parker Felch"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KJ86-3VW"},{"gender":"Female","id":"KFY6-FC8"}],"parent":[{"gender":"Male","id":"KJ86-3VW"},{"gender":"Female","id":"KFY6-FC8"}]}]},{"id":"279W-XKJ","assertions":{"names":[{"value":{"forms":[{"fullText":"Hannah Gould"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KCRJ-JJD"},{"gender":"Female","id":"KCH1-KQF"}],"parent":[{"gender":"Male","id":"KCRJ-JJD"},{"gender":"Female","id":"KCH1-KQF"}]}]},{"id":"K29J-9BD","assertions":{"names":[{"value":{"forms":[{"fullText":"Ira Coburn"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"K29J-9TC"},{"gender":"Female","id":"K29J-9Y9"}],"parent":[{"gender":"Male","id":"K29J-9TC"},{"gender":"Female","id":"K29J-9Y9"}]}]},{"id":"KCFB-WTR","assertions":{"names":[{"value":{"forms":[{"fullText":"Celana Cisco"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"K83T-JZ5"},{"gender":"Female","id":"KCZ3-XGW"}],"parent":[{"gender":"Male","id":"K83T-JZ5"},{"gender":"Female","id":"KCZ3-XGW"}]}]},{"id":"27H1-GGG","assertions":{"names":[{"value":{"forms":[{"fullText":"Christen Zimmermann"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KG9T-DVW"},{"gender":"Female","id":"KNSW-LY9"}],"parent":[{"gender":"Male","id":"KG9T-DVW"},{"gender":"Female","id":"KNSW-LY9"}]}]},{"id":"2HKB-PCJ","assertions":{"names":[{"value":{"forms":[{"fullText":"Susanna Saegersmann"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KGP8-TK8"},{"gender":"Female","id":"KGP8-TGY"}],"parent":[{"gender":"Male","id":"KGP8-TK8"},{"gender":"Female","id":"KGP8-TGY"}]}]},{"id":"KGCF-GBV","assertions":{"names":[{"value":{"forms":[{"fullText":"David Wenger"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"K4BK-G9S"},{"gender":"Female","id":"KC4S-CG3"}],"parent":[{"gender":"Male","id":"K4BK-G9S"},{"gender":"Female","id":"KC4S-CG3"}]}]},{"id":"K4F8-J4P","assertions":{"names":[{"value":{"forms":[{"fullText":"Elisabeth Zuercher"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KNQP-VBQ","assertions":{"names":[{"value":{"forms":[{"fullText":"Daniel Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]}},{"id":"KGP8-TR7","assertions":{"names":[{"value":{"forms":[{"fullText":"Anna S Gessemann"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KGP8-TK8"},{"gender":"Female","id":"KGP8-TGY"}],"parent":[{"gender":"Male","id":"KGP8-TK8"},{"gender":"Female","id":"KGP8-TGY"}]}]},{"id":"KJ86-3VW","assertions":{"names":[{"value":{"forms":[{"fullText":"Lewis Felch"}]}}],"genders":[{"value":{"type":"Male"}}]}},{"id":"KFY6-FC8","assertions":{"names":[{"value":{"forms":[{"fullText":"Mary Smith"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KCRJ-JJD","assertions":{"names":[{"value":{"forms":[{"fullText":"Amos Gould"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KHG3-V4Z"},{"gender":"Female","id":"27DZ-TRF"}],"parent":[{"gender":"Male","id":"KHG3-V4Z"},{"gender":"Female","id":"27DZ-TRF"}]}]},{"id":"KCH1-KQF","assertions":{"names":[{"value":{"forms":[{"fullText":"Rebecca Ferley"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"277G-ZJN"},{"gender":"Female","id":"277L-KZG"}],"parent":[{"gender":"Male","id":"277G-ZJN"},{"gender":"Female","id":"277L-KZG"}]}]},{"id":"K29J-9TC","assertions":{"names":[{"value":{"forms":[{"fullText":"Ira Coburn"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"2MKD-ZB8"},{"gender":"Female","id":"2MKD-Z1L"}],"parent":[{"gender":"Male","id":"2MKD-ZB8"},{"gender":"Female","id":"2MKD-Z1L"}]}]},{"id":"K29J-9Y9","assertions":{"names":[{"value":{"forms":[{"fullText":"Mercy Mason"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"K426-LCM"}],"parent":[{"gender":"Male","id":"K426-LCM"}]}]},{"id":"K83T-JZ5","assertions":{"names":[{"value":{"forms":[{"fullText":"Richard Cisco"}]}}],"genders":[{"value":{"type":"Male"}}]}},{"id":"KCZ3-XGW","assertions":{"names":[{"value":{"forms":[{"fullText":"Celia Thomas"}]}}],"genders":[{"value":{"type":"Female"}}]}}],"requestedId":"KWZF-CFW"}],"version":"2.0.20091103.5215","statusCode":200,"statusMessage":"OK"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Date: Tue, 23 Feb 2010 14:38:35 GMT
|
3
|
+
APP_SVR_ID: -8.-93
|
4
|
+
Expires: Thu, 01 Jan 1970 00:00:00 GMT
|
5
|
+
Cache-Control: no-cache
|
6
|
+
Cache-Control: no-store
|
7
|
+
X-PROCESSING-TIME: 358
|
8
|
+
Content-Type: application/json;charset=utf-8
|
9
|
+
Content-Language: en-US
|
10
|
+
Content-Length: 6270
|
11
|
+
Via: 1.1 rl1-pi (Juniper Networks Application Acceleration Platform - DX 5.1.8 0)
|
12
|
+
|
13
|
+
{"pedigrees":[{"id":"KG9T-DVW","persons":[{"id":"KG9T-DVW","assertions":{"names":[{"value":{"forms":[{"fullText":"Daniel Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"2HK1-CLB"},{"gender":"Female","id":"KG9T-D95"}],"parent":[{"gender":"Male","id":"2HK1-CLB"},{"gender":"Female","id":"KG9T-D95"}]}]},{"id":"2HK1-CLB","assertions":{"names":[{"value":{"forms":[{"fullText":"Abraham Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"2HK1-CBN"},{"gender":"Female","id":"2HK1-ZQQ"}],"parent":[{"gender":"Male","id":"2HK1-CBN"},{"gender":"Female","id":"2HK1-ZQQ"}]}]},{"id":"KG9T-D95","assertions":{"names":[{"value":{"forms":[{"fullText":"Elizabeth Zimmerman"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KG9R-54N"},{"gender":"Female","id":"KLBC-TQZ"}],"parent":[{"gender":"Male","id":"KG9R-54N"},{"gender":"Female","id":"KLBC-TQZ"}]}]},{"id":"2HK1-CBN","assertions":{"names":[{"value":{"forms":[{"fullText":"Hans Zimmermann"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"2H2Q-Q6P"},{"gender":"Female","id":"27DM-7M3"}],"parent":[{"gender":"Male","id":"2H2Q-Q6P"},{"gender":"Female","id":"27DM-7M3"}]}]},{"id":"2HK1-ZQQ","assertions":{"names":[{"value":{"forms":[{"fullText":"Barbara Niederhauser"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KG9R-54N","assertions":{"names":[{"value":{"forms":[{"fullText":"Heinrich Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KG9T-XZV"},{"gender":"Female","id":"KG9T-FBR"}],"parent":[{"gender":"Male","id":"KG9T-XZV"},{"gender":"Female","id":"KG9T-FBR"}]}]},{"id":"KLBC-TQZ","assertions":{"names":[{"value":{"forms":[{"fullText":"Benedickta Wenger"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"273N-YT2"},{"gender":"Female","id":"27FV-9WD"}],"parent":[{"gender":"Male","id":"273N-YT2"},{"gender":"Female","id":"27FV-9WD"}]}]},{"id":"2H2Q-Q6P","assertions":{"names":[{"value":{"forms":[{"fullText":"Benedikt Zimmermann"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"2HK1-VSF"},{"gender":"Female","id":"2HK1-VW7"}],"parent":[{"gender":"Male","id":"2HK1-VSF"},{"gender":"Female","id":"2HK1-VW7"}]}]},{"id":"27DM-7M3","assertions":{"names":[{"value":{"forms":[{"fullText":"Benedickta Zedel"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KG9T-XZV","assertions":{"names":[{"value":{"forms":[{"fullText":"Benedickt Zimmermann"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KGSQ-NQ8"},{"gender":"Female","id":"KGSQ-WD9"}],"parent":[{"gender":"Male","id":"KGSQ-NQ8"},{"gender":"Female","id":"KGSQ-WD9"}]}]},{"id":"KG9T-FBR","assertions":{"names":[{"value":{"forms":[{"fullText":"*Dorothea Thoenen"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KNCL-TYT"},{"gender":"Female","id":"KNC2-9J8"}],"parent":[{"gender":"Male","id":"KNCL-TYT"},{"gender":"Female","id":"KNC2-9J8"}]}]},{"id":"273N-YT2","assertions":{"names":[{"value":{"forms":[{"fullText":"Melchior Wenger"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KLBC-G95"},{"gender":"Female","id":"K2BS-1PB"}],"parent":[{"gender":"Male","id":"KLBC-G95"},{"gender":"Female","id":"K2BS-1PB"}]}]},{"id":"27FV-9WD","assertions":{"names":[{"value":{"forms":[{"fullText":"*Margaret Stucki"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"KGSD-LKV"},{"gender":"Female","id":"KGSD-L5X"}],"parent":[{"gender":"Male","id":"KGSD-LKV"},{"gender":"Female","id":"KGSD-L5X"}]}]},{"id":"2HK1-VSF","assertions":{"names":[{"value":{"forms":[{"fullText":"Hans Zimmermann"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KLL5-XFL"},{"gender":"Female","id":"KLL5-XKB"}],"parent":[{"gender":"Male","id":"KLL5-XFL"},{"gender":"Female","id":"KLL5-XKB"}]}]},{"id":"2HK1-VW7","assertions":{"names":[{"value":{"forms":[{"fullText":"Apolinia Hodler"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KGSQ-NQ8","assertions":{"names":[{"value":{"forms":[{"fullText":"Felix Zimmerman"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KVK1-CGZ"},{"gender":"Female","id":"KPQ8-4QK"}],"parent":[{"gender":"Male","id":"KVK1-CGZ"},{"gender":"Female","id":"KPQ8-4QK"}]}]},{"id":"KGSQ-WD9","assertions":{"names":[{"value":{"forms":[{"fullText":"Barbli (Zimmerman)"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KNCL-TYT","assertions":{"names":[{"value":{"forms":[{"fullText":"Mr. Thonen"}]}}],"genders":[{"value":{"type":"Male"}}]}},{"id":"KNC2-9J8","assertions":{"names":[{"value":{"forms":[{"fullText":"Mrs. Thonen"}]}}],"genders":[{"value":{"type":"Female"}}]}},{"id":"KLBC-G95","assertions":{"names":[{"value":{"forms":[{"fullText":"Peter Wenger"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"KNWY-RJG"},{"gender":"Female","id":"KNWY-RKQ"}],"parent":[{"gender":"Male","id":"KNWY-RJG"},{"gender":"Female","id":"KNWY-RKQ"}]}]},{"id":"K2BS-1PB","assertions":{"names":[{"value":{"forms":[{"fullText":"Barbli Koeniger"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"27D5-8NH"},{"gender":"Female","id":"27D5-X3P"}],"parent":[{"gender":"Male","id":"27D5-8NH"},{"gender":"Female","id":"27D5-X3P"}]}]},{"id":"KGSD-LKV","assertions":{"names":[{"value":{"forms":[{"fullText":"Hans Stucki Jr"}]}}],"genders":[{"value":{"type":"Male"}}]},"parents":[{"parents":[{"gender":"Male","id":"27FK-JJX"},{"gender":"Female","id":"KNWT-LZP"}],"parent":[{"gender":"Male","id":"27FK-JJX"},{"gender":"Female","id":"KNWT-LZP"}]}]},{"id":"KGSD-L5X","assertions":{"names":[{"value":{"forms":[{"fullText":"Madlena Wilfli"}]}}],"genders":[{"value":{"type":"Female"}}]},"parents":[{"parents":[{"gender":"Male","id":"27D5-LH8"},{"gender":"Female","id":"27D5-5XD"}],"parent":[{"gender":"Male","id":"27D5-LH8"},{"gender":"Female","id":"27D5-5XD"}]}]}],"requestedId":"KG9T-DVW"}],"version":"2.0.20091103.5215","statusCode":200,"statusMessage":"OK"}
|
@@ -0,0 +1,160 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'ruby-fs-stack/familytree'
|
3
|
+
|
4
|
+
describe Org::Familysearch::Ws::Familytree::V2::Schema::Pedigree do
|
5
|
+
before(:each) do
|
6
|
+
options = {
|
7
|
+
:domain => 'https://fakeweb.familysearch.org',
|
8
|
+
:key => '1111-1111',
|
9
|
+
:user_agent => "FsCommunicator/0.1",
|
10
|
+
:session => 'SESSID',
|
11
|
+
}
|
12
|
+
@com = FsCommunicator.new options
|
13
|
+
response = File.join(File.dirname(__FILE__),'json','fakeweb_pedigree.txt')
|
14
|
+
FakeWeb.register_uri(:get, "https://fakeweb.familysearch.org/familytree/v2/pedigree/KWZF-CFW?sessionId=SESSID&dataFormat=application/json",
|
15
|
+
:response => response)
|
16
|
+
@pedigree = @com.familytree_v2.pedigree 'KWZF-CFW'
|
17
|
+
@pedigree.class.should == Org::Familysearch::Ws::Familytree::V2::Schema::Pedigree
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should have a root element that is a PedigreePerson" do
|
21
|
+
@pedigree.root.class.should == Org::Familysearch::Ws::Familytree::V2::Schema::PedigreePerson
|
22
|
+
@pedigree.root.id.should == 'KWZF-CFW'
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "the root" do
|
26
|
+
it "should have a father and a mother" do
|
27
|
+
@pedigree.root.father.id.should == 'KW8W-RFD'
|
28
|
+
@pedigree.root.father.father.id.should == 'KN1H-HBK'
|
29
|
+
@pedigree.root.mother.id.should == 'KW8W-RF8'
|
30
|
+
@pedigree.root.mother.mother.id.should == '279W-NDV'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have a full_name method" do
|
34
|
+
@pedigree.root.full_name.should == "Francis Moroni Zimmerman"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have a gender" do
|
38
|
+
@pedigree.root.gender.should == 'Male'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return nil if there is no mother or father" do
|
42
|
+
@pedigree.root.mother.mother.mother.mother.mother.should be_nil
|
43
|
+
@pedigree.root.father.father.father.father.father.should be_nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "person_ids" do
|
48
|
+
it "should return an array of person ids" do
|
49
|
+
@pedigree.person_ids.should be_instance_of(Array)
|
50
|
+
@pedigree.person_ids.size.should == 29
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "continue_nodes" do
|
55
|
+
it "should return an array of PedigreePersons that are at the edge of the pedigree" do
|
56
|
+
@pedigree.continue_nodes.should be_instance_of(Array)
|
57
|
+
@pedigree.continue_nodes.size.should == 8
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "continue_node_ids" do
|
61
|
+
it "should return an array of IDs for the edge people that we have in the pedigree" do
|
62
|
+
@pedigree.continue_node_ids.should be_instance_of(Array)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "continue_ids" do
|
67
|
+
it "should return an array of IDs that are needed to continue the pedigree" do
|
68
|
+
@pedigree.continue_ids.should be_instance_of(Array)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "stitching pedigrees with injest" do
|
74
|
+
before(:each) do
|
75
|
+
response = File.join(File.dirname(__FILE__),'json','fakeweb_pedigree2.txt')
|
76
|
+
FakeWeb.register_uri(:get, "https://fakeweb.familysearch.org/familytree/v2/pedigree/KG9T-DVW?sessionId=SESSID&dataFormat=application/json",
|
77
|
+
:response => response)
|
78
|
+
@pedigree2 = @com.familytree_v2.pedigree 'KG9T-DVW'
|
79
|
+
@pedigree2.root.id.should == 'KG9T-DVW'
|
80
|
+
@master_pedigree = Org::Familysearch::Ws::Familytree::V2::Schema::Pedigree.new
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should set the first pedigree's root to the new root if empty" do
|
84
|
+
@master_pedigree.injest @pedigree
|
85
|
+
@master_pedigree.root.id.should == @pedigree.root.id
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should add the injested pedigree's persons to the :persons attr" do
|
89
|
+
@master_pedigree.injest @pedigree
|
90
|
+
@master_pedigree.injest @pedigree2
|
91
|
+
@master_pedigree.persons.size.should == @pedigree.persons.size + @pedigree2.persons.size
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should set :pedigree attr of each of the PedigreePersons to the master pedigree" do
|
95
|
+
@master_pedigree.injest @pedigree
|
96
|
+
@master_pedigree.persons.each do |p|
|
97
|
+
p.pedigree.should == @master_pedigree
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should merge the person_hash to the hash of the injested pedigree" do
|
102
|
+
@master_pedigree.injest @pedigree
|
103
|
+
@master_pedigree.person_hash['KWZF-CFW'].should == @pedigree.root
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should allow the pedigree to be traversed from the root to the end node" do
|
107
|
+
@master_pedigree.injest @pedigree
|
108
|
+
@master_pedigree.injest @pedigree2
|
109
|
+
@master_pedigree.root.father.id.should == 'KW8W-RFD'
|
110
|
+
@master_pedigree.root.father.father.father.father.father.father.father.father.father.id.should == '2HK1-VSF'
|
111
|
+
@master_pedigree.root.father.father.father.father.father.father.father.father.father.full_name.should == 'Hans Zimmermann'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "adding one person at a time via << " do
|
116
|
+
|
117
|
+
def parse_person(filename = 'KJ86-3VD_parents_families.js')
|
118
|
+
fname = File.join(File.dirname(__FILE__),'json','person',filename)
|
119
|
+
json_hash = JSON.parse(File.read(fname))
|
120
|
+
familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json(json_hash)
|
121
|
+
familytree.persons[0]
|
122
|
+
end
|
123
|
+
|
124
|
+
before(:each) do
|
125
|
+
@person1 = parse_person
|
126
|
+
@person2 = Org::Familysearch::Ws::Familytree::V2::Schema::Person.new
|
127
|
+
@person2.id = 'KJ86-3VW'
|
128
|
+
@master_pedigree = Org::Familysearch::Ws::Familytree::V2::Schema::Pedigree.new
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should add the person to the root if it is the first one" do
|
132
|
+
@master_pedigree << @person1
|
133
|
+
@master_pedigree.root.id.should == @person1.id
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should convert the Person into a PedigreePerson" do
|
137
|
+
@master_pedigree << @person1
|
138
|
+
@master_pedigree.root.should be_instance_of(Org::Familysearch::Ws::Familytree::V2::Schema::PedigreePerson)
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should have the assertions, families, and parents of the original person" do
|
142
|
+
@master_pedigree << @person1
|
143
|
+
@master_pedigree.root.assertions.should == @person1.assertions
|
144
|
+
@master_pedigree.root.families.should == @person1.families
|
145
|
+
@master_pedigree.root.parents.should == @person1.parents
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should set the PedigreePerson's :pedigree to the containing pedigree" do
|
149
|
+
@master_pedigree << @person1
|
150
|
+
@master_pedigree.root.pedigree.should == @master_pedigree
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should be able to get the person" do
|
154
|
+
@master_pedigree << @person1
|
155
|
+
@master_pedigree.get_person(@person1.id).id.should == @person1.id
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
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.4.
|
4
|
+
version: 0.4.6
|
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: 2010-02-
|
12
|
+
date: 2010-02-25 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -67,6 +67,8 @@ files:
|
|
67
67
|
- spec/familytree_v2/familytree_communicator_spec.rb
|
68
68
|
- spec/familytree_v2/json/combine_request.js
|
69
69
|
- spec/familytree_v2/json/combine_response.js
|
70
|
+
- spec/familytree_v2/json/fakeweb_pedigree.txt
|
71
|
+
- spec/familytree_v2/json/fakeweb_pedigree2.txt
|
70
72
|
- spec/familytree_v2/json/match_KW3B-NNM.js
|
71
73
|
- spec/familytree_v2/json/note_create_response.js
|
72
74
|
- spec/familytree_v2/json/person/KJ86-3VD_all.js
|
@@ -81,6 +83,7 @@ files:
|
|
81
83
|
- spec/familytree_v2/json/search.js
|
82
84
|
- spec/familytree_v2/match_results_spec.rb
|
83
85
|
- spec/familytree_v2/note_spec.rb
|
86
|
+
- spec/familytree_v2/pedigree_spec.rb
|
84
87
|
- spec/familytree_v2/person_spec.rb
|
85
88
|
- spec/familytree_v2/search_results_spec.rb
|
86
89
|
- spec/fixtures/fakeweb_response.txt
|
@@ -122,6 +125,7 @@ test_files:
|
|
122
125
|
- spec/familytree_v2/familytree_communicator_spec.rb
|
123
126
|
- spec/familytree_v2/match_results_spec.rb
|
124
127
|
- spec/familytree_v2/note_spec.rb
|
128
|
+
- spec/familytree_v2/pedigree_spec.rb
|
125
129
|
- spec/familytree_v2/person_spec.rb
|
126
130
|
- spec/familytree_v2/search_results_spec.rb
|
127
131
|
- spec/fs_utils_spec.rb
|