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 CHANGED
@@ -4,4 +4,5 @@ coverage
4
4
  rdoc
5
5
  pkg
6
6
  examples/familytree_example_with_creds.rb
7
+ examples/tree_crawl.rb
7
8
  *.gem
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.5
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.
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
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.5"
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-24}
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.5
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-24 00:00:00 -07:00
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