ruby-fs-stack 0.4.5 → 0.4.6
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/.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
|