familysearch 0.2.0 → 0.3.0

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.
@@ -0,0 +1,29 @@
1
+ module FamilySearch
2
+ # namespace for all of the errors that will be raised by this gem.
3
+ module Error
4
+ # To be raised if there is any problem with an HTTP request, meaning 40x-50x error.
5
+ class ClientError < StandardError
6
+ attr_reader :response
7
+ # Allows raising an error and having the error keep the response object with it for debugging purposes.
8
+ def initialize(response = {})
9
+ @response = response
10
+ end
11
+ end
12
+ # Raised if the client cannot successfully authenticate with basic_auth! method.
13
+ class BadCredentials < ClientError; end
14
+ #--
15
+ # Template Related Errors
16
+ #++
17
+
18
+ # Raised if a template is not found on FamilySearch::Client#template call
19
+ class URLTemplateNotFound < StandardError; end
20
+
21
+ # Raised if a get, post, put, or delete method is called on a FamilySearch::URLTemplate that
22
+ # doesn't support those methods.
23
+ class MethodNotAllowed < StandardError; end
24
+
25
+ # Raised if a parameter is passed to a get (or other method call) on a FamilySearch::URLTemplate object
26
+ # that doesn't contain that parameter in the template string.
27
+ class TemplateValueNotFound < StandardError; end
28
+ end
29
+ end
@@ -0,0 +1,2 @@
1
+ require 'familysearch/middleware/response/familysearch_errors'
2
+ require 'familysearch/middleware/response/multi_json'
@@ -0,0 +1,22 @@
1
+ require 'faraday'
2
+
3
+ module FamilySearch
4
+ # Middleware specific to the +familysearch+ gem
5
+ module Middleware
6
+ # Handles the raising of errors within the Faraday call stack.
7
+ class RaiseErrors < Faraday::Response::RaiseError
8
+ # If a 400-600 error is raised by the HTTP call, raise it within the app.
9
+ def on_complete(env)
10
+ case env[:status]
11
+ when 401
12
+ # response_values is a method of the RaiseError class
13
+ raise FamilySearch::Error::BadCredentials, response_values(env)
14
+ when 400...600
15
+ raise FamilySearch::Error::ClientError, response_values(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ Faraday.register_middleware :response, :familysearch_errors => FamilySearch::Middleware::RaiseErrors
@@ -0,0 +1,22 @@
1
+ require 'faraday'
2
+ require 'multi_json'
3
+
4
+ module FamilySearch
5
+ module Middleware
6
+ # Parses the response from JSON into a Hash. This uses the +multi_json+ gem to provide
7
+ # more flexibility in JSON parser support and to better support other ruby environments such
8
+ # as JRuby, Rubinius, etc.
9
+ class MultiJsonParse < Faraday::Response::Middleware
10
+ dependency do
11
+ require 'json' unless defined?(::JSON)
12
+ end
13
+
14
+ # The method that has MultiJson parse the json string.
15
+ def parse(body)
16
+ MultiJson.load(body)
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ Faraday.register_middleware :response, :multi_json => FamilySearch::Middleware::MultiJsonParse
@@ -0,0 +1,132 @@
1
+ module FamilySearch
2
+ # Used to make calls on templates that are exposed through the Discovery Resource.
3
+ #
4
+ # It wouldn't be expected that a developer would access this class directly, but is the
5
+ # resulting object of a FamilySearch::Client#template call.
6
+ #
7
+ # =Usage:
8
+ #
9
+ # To use the URLTemplate, access the template from the FamilySearch::Client object like so:
10
+ #
11
+ # client = FamilySearch::Client.new
12
+ # res = client.template('person').get :pid => 'KWQS-BBQ'
13
+ # res.body['persons'][0]['id] # => 'KWQS-BBQ'
14
+ #
15
+ # For information on which templates are available, see the discovery resource.
16
+ #
17
+ # [sandbox] https://sandbox.familysearch.org/.well-known/app-meta.json
18
+ #
19
+ # [production] https://familysearch.org/.well-known/app-meta.json
20
+ #
21
+ class URLTemplate
22
+ attr :template, :type, :accept, :allow, :title
23
+
24
+ # Instantiate a new FamilySearch::URLTemplate
25
+ #
26
+ # *Args* :
27
+ # - +client+: a FamilySearch::Client object.
28
+ # - +template_hash+: a hash containing template values from the Discovery Resource.
29
+ # Example:
30
+ # {
31
+ # "template" => "https://sandbox.familysearch.org/platform/tree/persons/{pid}{?access_token}",
32
+ # "type" => "application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html",
33
+ # "accept" => "application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml",
34
+ # "allow" => "HEAD,GET,POST,DELETE,GET,POST",
35
+ # "title" => "Person"
36
+ # }
37
+ # *Returns* :
38
+ # - +FamilySearch::URLTemplate+ object
39
+ # *Raises* :
40
+ # - +FamilySearch::Error::URLTemplateNotFound+: if the template_hash is nil.
41
+ # This is intended to catch problems if FamilySearch::Client#template method doesn't find
42
+ # a template and still instantiates this object.
43
+ #
44
+ def initialize(client,template_hash)
45
+ raise FamilySearch::Error::URLTemplateNotFound if template_hash.nil?
46
+ @client = client
47
+ @template = template_hash['template']
48
+ @type = template_hash['type']
49
+ @accept = template_hash['accept']
50
+ @allow = template_hash['allow'].split(',').map{|v|v.downcase}
51
+ @title = template_hash['title']
52
+ end
53
+
54
+ # Calls HTTP GET on the URL template. It takes the +template_values+ hash and merges the values into the template.
55
+ #
56
+ # A template will contain a URL like this:
57
+ # https://sandbox.familysearch.org/platform/tree/persons-with-relationships{?access_token,person}
58
+ # or
59
+ # https://sandbox.familysearch.org/platform/tree/persons/{pid}/matches{?access_token}
60
+ #
61
+ # The {?person} type attributes in the first example will be passed as querystring parameters. These will automatically be URL Encoded
62
+ # by the underlying Faraday library that handles the HTTP request.
63
+ #
64
+ # The {pid} type attibutes will simply be substituted into the URL.
65
+ #
66
+ # *Note*: The +access_token+ parameter doesn't need to be passed here. This should be handled by the FamilySearch::Client's
67
+ # Authorization header.
68
+ #
69
+ # *Args* :
70
+ # - +template_values+: A Hash object containing the values for the items in the URL template. For example, if the URL is:
71
+ # https://sandbox.familysearch.org/platform/tree/persons-with-relationships{?access_token,person}
72
+ # then you would pass a hash like this:
73
+ # :person => 'KWQS-BBQ'
74
+ # or
75
+ # 'person' => 'KWQS-BBQ'
76
+ # *Returns* :
77
+ # - +Faraday::Response+ object. This object contains methods +body+, +headers+, and +status+. +body+ should contain a Hash of the
78
+ # parsed result of the request.
79
+ # *Raises* :
80
+ # - +FamilySearch::Error::MethodNotAllowed+: if you call +get+ for a template that doesn't allow GET method.
81
+ #
82
+ def get(template_values)
83
+ raise FamilySearch::Error::MethodNotAllowed unless allow.include?('get')
84
+ template_values = validate_values(template_values)
85
+ url = make_url(template_values)
86
+ params = make_params(template_values)
87
+ @client.get url, params
88
+ end
89
+
90
+ private
91
+ def value_array
92
+ template_value_array = []
93
+ values = @template.scan(/\{([^}]*)\}/).flatten
94
+ values.each do |value|
95
+ value.gsub!('?','')
96
+ template_value_array += value.split(',')
97
+ end
98
+ template_value_array
99
+ end
100
+
101
+ def validate_values(template_values)
102
+ vals = value_array
103
+ stringified_hash = {}
104
+ template_values.each do |k,v|
105
+ stringified_hash[k.to_s] = v
106
+ raise FamilySearch::Error::TemplateValueNotFound unless vals.include?(k.to_s)
107
+ end
108
+ stringified_hash
109
+ end
110
+
111
+ def make_url(template_values)
112
+ url = @template.gsub(/\{\?[^}]*\}/,'')
113
+ template_values.each do |k,v|
114
+ to_replace = "{#{k}}"
115
+ url.gsub!(to_replace,v)
116
+ end
117
+ url
118
+ end
119
+
120
+ def make_params(template_values)
121
+ to_remove = url_values
122
+ to_remove.each do |v|
123
+ template_values.delete(v)
124
+ end
125
+ template_values
126
+ end
127
+
128
+ def url_values
129
+ @template.scan(/\{(\w*)\}/).flatten
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,4 @@
1
+ module FamilySearch
2
+ # The version of the familysearch gem. Can be accessed from code FamilySearch::VERSION
3
+ VERSION = "0.3.0"
4
+ end
@@ -91,7 +91,6 @@ describe FamilySearch::Client do
91
91
  it "should make a request " do
