ruby-fs-stack 0.4.11 → 0.4.12

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -5,10 +5,6 @@ API modules provided by FamilySearch.
5
5
 
6
6
  == Installation
7
7
 
8
- If you haven't added gemcutter.org to your gem sources, run
9
-
10
- gem sources -a http://gemcutter.org
11
-
12
8
  Install the ruby-fs-stack gem
13
9
 
14
10
  sudo gem install ruby-fs-stack
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.11
1
+ 0.4.12
@@ -156,8 +156,6 @@ module FamilytreeV2
156
156
 
157
157
  relationship_type = get_relationship_type(options)
158
158
  with_id = options[relationship_type.to_sym]
159
-
160
- url = "#{Base}person/#{base_id}/#{relationship_type}/#{with_id}"
161
159
 
162
160
  # Get the existing person/relationship or create a new person
163
161
  unless person = relationship(base_id,options.merge({:events => 'none'}))
@@ -176,6 +174,12 @@ module FamilytreeV2
176
174
  familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.new
177
175
  familytree.persons = [person]
178
176
 
177
+ # Get the most current related ID for the URI
178
+ rels = person.relationships.get_relationships_of_type(r_options[:type])
179
+ rel = rels.find{|r|r.id == r_options[:with] || r.requestedId == r_options[:with]}
180
+ related_id = rel.id
181
+ url = "#{Base}person/#{base_id}/#{relationship_type}/#{related_id}"
182
+
179
183
  # Post the response and return the resulting person/relationship record from response
180
184
  response = @fs_communicator.post(url,familytree.to_json)
181
185
  res_familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.from_json JSON.parse(response.body)
@@ -740,8 +744,7 @@ module Org::Familysearch::Ws::Familytree::V2::Schema
740
744
  # ** :event - a hash with values {:type => 'Marriage', :date => '15 Nov 2007', :place => 'Utah, United States'}
741
745
  # ** :ordinance - a hash with values {:date => '15 Nov 2007', :temple => 'SLAKE', :place => 'Utah, United States', :type => "Sealing_to_Spouse"}
742
746
  def add_relationship(options)
743
- g_command = get_command(options[:type])
744
- relationship = self.send(g_command.to_sym).find{|r|r.id == options[:with] || r.requestedId == options[:with]}
747
+ relationship = self.get_relationships_of_type(options[:type]).find{|r|r.id == options[:with] || r.requestedId == options[:with]}
745
748
  if relationship.nil?
746
749
  relationship = Relationship.new
747
750
  relationship.id = options[:with]
@@ -761,6 +764,13 @@ module Org::Familysearch::Ws::Familytree::V2::Schema
761
764
  self.send(s_command.to_sym,[relationship])
762
765
  end
763
766
 
767
+ # ====Params
768
+ # * type - should be 'child', 'spouse', or 'parent'
769
+ def get_relationships_of_type(type)
770
+ g_command = get_command(type)
771
+ relationships = self.send(g_command.to_sym)
772
+ end
773
+
764
774
  # Overriding the Enunciate code because of a bug (parents, spouses, and children were not pluralized)
765
775
  # the json hash for this PersonRelationships
766
776
  def to_jaxb_json_hash
@@ -805,7 +815,7 @@ module Org::Familysearch::Ws::Familytree::V2::Schema
805
815
 
806
816
  private
807
817
  def get_command(type)
808
- (type == 'child') ? 'children' : "#{type}s"
818
+ (type.to_s == 'child') ? 'children' : "#{type}s"
809
819
  end
810
820
 
811
821
  def set_command(type)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruby-fs-stack}
