google_contacts_api 0.4.2 → 0.5.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.
- data/VERSION +1 -1
- data/google_contacts_api.gemspec +3 -2
- data/lib/google_contacts_api/contacts.rb +1 -1
- data/lib/google_contacts_api/group.rb +3 -2
- data/lib/google_contacts_api/groups.rb +33 -0
- data/lib/google_contacts_api/user.rb +20 -24
- data/lib/google_contacts_api/version.rb +2 -2
- data/lib/google_contacts_api.rb +1 -0
- data/spec/google_contacts_api_spec.rb +111 -30
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/google_contacts_api.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "google_contacts_api"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Alvin Liang"]
|
12
|
-
s.date = "2014-09-
|
12
|
+
s.date = "2014-09-27"
|
13
13
|
s.description = "Lets you read from the Google Contacts API. Posting to come later."
|
14
14
|
s.email = "ayliang@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
"lib/google_contacts_api/contacts.rb",
|
33
33
|
"lib/google_contacts_api/group.rb",
|
34
34
|
"lib/google_contacts_api/group_set.rb",
|
35
|
+
"lib/google_contacts_api/groups.rb",
|
35
36
|
"lib/google_contacts_api/result.rb",
|
36
37
|
"lib/google_contacts_api/result_set.rb",
|
37
38
|
"lib/google_contacts_api/user.rb",
|
@@ -2,7 +2,7 @@
|
|
2
2
|
module GoogleContactsApi
|
3
3
|
module Contacts
|
4
4
|
# Retrieve the contacts for this user or group
|
5
|
-
def
|
5
|
+
def get_contacts(params = {})
|
6
6
|
# TODO: Should return empty ContactSet (haven't implemented one yet)
|
7
7
|
return [] unless @api
|
8
8
|
params = params.with_indifferent_access
|
@@ -11,13 +11,14 @@ module GoogleContactsApi
|
|
11
11
|
# Return the contacts in this group and cache them.
|
12
12
|
def contacts(params = {})
|
13
13
|
# contacts in this group
|
14
|
-
@contacts ||=
|
14
|
+
@contacts ||= get_contacts({"group" => self.id}.merge(params))
|
15
15
|
end
|
16
16
|
|
17
17
|
# Return the contacts in this group, retrieving them again from the server.
|
18
18
|
def contacts!(params = {})
|
19
19
|
# contacts in this group
|
20
|
-
@contacts =
|
20
|
+
@contacts = nil
|
21
|
+
contacts
|
21
22
|
end
|
22
23
|
|
23
24
|
# Returns the array of links, as link is an array for Hashie.
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Module that implements a method to get groups for a user
|
2
|
+
module GoogleContactsApi
|
3
|
+
module Groups
|
4
|
+
# Retrieve the contacts for this user or group
|
5
|
+
def get_groups(params = {})
|
6
|
+
params = params.with_indifferent_access
|
7
|
+
# compose params into a string
|
8
|
+
# See http://code.google.com/apis/contacts/docs/3.0/reference.html#Parameters
|
9
|
+
# alt, q, max-results, start-index, updated-min,
|
10
|
+
# orderby, showdeleted, requirealldeleted, sortorder
|
11
|
+
params["max-results"] = 100000 unless params.key?("max-results")
|
12
|
+
|
13
|
+
# Set the version, for some reason the header is not effective on its own?
|
14
|
+
params["v"] = 2
|
15
|
+
|
16
|
+
url = "groups/default/full"
|
17
|
+
# TODO: So weird thing, version 3 doesn't return system groups
|
18
|
+
# When it does, uncomment this line and use it to request instead
|
19
|
+
# response = @api.get(url, params)
|
20
|
+
response = @api.get(url, params)
|
21
|
+
|
22
|
+
case GoogleContactsApi::Api.parse_response_code(response)
|
23
|
+
# TODO: Better handle 401, 403, 404
|
24
|
+
when 401; raise
|
25
|
+
when 403; raise
|
26
|
+
when 404; raise
|
27
|
+
when 400...500; raise
|
28
|
+
when 500...600; raise
|
29
|
+
end
|
30
|
+
GoogleContactsApi::GroupSet.new(response.body, @api)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,39 +1,35 @@
|
|
1
1
|
module GoogleContactsApi
|
2
2
|
class User
|
3
3
|
include GoogleContactsApi::Contacts
|
4
|
+
include GoogleContactsApi::Groups
|
4
5
|
|
5
6
|
attr_reader :api
|
6
7
|
def initialize(oauth)
|
7
8
|
@api = GoogleContactsApi::Api.new(oauth)
|
8
9
|
end
|
9
10
|
|
10
|
-
#
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# alt, q, max-results, start-index, updated-min,
|
16
|
-
# orderby, showdeleted, requirealldeleted, sortorder
|
17
|
-
params["max-results"] = 100000 unless params.key?("max-results")
|
11
|
+
# Return the contacts for this user and cache them.
|
12
|
+
def contacts(params = {})
|
13
|
+
# contacts in this group
|
14
|
+
@contacts ||= get_contacts(params)
|
15
|
+
end
|
18
16
|
|
19
|
-
|
20
|
-
|
17
|
+
# Return the contacts for this user, retrieving them again from the server.
|
18
|
+
def contacts!(params = {})
|
19
|
+
# contacts in this group
|
20
|
+
@contacts = nil
|
21
|
+
contacts
|
22
|
+
end
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
response = @api.get(url, params)
|
24
|
+
# Return the groups for this user and cache them.
|
25
|
+
def groups(params = {})
|
26
|
+
@groups ||= get_groups(params)
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
when 404; raise
|
33
|
-
when 400...500; raise
|
34
|
-
when 500...600; raise
|
35
|
-
end
|
36
|
-
GoogleContactsApi::GroupSet.new(response.body, @api)
|
29
|
+
# Return the groups for this user, retrieving them again from the server.
|
30
|
+
def groups!(params = {})
|
31
|
+
@groups = nil
|
32
|
+
groups
|
37
33
|
end
|
38
34
|
end
|
39
35
|
end
|
data/lib/google_contacts_api.rb
CHANGED
@@ -75,30 +75,90 @@ describe "GoogleContactsApi" do
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
describe
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
78
|
+
describe GoogleContactsApi::Contacts do
|
79
|
+
let(:api) { double("api") }
|
80
|
+
let(:test_class) {
|
81
|
+
Class.new do
|
82
|
+
include GoogleContactsApi::Contacts
|
83
|
+
def initialize(api)
|
84
|
+
@api = api
|
85
|
+
end
|
86
|
+
end
|
87
|
+
}
|
88
|
+
describe ".get_contacts" do
|
89
|
+
it "should get the contacts using the internal @api object" do
|
90
|
+
expect(api).to receive(:get).with("contacts/default/full", kind_of(Hash)).and_return(Hashie::Mash.new({
|
91
|
+
"body" => "some response", # could use example response here
|
92
|
+
"code" => 200
|
93
|
+
}))
|
94
|
+
allow(GoogleContactsApi::ContactSet).to receive(:new).and_return("contact set")
|
95
|
+
expect(test_class.new(api).get_contacts).to eq("contact set")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe GoogleContactsApi::Groups do
|
101
|
+
let(:api) { double("api") }
|
102
|
+
let(:test_class) {
|
103
|
+
Class.new do
|
104
|
+
include GoogleContactsApi::Groups
|
105
|
+
def initialize(api)
|
106
|
+
@api = api
|
107
|
+
end
|
108
|
+
end
|
109
|
+
}
|
110
|
+
describe ".get_groups" do
|
111
|
+
it "should get the groups using the internal @api object" do
|
112
|
+
expect(api).to receive(:get).with("groups/default/full", hash_including(:v => 2)).and_return(Hashie::Mash.new({
|
113
|
+
"body" => "some response", # could use example response here
|
114
|
+
"code" => 200
|
115
|
+
}))
|
116
|
+
allow(GoogleContactsApi::GroupSet).to receive(:new).and_return("group set")
|
117
|
+
expect(test_class.new(api).get_groups).to eq("group set")
|
118
|
+
end
|
88
119
|
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe GoogleContactsApi::User do
|
123
|
+
let(:oauth) { double ("oauth") }
|
124
|
+
let(:user) { GoogleContactsApi::User.new(@oauth) }
|
125
|
+
|
89
126
|
# Should hit the right URLs and return the right stuff
|
90
|
-
|
91
|
-
|
92
|
-
|
127
|
+
describe ".groups" do
|
128
|
+
it "should be able to get groups including system groups" do
|
129
|
+
expect(user).to receive(:get_groups).and_return("group set")
|
130
|
+
expect(user.groups).to eq("group set")
|
131
|
+
end
|
93
132
|
end
|
94
|
-
|
95
|
-
|
96
|
-
|
133
|
+
describe ".contacts" do
|
134
|
+
it "should be able to get contacts" do
|
135
|
+
expect(user).to receive(:get_contacts).and_return("contact set")
|
136
|
+
expect(user.contacts).to eq("contact set")
|
137
|
+
end
|
138
|
+
it "should use the contact cache for subsequent access" do
|
139
|
+
expect(user).to receive(:get_contacts).and_return("contact set").once
|
140
|
+
user.contacts
|
141
|
+
contacts = user.contacts
|
142
|
+
expect(contacts).to eq("contact set")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
describe ".contacts!" do
|
146
|
+
it "should be able to get contacts" do
|
147
|
+
expect(user).to receive(:get_contacts).and_return("contact set")
|
148
|
+
expect(user.contacts!).to eq("contact set")
|
149
|
+
end
|
150
|
+
it "should reload the contacts" do
|
151
|
+
expect(user).to receive(:get_contacts).and_return("contact set").twice
|
152
|
+
user.contacts
|
153
|
+
contacts = user.contacts!
|
154
|
+
expect(contacts).to eq("contact set")
|
155
|
+
end
|
97
156
|
end
|
98
157
|
end
|
99
158
|
|
100
159
|
describe "ResultSet" do
|
101
|
-
|
160
|
+
pending ".each"
|
161
|
+
pending ".has_more?"
|
102
162
|
end
|
103
163
|
|
104
164
|
describe "ContactSet" do
|
@@ -357,7 +417,7 @@ describe "GoogleContactsApi" do
|
|
357
417
|
end
|
358
418
|
end
|
359
419
|
|
360
|
-
describe
|
420
|
+
describe GoogleContactsApi::Group do
|
361
421
|
before(:all) do
|
362
422
|
@group_json_hash = group_json_hash
|
363
423
|
@group = GoogleContactsApi::Group.new(group_json_hash)
|
@@ -380,18 +440,39 @@ describe "GoogleContactsApi" do
|
|
380
440
|
it "should tell me if it's a system group" do
|
381
441
|
expect(@group).to be_system_group
|
382
442
|
end
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
"
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
443
|
+
describe ".contacts" do
|
444
|
+
before(:each) do
|
445
|
+
@api = double("api")
|
446
|
+
@group = GoogleContactsApi::Group.new(@contact_json_hash, nil, @api)
|
447
|
+
allow(@group).to receive(:id).and_return("group id")
|
448
|
+
end
|
449
|
+
it "should be able to get contacts" do
|
450
|
+
expect(@group).to receive(:get_contacts).with(hash_including({"group" => "group id"})).and_return("contact set")
|
451
|
+
expect(@group.contacts).to eq("contact set")
|
452
|
+
end
|
453
|
+
it "should use the contact cache for subsequent access" do
|
454
|
+
expect(@group).to receive(:get_contacts).with(hash_including({"group" => "group id"})).and_return("contact set").once
|
455
|
+
@group.contacts
|
456
|
+
contacts = @group.contacts
|
457
|
+
expect(contacts).to eq("contact set")
|
458
|
+
end
|
459
|
+
end
|
460
|
+
describe ".contacts!" do
|
461
|
+
before(:each) do
|
462
|
+
@api = double("api")
|
463
|
+
@group = GoogleContactsApi::Group.new(@contact_json_hash, nil, @api)
|
464
|
+
allow(@group).to receive(:id).and_return("group id")
|
465
|
+
end
|
466
|
+
it "should be able to get contacts" do
|
467
|
+
expect(@group).to receive(:get_contacts).with(hash_including({"group" => "group id"})).and_return("contact set")
|
468
|
+
expect(@group.contacts!).to eq("contact set")
|
469
|
+
end
|
470
|
+
it "should use the contact cache for subsequent access" do
|
471
|
+
expect(@group).to receive(:get_contacts).with(hash_including({"group" => "group id"})).and_return("contact set").twice
|
472
|
+
@group.contacts
|
473
|
+
contacts = @group.contacts!
|
474
|
+
expect(contacts).to eq("contact set")
|
475
|
+
end
|
395
476
|
end
|
396
477
|
end
|
397
478
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_contacts_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-09-
|
12
|
+
date: 2014-09-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -210,6 +210,7 @@ files:
|
|
210
210
|
- lib/google_contacts_api/contacts.rb
|
211
211
|
- lib/google_contacts_api/group.rb
|
212
212
|
- lib/google_contacts_api/group_set.rb
|
213
|
+
- lib/google_contacts_api/groups.rb
|
213
214
|
- lib/google_contacts_api/result.rb
|
214
215
|
- lib/google_contacts_api/result_set.rb
|
215
216
|
- lib/google_contacts_api/user.rb
|
@@ -235,7 +236,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
235
236
|
version: '0'
|
236
237
|
segments:
|
237
238
|
- 0
|
238
|
-
hash:
|
239
|
+
hash: 1433605714673791610
|
239
240
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
241
|
none: false
|
241
242
|
requirements:
|