92
92
  VCR.use_cassette('discovery') do
93
93
  client.discover!
94
- client.discovery.links.fs_identity_v2_login.href.should == 'https://sandbox.familysearch.org/identity/v2/login'
95
94
  client.discovery['links']['fs-identity-v2-login']['href'].should == 'https://sandbox.familysearch.org/identity/v2/login'
96
95
  end
97
96
  end
@@ -128,5 +127,107 @@ describe FamilySearch::Client do
128
127
  client.basic_auth! 'api-user-1241', '1782'
129
128
  end
130
129
  end
130
+
131
+ it "should raise an error if the username or password are incorrect" do
132
+ VCR.use_cassette('discovery_auth_wrong_creds') do
133
+ expect {client.basic_auth! 'api-user-1241', '1783' }.to raise_error(FamilySearch::Error::BadCredentials)
134
+ end
135
+ end
136
+
137
+ it "should have some response objects on the exception that is raised" do
138
+ VCR.use_cassette('discovery_auth_wrong_creds') do
139
+ begin
140
+ client.basic_auth! 'api-user-1241', '1783'
141
+ rescue FamilySearch::Error::BadCredentials => bc
142
+ bc.response[:status].should == 401
143
+ bc.response[:headers].should be_kind_of(Hash)
144
+ bc.response[:body].should be_kind_of(Hash)
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ describe "get" do
151
+ def client()
152
+ unless @client
153
+ @client = FamilySearch::Client.new(:key => 'WCQY-7J1Q-GKVV-7DNM-SQ5M-9Q5H-JX3H-CMJK' )
154
+ @client.discover!
155
+ @client.basic_auth! 'api-user-1241', '1782'
156
+ end
157
+ @client
158
+ end
159
+
160
+ # The following specs were put in place to record the VCR cassette so that I could develop on the road...
161
+ it "should read the current user person" do
162
+ VCR.use_cassette('current_user_person_read') do
163
+ person = client.get client.discovery['links']['current-user-person']['href']
164
+ end
165
+ end
166
+
167
+ it "should read a person by ID" do
168
+ VCR.use_cassette('person_by_id') do
169
+ person = client.get 'https://sandbox.familysearch.org/platform/tree/persons/KWQX-52J'
170
+ end
171
+ end
172
+
173
+ it "gets the persons-with-relationships resource" do
174
+ VCR.use_cassette('person_with_relationship') do
175
+ person = client.get 'https://sandbox.familysearch.org/platform/tree/persons-with-relationships?person=KWQX-52J'
176
+ end
177
+ end
178
+ end
179
+
180
+ describe "template" do
181
+ def client()
182
+ unless @client
183
+ @client = FamilySearch::Client.new(:key => 'WCQY-7J1Q-GKVV-7DNM-SQ5M-9Q5H-JX3H-CMJK' )
184
+ @client.discover!
185
+ @client.basic_auth! 'api-user-1241', '1782'
186
+ end
187
+ @client
188
+ end
189
+
190
+ it "should take a key as a string and return a FamilySearch::URLTemplate object" do
191
+ VCR.use_cassette('person_by_id') do
192
+ client.template('person-template').should be_instance_of(FamilySearch::URLTemplate)
193
+ end
194
+ end
195
+
196
+ it "should raise an error if there is no template found for the key" do
197
+ VCR.use_cassette('person_by_id') do
198
+ expect {client.template('yodawg-template')}.to raise_error(FamilySearch::Error::URLTemplateNotFound)
199
+ end
200
+ end
201
+
202
+ it "should allow you to take -template off of the key attribute" do
203
+ VCR.use_cassette('person_by_id') do
204
+ person_template = client.template('person')
205
+ person_template.should be_instance_of(FamilySearch::URLTemplate)
206
+ person_template.title.should == "Person"
207
+ end
208
+ end
209
+
210
+ it "should allow you to take -query off of the key attribute" do
211
+ VCR.use_cassette('person_by_id') do
212
+ person_template = client.template('ancestry')
213
+ person_template.should be_instance_of(FamilySearch::URLTemplate)
214
+ person_template.title.should == "Ancestry"
215
+ end
216
+ end
217
+
218
+ it "should allow you to use a symbol as the key attribute" do
219
+ VCR.use_cassette('person_by_id') do
220
+ person_template = client.template(:ancestry)
221
+ person_template.should be_instance_of(FamilySearch::URLTemplate)
222
+ person_template.title.should == "Ancestry"
223
+ end
224
+ end
225
+
226
+ it "should allow you to make a call to a template and get a result" do
227
+ VCR.use_cassette('person_by_id') do
228
+ result = client.template('person').get 'pid' => 'KWQX-52J'
229
+ result.body.should be_kind_of(Hash)
230
+ end
231
+ end
131
232
  end