8
- s.version = "0.4.11"
8
+ s.version = "0.4.12"
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-04-30}
12
+ s.date = %q{2010-05-01}
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 = [
@@ -64,6 +64,7 @@ Gem::Specification.new do |s|
64
64
  "spec/familytree_v2/note_spec.rb",
65
65
  "spec/familytree_v2/pedigree_spec.rb",
66
66
  "spec/familytree_v2/person_spec.rb",
67
+ "spec/familytree_v2/relationships_spec.rb",
67
68
  "spec/familytree_v2/search_results_spec.rb",
68
69
  "spec/fixtures/fakeweb_response.txt",
69
70
  "spec/fs_utils_spec.rb",
@@ -85,6 +86,7 @@ Gem::Specification.new do |s|
85
86
  "spec/familytree_v2/note_spec.rb",
86
87
  "spec/familytree_v2/pedigree_spec.rb",
87
88
  "spec/familytree_v2/person_spec.rb",
89
+ "spec/familytree_v2/relationships_spec.rb",
88
90
  "spec/familytree_v2/search_results_spec.rb",
89
91
  "spec/fs_utils_spec.rb",
90
92
  "spec/identity_v1/identity_spec.rb",
@@ -303,7 +303,8 @@ describe FamilytreeV2::Communicator do
303
303
 
304
304
  @person = new_person
305
305
  @person2 = new_person
306
- Org::Familysearch::Ws::Familytree::V2::Schema::Person.stub!(:new).and_return(@person)
306
+ @generic_person = new_person
307
+ Org::Familysearch::Ws::Familytree::V2::Schema::Person.stub!(:new).and_return(@generic_person)
307
308
 
308
309
  end
309
310
 
@@ -315,22 +316,22 @@ describe FamilytreeV2::Communicator do
315
316
  it "should create a new person with a relationship since it wasn't yet found" do
316
317
  Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
317
318
  @person.should_receive(:id=).with('KWQS-BBQ')
318
- @person.should_receive(:create_relationship).with(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
319
319
  @ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
320
+ @person.relationships.parents.first.id.should == 'KWQS-BBR'
320
321
  end
321
322
 
322
323
  it "should add a marriage event if sent an event key" do
323
324
  Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
324
325
  @person.should_receive(:id=).with('KWQS-BBQ')
325
- @person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'})
326
326
  @ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :event => {:type => 'Marriage', :place => 'United States', :date => '1800'}
327
+ @person.relationships.spouses.first.id.should == 'KWQS-BBR'
327
328
  end
328
329
 
329
330
  it "should add an ordinances if sent an ordinance key" do
330
331
  Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person)
331
332
  @person.should_receive(:id=).with('KWQS-BBQ')
332
- @person.should_receive(:create_relationship).with(:type => 'spouse', :with => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'})
333
333
  @ft_v2_com.write_relationship 'KWQS-BBQ', :spouse => 'KWQS-BBR', :ordinance => {:type => 'Sealing_to_Spouse', :place => 'United States', :date => '1800', :temple => 'SLAKE'}
334
+ @person.relationships.spouses.first.assertions.ordinances.first.value.type.should == 'Sealing_to_Spouse'
334
335
  end
335
336
 
336
337
  it "should post a familytree request with the person to the correct endpoint" do
@@ -343,6 +344,25 @@ describe FamilytreeV2::Communicator do
343
344
  @ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
344
345
  end
345
346
 
347
+ it "should post to the correct endpoint even if the related person ID changes" do
348
+ @person2.create_relationship(:type => 'parent', :with => 'KWQS-BBR', :lineage => 'Biological')
349
+ # Simulate a changed related ID
350
+ @person2.relationships.parents.first.id = 'KWQS-JIM'
351
+ @person2.relationships.parents.first.requestedId = 'KWQS-BBR'
352
+ @person2.id = 'KWQS-BBQ'
353
+
354
+ # inject this mock person into the write_relationship flow
355
+ Org::Familysearch::Ws::Familytree::V2::Schema::Person.should_receive(:new).and_return(@person2)
356
+ @person2.should_receive(:create_relationship)
357
+
358
+ familytree = Org::Familysearch::Ws::Familytree::V2::Schema::FamilyTree.new
359
+ familytree.persons = [@person2]
360
+
361
+ @fs_com_mock.should_receive(:post).with('/familytree/v2/person/KWQS-BBQ/parent/KWQS-JIM', familytree.to_json).and_return(@post_res)
362
+ @ft_v2_com.write_relationship 'KWQS-BBQ', :parent => 'KWQS-BBR', :lineage => 'Biological'
363
+ end
364
+
365
+
346
366
  end
347
367
 
348
368
  describe "for relationships that already exist" do
@@ -0,0 +1,73 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'ruby-fs-stack/familytree'
3
+
4
+
5
+ describe Org::Familysearch::Ws::Familytree::V2::Schema::PersonRelationships do
6
+ FamTreeV2 = Org::Familysearch::Ws::Familytree::V2::Schema
7
+
8
+ describe "add_relationship" do
9
+ before(:each) do
10
+ @relationships = FamTreeV2::PersonRelationships.new
11
+ end
12
+
13
+ describe "for spousal relationships" do
14
+ it "should create the relationship of the right type" do
15
+ @relationships.add_relationship :type => 'spouse', :with => 'KWQS-BBZ', :event => {:type => 'Marriage',:place =>"Utah, United States", :date => '15 Nov 2007'}
16
+ @relationships.spouses.first.id.should == 'KWQS-BBZ'
17
+ @relationships.spouses.first.assertions.events.first.value.type.should == 'Marriage'
18
+ end
19
+ end
20
+
21
+ describe "for parent relationships" do
22
+ it "should create the relationship of the right type" do
23
+ @relationships.add_relationship :type => 'parent', :with => 'KWQS-BBZ', :lineage => 'Biological'
24
+ @relationships.parents.first.id.should == 'KWQS-BBZ'
25
+ @relationships.parents.first.assertions.characteristics.first.value.type.should == 'Lineage'
26
+ end
27
+ end
28
+
29
+ describe "for child relationships" do
30
+ it "should create the relationship of the right type" do
31
+ @relationships.add_relationship :type => 'child', :with => 'KWQS-BBZ', :lineage => 'Biological'
32
+ @relationships.children.first.id.should == 'KWQS-BBZ'
33
+ @relationships.children.first.assertions.characteristics.first.value.type.should == 'Lineage'
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ describe "get_relationships_of_type" do
40
+ before(:each) do
41
+ @relationships = FamTreeV2::PersonRelationships.new
42
+ end
43
+
44
+ describe "for spousal relationships" do
45
+ it "should return the relationship of the right type" do
46
+ @relationships.add_relationship :type => 'spouse', :with => 'KWQS-BBZ', :event => {:type => 'Marriage',:place =>"Utah, United States", :date => '15 Nov 2007'}
47
+ spouses = @relationships.spouses
48
+ @relationships.get_relationships_of_type('spouse').should == spouses
49
+ @relationships.get_relationships_of_type(:spouse).should == spouses
50
+ end
51
+ end
52
+
53
+ describe "for parent relationships" do
54
+ it "should return the relationship of the right type" do
55
+ @relationships.add_relationship :type => 'parent', :with => 'KWQS-BBZ', :lineage => 'Biological'
56
+ parents = @relationships.parents
57
+ @relationships.get_relationships_of_type('parent').should == parents
58
+ @relationships.get_relationships_of_type(:parent).should == parents
59
+ end
60
+ end
61
+
62
+ describe "for child relationships" do
63
+ it "should return the relationship of the right type" do
64
+ @relationships.add_relationship :type => 'child', :with => 'KWQS-BBZ', :lineage => 'Biological'
65
+ children = @relationships.children
66
+ @relationships.get_relationships_of_type('child').should == children
67
+ @relationships.get_relationships_of_type(:child).should == children
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 11
9
- version: 0.4.11
8
+ - 12
9
+ version: 0.4.12
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jimmy Zimmerman
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-30 00:00:00 -06:00
17
+ date: 2010-05-01 00:00:00 -06:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -98,6 +98,7 @@ files:
98
98
  - spec/familytree_v2/note_spec.rb
99
99
  - spec/familytree_v2/pedigree_spec.rb
100
100
  - spec/familytree_v2/person_spec.rb
101
+ - spec/familytree_v2/relationships_spec.rb
101
102
  - spec/familytree_v2/search_results_spec.rb
102
103
  - spec/fixtures/fakeweb_response.txt
103
104
  - spec/fs_utils_spec.rb
@@ -142,6 +143,7 @@ test_files:
142
143
  - spec/familytree_v2/note_spec.rb
143
144
  - spec/familytree_v2/pedigree_spec.rb
144
145
  - spec/familytree_v2/person_spec.rb
146
+ - spec/familytree_v2/relationships_spec.rb
145
147
  - spec/familytree_v2/search_results_spec.rb
146
148
  - spec/fs_utils_spec.rb
147
149
  - spec/identity_v1/identity_spec.rb