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 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