geni 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/README.md +8 -3
- data/Rakefile +9 -0
- data/geni.gemspec +7 -15
- data/lib/geni.rb +8 -2
- data/lib/geni/base.rb +30 -3
- data/lib/geni/client.rb +41 -19
- data/lib/geni/document.rb +9 -0
- data/lib/geni/photo.rb +10 -0
- data/lib/geni/profile.rb +68 -37
- data/lib/geni/profile/immediate_family.rb +51 -0
- data/lib/geni/project.rb +19 -0
- data/lib/geni/taggable.rb +27 -0
- data/lib/geni/union.rb +15 -0
- data/lib/geni/video.rb +9 -0
- data/spec/geni/client_spec.rb +79 -0
- data/spec/geni/document_spec.rb +53 -0
- data/spec/geni/immediate_family_spec.rb +45 -0
- data/spec/geni/photo_spec.rb +67 -0
- data/spec/geni/profile_spec.rb +73 -0
- data/spec/geni/project_spec.rb +44 -0
- data/spec/geni/union_spec.rb +44 -0
- data/spec/geni/video_spec.rb +56 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/support/mocked_responses/06668c1bc97e251b3c2965712e3b990e.json +1 -0
- data/spec/support/mocked_responses/09df004f19d20d8d685db52796b552bf.json +1 -0
- data/spec/support/mocked_responses/12536c37e1bcef230f105a0fa930eae9.json +1 -0
- data/spec/support/mocked_responses/155ed9f9c6912c19cd4d6be2ad4b9163.json +1 -0
- data/spec/support/mocked_responses/1b640e767a27039b60daab80aa3e38da.json +1 -0
- data/spec/support/mocked_responses/44795c1cebac8aee4c72ab4cde5b7c34.json +1 -0
- data/spec/support/mocked_responses/4e55df6914e067b371e7ea54ac372591.json +1 -0
- data/spec/support/mocked_responses/55c9a8f9e64187f2e7389b7cecec4bd0.json +1 -0
- data/spec/support/mocked_responses/5643d7ffaa0b17a4340b57446228f455.json +1 -0
- data/spec/support/mocked_responses/6df2af74f5544a90b96921edc9aa346d.json +1 -0
- data/spec/support/mocked_responses/7215a02ec26d1c9df055275958824c7b.json +1 -0
- data/spec/support/mocked_responses/7c4840e03bece51bb7154893682ec2a6.json +1 -0
- data/spec/support/mocked_responses/9ae308e89eb74fc5aea5164c8affa422.json +1 -0
- data/spec/support/mocked_responses/9e1dcf9ed89704ecac0e1734f9ac9e6e.json +1 -0
- data/spec/support/mocked_responses/a060207b22ab180a065704b8dd031511.json +1 -0
- data/spec/support/mocked_responses/a4a8ee1c8c387c8cad34c7c62f2d1d27.json +1 -0
- data/spec/support/mocked_responses/a5a1df59373b2159fbd3b906b9494f6f.json +1 -0
- data/spec/support/mocked_responses/b28e773e9568bf5e2ac10e425241bf51.json +1 -0
- data/spec/support/mocked_responses/b4856ae6ff428888301f716b52ea161b.json +1 -0
- data/spec/support/mocked_responses/b73322abb23cf869241bda85b20080f5.json +1 -0
- data/spec/support/mocked_responses/c21daf2c09c09b947b5b8de0a69278d9.json +1 -0
- data/spec/support/mocked_responses/c234b7016ed809af64cfaf699a509512.json +1 -0
- data/spec/support/mocked_responses/d2e9479730282f7493eaf6513497d454.json +1 -0
- data/spec/support/mocked_responses/d5b2f2087b8831ce4df5e7e9f5a1085a.json +1 -0
- data/spec/support/mocked_responses/dee607809468ee9a94e56eeae28ecc34.json +1 -0
- data/spec/support/mocked_responses/deea226a6d94d6165febb07a56ba4261.json +1 -0
- data/spec/support/mocked_responses/f4f38a4038abc4227a1b4b18fd12b978.json +1 -0
- metadata +83 -8
- data/lib/geni/family.rb +0 -39
data/lib/geni/union.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Geni
|
2
|
+
class Union < Base
|
3
|
+
has_fetchable_attributes %w[
|
4
|
+
status marriage_location marriage_date marriage_date_parts url
|
5
|
+
]
|
6
|
+
|
7
|
+
def partners
|
8
|
+
@partner_profiles ||= client.get_profiles(@partners.collect { |uri| uri.split('-').last })
|
9
|
+
end
|
10
|
+
|
11
|
+
def children
|
12
|
+
@children_profiles ||= client.get_profiles(@children.collect { |uri| uri.split('-').last })
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/geni/video.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Client do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
end
|
7
|
+
|
8
|
+
it "has an authorize URL" do
|
9
|
+
#puts @client.authorize_url
|
10
|
+
pending
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has an OAuth2 access token" do
|
14
|
+
@client.access_token.class.should == OAuth2::AccessToken
|
15
|
+
pending
|
16
|
+
end
|
17
|
+
|
18
|
+
it "has an OAuth2 callback URL" do
|
19
|
+
pending
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can get current user's profile" do
|
23
|
+
profile = @client.me
|
24
|
+
profile.class.should == Geni::Profile
|
25
|
+
profile.id.should == 'profile-90990667'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "can get a single profile" do
|
29
|
+
profile = @client.get_profile('profile-90990667')
|
30
|
+
profile.class.should == Geni::Profile
|
31
|
+
profile.id.should == 'profile-90990667'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "can get multiple profiles" do
|
35
|
+
profiles = @client.get_profiles(['profile-90990667', 'profile-90990668'])
|
36
|
+
profiles.class.should == Array
|
37
|
+
profiles.should have(2).items
|
38
|
+
profiles.collect(&:id).should include('profile-90990667')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "can get a union" do
|
42
|
+
union = @client.get_union('union-12276689')
|
43
|
+
union.class.should == Geni::Union
|
44
|
+
union.id.should == 'union-12276689'
|
45
|
+
end
|
46
|
+
|
47
|
+
it "can get a photo" do
|
48
|
+
photo = @client.get_photo('photo-21557506')
|
49
|
+
photo.class.should == Geni::Photo
|
50
|
+
photo.id.should == 'photo-21557506'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "can get a project" do
|
54
|
+
project = @client.get_project('project-6')
|
55
|
+
project.class.should == Geni::Project
|
56
|
+
project.id.should == 'project-6'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "can get a document" do
|
60
|
+
document = @client.get_document('document-339953')
|
61
|
+
document.class.should == Geni::Document
|
62
|
+
document.id.should == 'document-339953'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "can get a video" do
|
66
|
+
video = @client.get_video('video-1')
|
67
|
+
video.class.should == Geni::Video
|
68
|
+
video.id.should == 'video-1'
|
69
|
+
end
|
70
|
+
|
71
|
+
it "can get entities via a basic hash-style syntax" do
|
72
|
+
@client['profile-90990667'].class.should == Geni::Profile
|
73
|
+
@client['union-12276689'].class.should == Geni::Union
|
74
|
+
@client['photo-21557506'].class.should == Geni::Photo
|
75
|
+
@client['project-6'].class.should == Geni::Project
|
76
|
+
@client['document-339953'].class.should == Geni::Document
|
77
|
+
@client['video-1'].class.should == Geni::Video
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Document do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
@document = Geni::Document.new(:id => 'document-339953', :client => @client)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "has a title" do
|
10
|
+
@document.title.should == 'Jaworow AGAD Births 1877-96'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has a url" do
|
14
|
+
@document.url.should == 'https://www.geni.com/api/document-339953'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has a date" do
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has date_parts" do
|
22
|
+
@document.date_parts.should == {}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "has a content_type" do
|
26
|
+
@document.content_type.should == 'image/png'
|
27
|
+
end
|
28
|
+
|
29
|
+
it "has a description" do
|
30
|
+
@document.description.should == "Jewish Records Indexing - Poland\nhttp://www.jewishgen.org/jri-pl/index.htm"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "has sizes" do
|
34
|
+
@document.sizes.class.should == Hash
|
35
|
+
@document.sizes.keys.should include('thumb')
|
36
|
+
@document.sizes.keys.should include('original')
|
37
|
+
@document.sizes.keys.should include('large')
|
38
|
+
end
|
39
|
+
|
40
|
+
it "has tags" do
|
41
|
+
tags = @document.tags
|
42
|
+
end
|
43
|
+
|
44
|
+
it "can be tagged" do
|
45
|
+
# FIXME
|
46
|
+
pending
|
47
|
+
end
|
48
|
+
|
49
|
+
it "can be untagged" do
|
50
|
+
# FIXME
|
51
|
+
pending
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Profile::ImmediateFamily do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
@family = @client.get_profile('profile-90990739').immediate_family
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'has a focus node' do
|
10
|
+
@family.focus.class.should == Hash
|
11
|
+
@family.focus['id'].should == 'profile-90990739'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'has parents' do
|
15
|
+
@family.parents.should have(2).items
|
16
|
+
@family.parents[0].name.should == 'Simon Moiny'
|
17
|
+
@family.parents[1].name.should == 'Arlette PAIX'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has partners' do
|
21
|
+
@family.partners.should have(1).items
|
22
|
+
@family.partners[0].name.should == 'Alain Malisart'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'has children' do
|
26
|
+
@family.children.should have(3).items
|
27
|
+
|
28
|
+
child_names = @family.children.collect(&:name)
|
29
|
+
|
30
|
+
child_names.should include('Aurélien Malisart')
|
31
|
+
child_names.should include('Timothy Malisart')
|
32
|
+
child_names.should include('Benjamin Malisart')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'has siblings' do
|
36
|
+
@family.siblings.should have(4).items
|
37
|
+
|
38
|
+
sibling_names = @family.siblings.collect(&:name)
|
39
|
+
|
40
|
+
sibling_names.should include('Fabienne Moiny')
|
41
|
+
sibling_names.should include('Bérengère MOINY')
|
42
|
+
sibling_names.should include('Luc Moiny')
|
43
|
+
sibling_names.should include('Armelle MOINY')
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Photo do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
@photo = Geni::Photo.new(:id => 'photo-22466661', :client => @client)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "has a title" do
|
10
|
+
# not given by Geni at all times
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has an URL" do
|
14
|
+
@photo.url.should == 'https://www.geni.com/api/photo-22466661'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has a creation date/time" do
|
18
|
+
@photo.created_on.should == '2011-01-23 00:01:18'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has a date" do
|
22
|
+
@photo.date.should == '4/17/2010'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "has date parts" do
|
26
|
+
@photo.date_parts.should == {
|
27
|
+
'day' => 17,
|
28
|
+
'month' => 4,
|
29
|
+
'year' => 2010
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
it "has a content type" do
|
34
|
+
@photo.content_type.should == 'image/jpeg'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "belongs to an album" do
|
38
|
+
@photo.album_id.should == '6000000009078813207'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "has sizes" do
|
42
|
+
@photo.sizes.class.should == Hash
|
43
|
+
@photo.sizes.keys.should include('thumb')
|
44
|
+
@photo.sizes.keys.should include('original')
|
45
|
+
@photo.sizes.keys.should include('large')
|
46
|
+
@photo.sizes.keys.should include('medium')
|
47
|
+
@photo.sizes.keys.should include('small')
|
48
|
+
@photo.sizes.keys.should include('thumb2')
|
49
|
+
end
|
50
|
+
|
51
|
+
it "has tags" do
|
52
|
+
tags = @photo.tags
|
53
|
+
tags.class.should == Array
|
54
|
+
tags.first.class.should == Geni::Profile
|
55
|
+
tags.first.id.should == 'profile-90990889'
|
56
|
+
end
|
57
|
+
|
58
|
+
it "can be tagged" do
|
59
|
+
# FIXME
|
60
|
+
pending
|
61
|
+
end
|
62
|
+
|
63
|
+
it "can be untagged" do
|
64
|
+
# FIXME
|
65
|
+
pending
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Profile do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
@profile = Geni::Profile.new(:id => 'profile-90990667', :client => @client)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "is not fetched by default" do
|
10
|
+
@profile.should_not be_fetched
|
11
|
+
end
|
12
|
+
|
13
|
+
it "is fetchable" do
|
14
|
+
@profile.fetch
|
15
|
+
@profile.should be_fetched
|
16
|
+
end
|
17
|
+
|
18
|
+
it "has a name" do
|
19
|
+
@profile.name.should == "Aurélien Malisart"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "has a birth date" do
|
23
|
+
@profile.birth_date.should == "6/30/1986"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "is alive" do
|
27
|
+
@profile.is_alive.should == true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "has an immediate family" do
|
31
|
+
family = @profile.immediate_family
|
32
|
+
family.class.should == Geni::Profile::ImmediateFamily
|
33
|
+
end
|
34
|
+
|
35
|
+
it "has managers" do
|
36
|
+
@profile.managers.class.should == Array
|
37
|
+
# NEEDS MORE STUFF
|
38
|
+
pending
|
39
|
+
end
|
40
|
+
|
41
|
+
it "has been merged into profiles" do
|
42
|
+
@profile.merged_into.class.should == Array
|
43
|
+
# NEEDS MORE STUFF
|
44
|
+
pending
|
45
|
+
end
|
46
|
+
|
47
|
+
it "has requested merges" do
|
48
|
+
@profile.requested_merges.class.should == Array
|
49
|
+
# NEEDS MORE STUFF
|
50
|
+
end
|
51
|
+
|
52
|
+
it "has a curator" do
|
53
|
+
@profile.instance_variable_set('@curator', 'https://www.geni.com/api/profile-90990667') # stub
|
54
|
+
curator = @profile.curator
|
55
|
+
curator.class.should == Geni::Profile
|
56
|
+
curator.id.should == 'profile-90990667'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "has photos" do
|
60
|
+
photos = @profile.photos
|
61
|
+
photos.class.should == Array
|
62
|
+
end
|
63
|
+
|
64
|
+
it "has videos" do
|
65
|
+
videos = @profile.videos
|
66
|
+
videos.class.should == Array
|
67
|
+
end
|
68
|
+
|
69
|
+
it "has documents" do
|
70
|
+
documents = @profile.documents
|
71
|
+
documents.class.should == Array
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Project do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
@project = Geni::Project.new(:id => 'project-6', :client => @client)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "has a name" do
|
10
|
+
@project.name.should == 'Magna Carta Sureties and Witnesses'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has a description" do
|
14
|
+
@project.description.should_not == ''
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has an URL" do
|
18
|
+
@project.url.should == 'https://www.geni.com/api/project-6'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has collaborators" do
|
22
|
+
collaborators = @project.collaborators
|
23
|
+
collaborators.class.should == Array
|
24
|
+
collaborators.collect(&:id).should include('profile-34069147')
|
25
|
+
collaborators.first.class.should == Geni::Profile
|
26
|
+
collaborators.first.should be_fetched
|
27
|
+
end
|
28
|
+
|
29
|
+
it "has profiles" do
|
30
|
+
profiles = @project.profiles
|
31
|
+
profiles.class.should == Array
|
32
|
+
profiles.collect(&:id).should include('profile-37184377')
|
33
|
+
profiles.first.class.should == Geni::Profile
|
34
|
+
profiles.first.should be_fetched
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has followers" do
|
38
|
+
followers = @project.followers
|
39
|
+
followers.class.should == Array
|
40
|
+
followers.collect(&:id).should include('profile-34069147')
|
41
|
+
followers.first.class.should == Geni::Profile
|
42
|
+
followers.first.should be_fetched
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Union do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
@union = Geni::Union.new(:id => 'union-12276689', :client => @client)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "has a status" do
|
10
|
+
@union.status.should == 'current'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has a marriage location" do
|
14
|
+
@union.marriage_location.should == 'Chicago, Illinois, United States'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has a marriage date" do
|
18
|
+
@union.marriage_date.should == '10/18/1992'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has marriage date parts" do
|
22
|
+
@union.marriage_date_parts.should == {
|
23
|
+
'day' => 18,
|
24
|
+
'month' => 10,
|
25
|
+
'year' => 1992
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
it "has an URL" do
|
30
|
+
@union.url.should == 'https://www.geni.com/api/union-12276689'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'has partners' do
|
34
|
+
partners = @union.partners
|
35
|
+
partners.class.should == Array
|
36
|
+
partners.first.class.should == Geni::Profile
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'has children' do
|
40
|
+
children = @union.children
|
41
|
+
children.class.should == Array
|
42
|
+
children.should be_empty
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geni::Video do
|
4
|
+
before :all do
|
5
|
+
@client = get_geni_client
|
6
|
+
@video = Geni::Video.new({
|
7
|
+
:id => 'video-99385',
|
8
|
+
:client => @client
|
9
|
+
})
|
10
|
+
end
|
11
|
+
|
12
|
+
it "has an URL" do
|
13
|
+
@video.url.should == 'https://www.geni.com/api/video-99385'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "has a title" do
|
17
|
+
@video.title.should == 'Aurelien playing the drums'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "has a creation date/time" do
|
21
|
+
@video.created_on.should == '2011-04-15 19:16:53'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "has a date" do
|
25
|
+
@video.date.should == '4/8/2009'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "has date parts" do
|
29
|
+
@video.date_parts.should == {
|
30
|
+
'year' => 2009,
|
31
|
+
'month' => 4,
|
32
|
+
'day' => 8
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
it "has sizes" do
|
37
|
+
@video.sizes.class.should == Hash
|
38
|
+
end
|
39
|
+
|
40
|
+
it "has tags" do
|
41
|
+
tags = @video.tags
|
42
|
+
tags.class.should == Array
|
43
|
+
tags.first.class.should == Geni::Profile
|
44
|
+
tags.first.id.should == 'profile-90990667'
|
45
|
+
end
|
46
|
+
|
47
|
+
it "can be tagged" do
|
48
|
+
# FIXME
|
49
|
+
pending
|
50
|
+
end
|
51
|
+
|
52
|
+
it "can be untagged" do
|
53
|
+
# FIXME
|
54
|
+
pending
|
55
|
+
end
|
56
|
+
end
|