132
233
  end
@@ -0,0 +1,503 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://sandbox.familysearch.org/.well-known/app-meta
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/x-fs-v1+json
12
+ User-Agent:
13
+ - Faraday v0.8.7
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - Apache-Coyote/1.1
23
+ Content-Location:
24
+ - /.well-known/app-meta
25
+ Cache-Control:
26
+ - no-transform, max-age=604800
27
+ X-Processing-Time:
28
+ - '167'
29
+ Content-Type:
30
+ - application/x-fs-v1+json
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Date:
34
+ - Tue, 26 Mar 2013 15:16:59 GMT
35
+ Connection:
36
+ - close
37
+ body:
38
+ encoding: US-ASCII
39
+ string: ! "{\n \"links\" : {\n \"person-change-summary-template\" : {\n
40
+ \ \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/change-summary{?access_token}\",\n
41
+ \ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
42
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
43
+ \"Person Change Summary\"\n },\n \"person-notes-template\" : {\n \"template\"
44
+ : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/notes{?access_token}\",\n
45
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
46
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
47
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Notes\"\n },\n \"couple-relationship-note-template\"
48
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/notes/{nid}{?access_token}\",\n
49
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
50
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
51
+ \ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Note\"\n },\n
52
+ \ \"person-restore-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/restore{?access_token}\",\n
53
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
54
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
55
+ \ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"couple-relationship-source-reference-template\"
56
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/source-references/{srid}{?access_token}\",\n
57
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
58
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
59
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Source Reference\"\n },\n
60
+ \ \"source-description-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/descriptions/{sdid}{?access_token}\",\n
61
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
62
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
63
+ \ \"allow\" : \"HEAD,GET,POST,DELETE\",\n \"title\" : \"Source Description\"\n
64
+ \ },\n \"child-and-parents-relationship-template\" : {\n \"template\"
65
+ : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}{?access_token}\",\n
66
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
67
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
68
+ \ \"allow\" : \"HEAD,GET,POST,DELETE\",\n \"title\" : \"Child-and-Parents
69
+ Relationship\"\n },\n \"discussions\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/discussions/discussions\",\n
70
+ \ \"title\" : \"Discussions\"\n },\n \"child-and-parents-relationship-conclusion-template\"
71
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/{role}/conclusions/{cid}{?access_token}\",\n
72
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
73
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
74
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"FamilySearch Conclusion\"\n
75
+ \ },\n \"couple-relationship-conclusion-template\" : {\n \"template\"
76
+ : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/conclusions/{cid}{?access_token}\",\n
77
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
78
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
79
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Conclusion\"\n },\n
80
+ \ \"spouse-relationships-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/spouse-relationships{?access_token}\",\n
81
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
82
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
83
+ \ \"allow\" : \"GET\",\n \"title\" : \"Person Relationships\"\n },\n
84
+ \ \"person-discussion-references-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/discussion-references{?access_token}\",\n
85
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
86
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
87
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Discussion References\"\n
88
+ \ },\n \"ancestry-query\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/ancestry{?access_token,person,spouse}\",\n
89
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
90
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
91
+ \"Ancestry\"\n },\n \"current-user\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/users/current\",\n
92
+ \ \"title\" : \"Current User\"\n },\n \"discussion-template\" :
93
+ {\n \"template\" : \"https://sandbox.familysearch.org/platform/discussions/discussions/{did}{?access_token}\",\n
94
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
95
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
96
+ \ \"allow\" : \"HEAD,GET,POST,DELETE\",\n \"title\" : \"Discussion\"\n
97
+ \ },\n \"discussion-comments-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/discussions/discussions/{did}/comments{?access_token}\",\n
98
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
99
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
100
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Comments\"\n },\n
101
+ \ \"person-source-reference-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/source-references/{srid}{?access_token}\",\n
102
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
103
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
104
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Source Reference\"\n },\n
105
+ \ \"couple-relationship-source-references-template\" : {\n \"template\"
106
+ : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/source-references{?access_token}\",\n
107
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
108
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
109
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Source References\"\n
110
+ \ },\n \"child-and-parents-relationship-source-references-template\"
111
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/source-references{?access_token}\",\n
112
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
113
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
114
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Child-and-Parents Source
115
+ References\"\n },\n \"person-matches-template\" : {\n \"template\"
116
+ : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/matches{?access_token}\",\n
117
+ \ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
118
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
119
+ \"Person Matches\"\n },\n \"parent-relationships-template\" : {\n \"template\"
120
+ : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/parent-relationships{?access_token}\",\n
121
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
122
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
123
+ \"Person Relationships\"\n },\n \"person-matches-query\" : {\n \"template\"
124
+ : \"https://sandbox.familysearch.org/platform/tree/matches{?access_token,count,q}\",\n
125
+ \ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
126
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
127
+ \"Person Matches Query\"\n },\n \"child-and-parents-relationships\"
128
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships\",\n
129
+ \ \"title\" : \"Child-and-Parents Relationships\"\n },\n \"person-template\"
130
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}{?access_token}\",\n
131
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
132
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
133
+ \ \"allow\" : \"HEAD,GET,POST,DELETE,GET,POST\",\n \"title\" : \"Person\"\n
134
+ \ },\n \"source-folder-descriptions-template\" : {\n \"template\"
135
+ : \"https://sandbox.familysearch.org/platform/sources/folders/{sfid}/descriptions{?access_token,count,start}\",\n
136
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
137
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
138
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Source Descriptions in
139
+ a Folder\"\n },\n \"authorities\" : {\n \"href\" : \"https://sandbox.familysearch.org/authorities\"\n
140
+ \ },\n \"reservation\" : {\n \"href\" : \"https://sandbox.familysearch.org/reservation\"\n
141
+ \ },\n \"person-changes-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/changes{?access_token}\",\n
142
+ \ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
143
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
144
+ \"Change History\"\n },\n \"fs-identity-v2-login\" : {\n \"href\"
145
+ : \"https://sandbox.familysearch.org/identity/v2/login\"\n },\n \"preferred-spouse-relationship-template\"
146
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/users/{uid}/preferred-spouse-relationships/{pid}{?access_token}\",\n
147
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
148
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
149
+ \ \"allow\" : \"HEAD,GET,DELETE,PUT\",\n \"title\" : \"Preferred
150
+ Relationship\"\n },\n \"descendancy-query\" : {\n \"template\"
151
+ : \"https://sandbox.familysearch.org/platform/tree/descendancy{?access_token,person,spouse}\",\n
152
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
153
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
154
+ \"Descendancy\"\n },\n \"couple-relationship-notes-template\" : {\n
155
+ \ \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/notes{?access_token}\",\n
156
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
157
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
158
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Notes\"\n },\n \"folders\"
159
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/sources/folders\",\n
160
+ \ \"title\" : \"Source Folders\"\n },\n \"source-folder-descriptions-trashbin-template\"
161
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/folders/{sfid}/descriptions/trashbin{?access_token}\",\n
162
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
163
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
164
+ \ \"allow\" : \"POST\",\n \"title\" : \"Trashbin for Source Descriptions
165
+ in a Folder\"\n },\n \"child-and-parents-relationship-restore-template\"
166
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/restore{?access_token}\",\n
167
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
168
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
169
+ \ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"fs-parent-relationships-template\"
170
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/fs-parent-relationships{?access_token}\",\n
171
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
172
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
173
+ \"FamilySearch Person Relationships\"\n },\n \"http://oauth.net/core/2.0/endpoint/token\"
174
+ : {\n \"href\" : \"https://sandbox.familysearch.org/cis-web/oauth2/v3/token\"\n
175
+ \ },\n \"http://oauth.net/core/2.0/endpoint/authorize\" : {\n \"href\"
176
+ : \"https://sandbox.familysearch.org/cis-web/oauth2/v3/authorization\"\n },\n
177
+ \ \"person-merge-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/merges/{dpid}{?access_token,filter}\",\n
178
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
179
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
180
+ \ \"allow\" : \"OPTIONS,GET,POST\",\n \"title\" : \"Person Merge\"\n
181
+ \ },\n \"person-source-references-template\" : {\n \"template\"
182
+ : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/source-references{?access_token}\",\n
183
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
184
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
185
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Source References\"\n
186
+ \ },\n \"user-source-folders-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/{uid}/folders{?access_token}\",\n
187
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
188
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
189
+ \ \"allow\" : \"GET\",\n \"title\" : \"User Source Folders\"\n },\n
190
+ \ \"discussion-comment-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/discussions/discussions/{did}/comments/{cmid}{?access_token}\",\n
191
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
192
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
193
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Comment\"\n },\n \"person-with-relationships-query\"
194
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons-with-relationships{?access_token,person}\",\n
195
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
196
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
197
+ \"Person With Relationships\"\n },\n \"child-and-parents-relationship-note-template\"
198
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/notes/{nid}{?access_token}\",\n
199
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
200
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
201
+ \ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Note\"\n },\n
202
+ \ \"change-restore-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/changes/{chid}/restore{?access_token}\",\n
203
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
204
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
205
+ \ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"preferred-parent-relationship-template\"
206
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/users/{uid}/preferred-parent-relationships/{pid}{?access_token}\",\n
207
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
208
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
209
+ \ \"allow\" : \"HEAD,GET,DELETE,PUT\",\n \"title\" : \"Preferred
210
+ Relationship\"\n },\n \"person-note-template\" : {\n \"template\"
211
+ : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/notes/{nid}{?access_token}\",\n
212
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
213
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
214
+ \ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Note\"\n },\n
215
+ \ \"child-and-parents-relationship-changes-template\" : {\n \"template\"
216
+ : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/changes{?access_token}\",\n
217
+ \ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
218
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
219
+ \"Change History\"\n },\n \"child-and-parents-relationship-notes-template\"
220
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/notes{?access_token}\",\n
221
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
222
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
223
+ \ \"allow\" : \"GET,POST\",\n \"title\" : \"Child-and-Parents Notes\"\n
224
+ \ },\n \"registration\" : {\n \"href\" : \"https://sandbox.familysearch.org/cis-web/pages/registration/registration.html\"\n
225
+ \ },\n \"persons\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons\",\n
226
+ \ \"title\" : \"Persons\"\n },\n \"person-search\" : {\n \"template\"
227
+ : \"https://sandbox.familysearch.org/platform/tree/search{?access_token,context,count,q,start}\",\n
228
+ \ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
229
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
230
+ \"Person Search\"\n },\n \"fs-identity-v2-permission\" : {\n \"href\"
231
+ : \"https://sandbox.familysearch.org/identity/v2/permission\"\n },\n \"couple-relationship-restore-template\"
232
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/restore{?access_token}\",\n
233
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
234
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
235
+ \ \"allow\" : \"POST\",\n \"title\" : \"Restore\"\n },\n \"source-folder-template\"
236
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/sources/folders/{sfid}{?access_token}\",\n
237
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
238
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
239
+ \ \"allow\" : \"GET,POST,DELETE\",\n \"title\" : \"Source Box Folder\"\n
240
+ \ },\n \"child-relationships-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/child-relationships{?access_token}\",\n
241
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
242
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
243
+ \"Person Relationships\"\n },\n \"couple-relationship-changes-template\"
244
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}/changes{?access_token}\",\n
245
+ \ \"type\" : \"application/atom+xml,application/json,application/x-gedcomx-atom+json,application/xml,text/html\",\n
246
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
247
+ \"Change History\"\n },\n \"agent-template\" : {\n \"template\"
248
+ : \"https://sandbox.familysearch.org/platform/users/agents/{uid}{?access_token}\",\n
249
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
250
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
251
+ \"Agent\"\n },\n \"child-and-parents-relationship-parent-template\"
252
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/{role}{?access_token}\",\n
253
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
254
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
255
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Parent Relationship Role\"\n
256
+ \ },\n \"fs-identity-v2-logout\" : {\n \"href\" : \"https://sandbox.familysearch.org/identity/v2/logout\"\n
257
+ \ },\n \"fs-child-relationships-template\" : {\n \"template\" :
258
+ \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/fs-child-relationships{?access_token}\",\n
259
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
260
+ \ \"accept\" : \"*/*\",\n \"allow\" : \"GET\",\n \"title\" :
261
+ \"FamilySearch Person Relationships\"\n },\n \"parent-child-relationship-template\"
262
+ : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/parent-child-relationships/{caprid}{?access_token}\",\n
263
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
264
+ \ \"accept\" : \"application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
265
+ \ \"allow\" : \"HEAD,GET,POST,DELETE,GET,POST\",\n \"title\" : \"Relationship\"\n
266
+ \ },\n \"person-discussion-reference-template\" : {\n \"template\"
267
+ : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/discussion-references/{drid}{?access_token}\",\n
268
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
269
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
270
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Discussion Reference\"\n
271
+ \ },\n \"person-conclusion-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/persons/{pid}/conclusions/{cid}{?access_token}\",\n
272
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
273
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
274
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Conclusion\"\n },\n
275
+ \ \"child-and-parents-relationship-source-reference-template\" : {\n \"template\"
276
+ : \"https://sandbox.familysearch.org/platform/tree/child-and-parents-relationships/{caprid}/source-references/{srid}{?access_token}\",\n
277
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/xml,text/html\",\n
278
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml\",\n
279
+ \ \"allow\" : \"DELETE\",\n \"title\" : \"Child-and-Parents Source
280
+ Reference\"\n },\n \"couple-relationships\" : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships\",\n
281
+ \ \"title\" : \"Relationships\"\n },\n \"source-descriptions\" :
282
+ {\n \"href\" : \"https://sandbox.familysearch.org/platform/sources/descriptions\",\n
283
+ \ \"title\" : \"Source Descriptions\"\n },\n \"current-user-person\"
284
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/current-person\",\n
285
+ \ \"title\" : \"Current User Person\"\n },\n \"fs-identity-v2-session\"
286
+ : {\n \"href\" : \"https://sandbox.familysearch.org/identity/v2/session\"\n
287
+ \ },\n \"couple-relationship-template\" : {\n \"template\" : \"https://sandbox.familysearch.org/platform/tree/couple-relationships/{crid}{?access_token}\",\n
288
+ \ \"type\" : \"application/json,application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml,application/xml,text/html\",\n
289
+ \ \"accept\" : \"application/x-fs-v1+json,application/x-fs-v1+xml,application/x-gedcomx-v1+json,application/x-gedcomx-v1+xml\",\n
290
+ \ \"allow\" : \"HEAD,GET,POST,DELETE,GET,POST\",\n \"title\" : \"Relationship\"\n
291
+ \ }\n }\n}"
292
+ http_version:
293
+ recorded_at: Tue, 26 Mar 2013 15:16:59 GMT
294
+ - request:
295
+ method: get
296
+ uri: https://api-user-1241:1782@sandbox.familysearch.org/identity/v2/login?dataFormat=application/json&key=WCQY-7J1Q-GKVV-7DNM-SQ5M-9Q5H-JX3H-CMJK
297
+ body:
298
+ encoding: US-ASCII
299
+ string: ''
300
+ headers:
301
+ Accept:
302
+ - application/x-fs-v1+json
303
+ User-Agent:
304
+ - Faraday v0.8.7
305
+ Accept-Encoding:
306
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
307
+ response:
308
+ status:
309
+ code: 200
310
+ message: !binary |-
311
+ T0s=
312
+ headers:
313
+ !binary "U2VydmVy":
314
+ - !binary |-
315
+ QXBhY2hlLUNveW90ZS8xLjE=
316
+ !binary "QXBwLVN2ci1JZA==":
317
+ - !binary |-
318
+ MTAwLi0yOQ==
319
+ !binary "UHJhZ21h":
320
+ - !binary |-
321
+ bm8tY2FjaGU=
322
+ !binary "RXhwaXJlcw==":
323
+ - !binary |-
324
+ VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ=
325
+ !binary "Q2FjaGUtQ29udHJvbA==":
326
+ - !binary |-
327
+ bm8tY2FjaGU=
328
+ - !binary |-
329
+ bm8tc3RvcmU=
330
+ !binary "U2V0LUNvb2tpZQ==":
331
+ - !binary |-
332
+ ZnNzZXNzaW9uaWQ9VVNZU0MxMzIwQ0JCOTdFOTY4OTZFMTUzRTU2MzFGQkNF
333
+ MEM3X25iY2ktMDQ1LTAzNC5kLnVzeXMuZnNnbG9iYWwubmV0OyBQYXRoPS8=
334
+ !binary "WC1Qcm9jZXNzaW5nLVRpbWU=":
335
+ - !binary |-
336
+ MjExNQ==
337
+ !binary "Q29udGVudC1FbmNvZGluZw==":
338
+ - !binary |-
339
+ Z3ppcA==
340
+ !binary "Q29udGVudC1UeXBl":
341
+ - !binary |-
342
+ YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04
343
+ !binary "Q29udGVudC1MYW5ndWFnZQ==":
344
+ - !binary |-
345
+ ZW4tVVM=
346
+ !binary "Q29udGVudC1MZW5ndGg=":
347
+ - !binary |-
348
+ MTkw
349
+ !binary "RGF0ZQ==":
350
+ - !binary |-
351
+ VHVlLCAyNiBNYXIgMjAxMyAxNToxNzowMyBHTVQ=
352
+ !binary "Q29ubmVjdGlvbg==":
353
+ - !binary |-
354
+ Y2xvc2U=
355
+ body:
356
+ encoding: ASCII-8BIT
357
+ string: !binary |-
358
+ H4sIAAAAAAAAADWNywrCMBBF/yVrGyZJH9ZlQ92IuBAXriTasQZKWjqJUIr/
359
+ bnwUZnMP98ydGXnjA+m+QbaRAKs/2CORaSNjhx1bINu40HUr1uAw4s14bBby
360
+ xJFs72Jd8oJLEOpzHBTIaJvgH+i8jcq39HMoTnzjzGx8xE7H81ELJUFXVVnU
361
+ Zb4u81pkqs5yJbaVrkEXF3e92QTSLAGV8oYHmojfqe36q+m4Qx/X/DTgb+P1
362
+ egNUEvgU4AAAAA==
363
+ http_version:
364
+ recorded_at: Tue, 26 Mar 2013 15:17:01 GMT
365
+ - request:
366
+ method: get
367
+ uri: https://sandbox.familysearch.org/platform/tree/current-person
368
+ body:
369
+ encoding: US-ASCII
370
+ string: ''
371
+ headers:
372
+ Accept:
373
+ - application/x-fs-v1+json
374
+ User-Agent:
375
+ - Faraday v0.8.7
376
+ Authorization:
377
+ - Bearer USYSC1320CBB97E96896E153E5631FBCE0C7_nbci-045-034.d.usys.fsglobal.net
378
+ Accept-Encoding:
379
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
380
+ response:
381
+ status:
382
+ code: 303
383
+ message: See Other
384
+ headers:
385
+ Server:
386
+ - Apache-Coyote/1.1
387
+ Location:
388
+ - https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99
389
+ Cache-Control:
390
+ - no-cache, no-store, no-transform, must-revalidate, max-age=0
391
+ X-Processing-Time:
392
+ - '57'
393
+ Content-Type:
394
+ - application/x-fs-v1+json
395
+ Content-Length:
396
+ - '0'
397
+ Date:
398
+ - Tue, 26 Mar 2013 15:17:03 GMT
399
+ Connection:
400
+ - close
401
+ body:
402
+ encoding: US-ASCII
403
+ string: ''
404
+ http_version:
405
+ recorded_at: Tue, 26 Mar 2013 15:17:02 GMT
406
+ - request:
407
+ method: get
408
+ uri: https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99
409
+ body:
410
+ encoding: US-ASCII
411
+ string: ''
412
+ headers:
413
+ Accept:
414
+ - application/x-fs-v1+json
415
+ User-Agent:
416
+ - Faraday v0.8.7
417
+ Authorization:
418
+ - Bearer USYSC1320CBB97E96896E153E5631FBCE0C7_nbci-045-034.d.usys.fsglobal.net
419
+ Accept-Encoding:
420
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
421
+ response:
422
+ status:
423
+ code: 200
424
+ message: OK
425
+ headers:
426
+ Server:
427
+ - Apache-Coyote/1.1
428
+ Last-Modified:
429
+ - Thu, 05 Jul 2012 14:53:55 GMT
430
+ Etag:
431
+ - W/"880e71cc487ea5c0b06dd149ec388779b98d2297"
432
+ Content-Location:
433
+ - /platform/tree/persons/KW3B-N99
434
+ Cache-Control:
435
+ - no-transform, max-age=3600
436
+ X-Processing-Time:
437
+ - '45'
438
+ Content-Type:
439
+ - application/x-fs-v1+json
440
+ Transfer-Encoding:
441
+ - chunked
442
+ Date:
443
+ - Tue, 26 Mar 2013 15:17:04 GMT
444
+ Connection:
445
+ - close
446
+ body:
447
+ encoding: US-ASCII
448
+ string: ! "{\n \"persons\" : [ {\n \"links\" : {\n \"ancestry\" : {\n
449
+ \ \"href\" : \"https://sandbox.familysearch.org/platform/tree/ancestry?person=KW3B-N99\",\n
450
+ \ \"title\" : \"Ancestry\"\n },\n \"fs-child-relationships\"
451
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/fs-child-relationships\",\n
452
+ \ \"title\" : \"FamilySearch Person Relationships\"\n },\n \"person\"
453
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99\",\n
454
+ \ \"title\" : \"Person\"\n },\n \"descendancy\" : {\n \"href\"
455
+ : \"https://sandbox.familysearch.org/platform/tree/descendancy?person=KW3B-N99\",\n
456
+ \ \"title\" : \"Descendancy\"\n },\n \"discussion-references\"
457
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/discussion-references\",\n
458
+ \ \"title\" : \"Discussion References\"\n },\n \"person-with-relationships\"
459
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons-with-relationships?person=KW3B-N99\",\n
460
+ \ \"title\" : \"Person With Relationships\"\n },\n \"change-history\"
461
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/changes\",\n
462
+ \ \"title\" : \"Change History\"\n },\n \"fs-parent-relationships\"
463
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/fs-parent-relationships\",\n
464
+ \ \"title\" : \"FamilySearch Person Relationships\"\n },\n \"spouse-relationships\"
465
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/spouse-relationships\",\n
466
+ \ \"title\" : \"Person Relationships\"\n },\n \"child-relationships\"
467
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/child-relationships\",\n
468
+ \ \"title\" : \"Person Relationships\"\n },\n \"parent-relationships\"
469
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/parent-relationships\",\n
470
+ \ \"title\" : \"Person Relationships\"\n },\n \"source-references\"
471
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/source-references\",\n
472
+ \ \"title\" : \"Source References\"\n },\n \"notes\" : {\n
473
+ \ \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/notes\",\n
474
+ \ \"title\" : \"Notes\"\n },\n \"person-matches\" : {\n \"href\"
475
+ : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/matches\",\n
476
+ \ \"title\" : \"Person Matches\"\n }\n },\n \"id\" : \"KW3B-N99\",\n
477
+ \ \"living\" : true,\n \"gender\" : {\n \"links\" : {\n \"conclusion\"
478
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/conclusions/C.1\",\n
479
+ \ \"title\" : \"Conclusion\"\n }\n },\n \"id\" :
480
+ \"C.1\",\n \"type\" : \"http://gedcomx.org/Male\"\n },\n \"names\"
481
+ : [ {\n \"links\" : {\n \"conclusion\" : {\n \"href\"
482
+ : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/conclusions/C.2\",\n
483
+ \ \"title\" : \"Conclusion\"\n }\n },\n \"id\" :
484
+ \"C.2\",\n \"type\" : \"http://gedcomx.org/BirthName\",\n \"nameForms\"
485
+ : [ {\n \"lang\" : \"i-default\",\n \"fullText\" : \"API User
486
+ 1241\",\n \"parts\" : [ {\n \"type\" : \"http://gedcomx.org/Given\",\n
487
+ \ \"value\" : \"API User\"\n }, {\n \"type\" : \"http://gedcomx.org/Surname\",\n
488
+ \ \"value\" : \"1241\"\n } ]\n } ],\n \"preferred\"
489
+ : true\n } ],\n \"facts\" : [ {\n \"links\" : {\n \"conclusion\"
490
+ : {\n \"href\" : \"https://sandbox.familysearch.org/platform/tree/persons/KW3B-N99/conclusions/C.3\",\n
491
+ \ \"title\" : \"Conclusion\"\n }\n },\n \"id\" :
492
+ \"C.3\",\n \"type\" : \"http://gedcomx.org/Birth\",\n \"date\" :
493
+ {\n \"original\" : \"01 Apr 1950\",\n \"formal\" : \"+1950-04-01\",\n
494
+ \ \"normalized\" : [ {\n \"value\" : \"1 April 1950\"\n }
495
+ ]\n },\n \"place\" : {\n \"original\" : \"Utah\",\n \"description\"
496
+ : \"#-1013587259\"\n }\n } ],\n \"display\" : {\n \"name\"
497
+ : \"API User 1241\",\n \"gender\" : \"Male\",\n \"lifespan\" : \"1950
498
+ - \",\n \"birthDate\" : \"1 April 1950\",\n \"birthPlace\" : \"Utah\"\n
499
+ \ }\n } ],\n \"places\" : [ {\n \"id\" : \"-1013587259\",\n \"names\"
500
+ : [ {\n \"value\" : \"Utah, United States\"\n } ]\n } ]\n}"
501
+ http_version:
502
+ recorded_at: Tue, 26 Mar 2013 15:17:02 GMT
503
+ recorded_with: VCR 2.4.0