google_contacts_api 0.2.7 → 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.
- data/Gemfile +4 -3
- data/LICENSE.txt +9 -16
- data/README.markdown +1 -1
- data/VERSION +1 -1
- data/google_contacts_api.gemspec +21 -21
- data/lib/google_contacts_api/api.rb +6 -0
- data/lib/google_contacts_api/contact.rb +6 -1
- data/lib/google_contacts_api/contact_set.rb +5 -1
- data/lib/google_contacts_api/contacts.rb +1 -1
- data/lib/google_contacts_api/user.rb +1 -1
- data/spec/contact_set.json +5 -5
- data/spec/empty_contact_set.json +77 -0
- data/spec/google_contacts_api_spec.rb +42 -20
- data/spec/spec_helper.rb +11 -6
- metadata +153 -99
data/Gemfile
CHANGED
@@ -10,8 +10,9 @@ gem "hashie"
|
|
10
10
|
# Include everything needed to run rake, tests, features, etc.
|
11
11
|
group :development do
|
12
12
|
gem "shoulda"
|
13
|
-
gem "bundler"
|
14
|
-
gem "jeweler"
|
15
|
-
gem "
|
13
|
+
gem "bundler"
|
14
|
+
gem "jeweler"
|
15
|
+
gem "simplecov"
|
16
16
|
gem "rspec"
|
17
|
+
gem "rdoc"
|
17
18
|
end
|
data/LICENSE.txt
CHANGED
@@ -1,20 +1,13 @@
|
|
1
1
|
Copyright (c) 2011 Alvin Liang
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
10
6
|
|
11
|
-
|
12
|
-
included in all copies or substantial portions of the Software.
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
13
8
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.markdown
CHANGED
@@ -10,7 +10,7 @@ Then you can instantiate a GoogleContactsApi::Api object for direct posting and
|
|
10
10
|
GoogleContactsApi::User object for easier stuff.
|
11
11
|
|
12
12
|
```ruby
|
13
|
-
google_contacts_user = GoogleContactsApi::User(oauth_access_token_for_user)
|
13
|
+
google_contacts_user = GoogleContactsApi::User.new(oauth_access_token_for_user)
|
14
14
|
contacts = google_contacts_user.contacts
|
15
15
|
groups = google_contacts_user.groups
|
16
16
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/google_contacts_api.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "google_contacts_api"
|
8
|
+
s.version = "0.3.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 =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2013-01-11"
|
13
|
+
s.description = "Lets you read from the Google Contacts API. Posting to come later. Tests to come later."
|
14
|
+
s.email = "ayliang@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.markdown"
|
@@ -35,19 +35,16 @@ Gem::Specification.new do |s|
|
|
35
35
|
"lib/google_contacts_api/result_set.rb",
|
36
36
|
"lib/google_contacts_api/user.rb",
|
37
37
|
"spec/contact_set.json",
|
38
|
+
"spec/empty_contact_set.json",
|
38
39
|
"spec/google_contacts_api_spec.rb",
|
39
40
|
"spec/group_set.json",
|
40
41
|
"spec/spec_helper.rb"
|
41
42
|
]
|
42
|
-
s.homepage =
|
43
|
+
s.homepage = "http://github.com/aliang/google_contacts_api"
|
43
44
|
s.licenses = ["MIT"]
|
44
45
|
s.require_paths = ["lib"]
|
45
|
-
s.rubygems_version =
|
46
|
-
s.summary =
|
47
|
-
s.test_files = [
|
48
|
-
"spec/google_contacts_api_spec.rb",
|
49
|
-
"spec/spec_helper.rb"
|
50
|
-
]
|
46
|
+
s.rubygems_version = "1.8.24"
|
47
|
+
s.summary = "Lets you read from the Google Contacts API"
|
51
48
|
|
52
49
|
if s.respond_to? :specification_version then
|
53
50
|
s.specification_version = 3
|
@@ -58,20 +55,22 @@ Gem::Specification.new do |s|
|
|
58
55
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
59
56
|
s.add_runtime_dependency(%q<hashie>, [">= 0"])
|
60
57
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
61
|
-
s.add_development_dependency(%q<bundler>, ["
|
62
|
-
s.add_development_dependency(%q<jeweler>, ["
|
63
|
-
s.add_development_dependency(%q<
|
58
|
+
s.add_development_dependency(%q<bundler>, [">= 0"])
|
59
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
60
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
64
61
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
62
|
+
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
65
63
|
else
|
66
64
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
67
65
|
s.add_dependency(%q<i18n>, [">= 0"])
|
68
66
|
s.add_dependency(%q<json>, [">= 0"])
|
69
67
|
s.add_dependency(%q<hashie>, [">= 0"])
|
70
68
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
71
|
-
s.add_dependency(%q<bundler>, ["
|
72
|
-
s.add_dependency(%q<jeweler>, ["
|
73
|
-
s.add_dependency(%q<
|
69
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
70
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
71
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
74
72
|
s.add_dependency(%q<rspec>, [">= 0"])
|
73
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
75
74
|
end
|
76
75
|
else
|
77
76
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
@@ -79,10 +78,11 @@ Gem::Specification.new do |s|
|
|
79
78
|
s.add_dependency(%q<json>, [">= 0"])
|
80
79
|
s.add_dependency(%q<hashie>, [">= 0"])
|
81
80
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
82
|
-
s.add_dependency(%q<bundler>, ["
|
83
|
-
s.add_dependency(%q<jeweler>, ["
|
84
|
-
s.add_dependency(%q<
|
81
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
82
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
83
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
85
84
|
s.add_dependency(%q<rspec>, [">= 0"])
|
85
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
@@ -52,5 +52,11 @@ module GoogleContactsApi
|
|
52
52
|
params["alt"] = "json"
|
53
53
|
@oauth.delete("#{BASE_URL}#{link}?#{params.to_query}", headers)
|
54
54
|
end
|
55
|
+
|
56
|
+
# Parse the response code
|
57
|
+
# Needed because of difference between oauth and oauth2 gems
|
58
|
+
def self.parse_response_code(response)
|
59
|
+
(defined?(response.code) ? response.code : response.status).to_i
|
60
|
+
end
|
55
61
|
end
|
56
62
|
end
|
@@ -34,7 +34,7 @@ module GoogleContactsApi
|
|
34
34
|
return nil unless @api && photo_link
|
35
35
|
response = @api.oauth.get(photo_link)
|
36
36
|
|
37
|
-
case response
|
37
|
+
case GoogleContactsApi::Api.parse_response_code(response)
|
38
38
|
# maybe return a placeholder instead of nil
|
39
39
|
when 400; return nil
|
40
40
|
when 401; return nil
|
@@ -57,6 +57,11 @@ module GoogleContactsApi
|
|
57
57
|
_link = self["link"].find { |l| l.rel == "edit" }
|
58
58
|
_link ? _link.href : nil
|
59
59
|
end
|
60
|
+
|
61
|
+
# Returns all phone numbers for the contact
|
62
|
+
def phone_numbers
|
63
|
+
self["gd$phoneNumber"] ? self["gd$phoneNumber"].map { |e| e['$t'] } : []
|
64
|
+
end
|
60
65
|
|
61
66
|
# Returns all email addresses for the contact
|
62
67
|
def emails
|
@@ -3,7 +3,11 @@ module GoogleContactsApi
|
|
3
3
|
# Populate from a response that contains contacts
|
4
4
|
def initialize(response_body, api = nil)
|
5
5
|
super
|
6
|
-
@
|
6
|
+
if @parsed.nil? || @parsed.feed.nil? || @parsed.feed.entry.nil?
|
7
|
+
@results = []
|
8
|
+
else
|
9
|
+
@results = @parsed.feed.entry.map { |e| GoogleContactsApi::Contact.new(e, nil, api) }
|
10
|
+
end
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
@@ -22,7 +22,7 @@ module GoogleContactsApi
|
|
22
22
|
# response = @api.get(url, params)
|
23
23
|
response = @api.get(url, params, {"GData-Version" => "2"})
|
24
24
|
|
25
|
-
case response
|
25
|
+
case GoogleContactsApi::Api.parse_response_code(response)
|
26
26
|
when 401; raise
|
27
27
|
when 403; raise
|
28
28
|
when 404; raise
|
data/spec/contact_set.json
CHANGED
@@ -113,11 +113,11 @@
|
|
113
113
|
"address": "contact1@example.com",
|
114
114
|
"primary": "true"
|
115
115
|
}],
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
116
|
+
"gd$im": [{
|
117
|
+
"address": "contact1@example.com",
|
118
|
+
"protocol": "http://schemas.google.com/g/2005#GOOGLE_TAL",
|
119
|
+
"rel": "http://schemas.google.com/g/2005#other"
|
120
|
+
}]
|
121
121
|
},
|
122
122
|
{
|
123
123
|
"gd$etag": "\"QX8_ejVSLip7ImA9WB5UF0QCQAQ.\"",
|
@@ -0,0 +1,77 @@
|
|
1
|
+
{
|
2
|
+
"version": "1.0",
|
3
|
+
"encoding": "UTF-8",
|
4
|
+
"feed": {
|
5
|
+
"xmlns": "http://www.w3.org/2005/Atom",
|
6
|
+
"xmlns$openSearch": "http://a9.com/-/spec/opensearch/1.1/",
|
7
|
+
"xmlns$gContact": "http://schemas.google.com/contact/2008",
|
8
|
+
"xmlns$batch": "http://schemas.google.com/gdata/batch",
|
9
|
+
"xmlns$gd": "http://schemas.google.com/g/2005",
|
10
|
+
"gd$etag": "W/\"C0QAQ3k8eCp7ImA9WhdTEkw.\"",
|
11
|
+
"id": {
|
12
|
+
"$t": "example@gmail.com"
|
13
|
+
},
|
14
|
+
"updated": {
|
15
|
+
"$t": "2012-07-09T11:35:42.770Z"
|
16
|
+
},
|
17
|
+
"category": [{
|
18
|
+
"scheme": "http://schemas.google.com/g/2005#kind",
|
19
|
+
"term": "http://schemas.google.com/contact/2008#contact"
|
20
|
+
}],
|
21
|
+
"title": {
|
22
|
+
"$t": "Example User's Contacts"
|
23
|
+
},
|
24
|
+
"link": [{
|
25
|
+
"rel": "alternate",
|
26
|
+
"type": "text/html",
|
27
|
+
"href": "http://www.google.com/"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"rel": "http://schemas.google.com/g/2005#feed",
|
31
|
+
"type": "application/atom+xml",
|
32
|
+
"href": "https://www.google.com/m8/feeds/contacts/example%40gmail.com/full"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"rel": "http://schemas.google.com/g/2005#post",
|
36
|
+
"type": "application/atom+xml",
|
37
|
+
"href": "https://www.google.com/m8/feeds/contacts/example%40gmail.com/full"
|
38
|
+
},
|
39
|
+
{
|
40
|
+
"rel": "http://schemas.google.com/g/2005#batch",
|
41
|
+
"type": "application/atom+xml",
|
42
|
+
"href": "https://www.google.com/m8/feeds/contacts/example%40gmail.com/full/batch"
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"rel": "self",
|
46
|
+
"type": "application/atom+xml",
|
47
|
+
"href": "https://www.google.com/m8/feeds/contacts/example%40gmail.com/full?alt\u003djson\u0026max-results\u003d25"
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"rel": "next",
|
51
|
+
"type": "application/atom+xml",
|
52
|
+
"href": "https://www.google.com/m8/feeds/contacts/example%40gmail.com/full?alt\u003djson\u0026start-index\u003d26\u0026max-results\u003d25"
|
53
|
+
}],
|
54
|
+
"author": [{
|
55
|
+
"name": {
|
56
|
+
"$t": "Example User"
|
57
|
+
},
|
58
|
+
"email": {
|
59
|
+
"$t": "example@gmail.com"
|
60
|
+
}
|
61
|
+
}],
|
62
|
+
"generator": {
|
63
|
+
"version": "1.0",
|
64
|
+
"uri": "http://www.google.com/m8/feeds",
|
65
|
+
"$t": "Contacts"
|
66
|
+
},
|
67
|
+
"openSearch$totalResults": {
|
68
|
+
"$t": "0"
|
69
|
+
},
|
70
|
+
"openSearch$startIndex": {
|
71
|
+
"$t": "1"
|
72
|
+
},
|
73
|
+
"openSearch$itemsPerPage": {
|
74
|
+
"$t": "25"
|
75
|
+
}
|
76
|
+
}
|
77
|
+
}
|
@@ -41,6 +41,18 @@ describe "GoogleContactsApi" do
|
|
41
41
|
{"param" => "param"},
|
42
42
|
{"header" => "header"}) }.should raise_error(GoogleContactsApi::UnauthorizedError)
|
43
43
|
end
|
44
|
+
|
45
|
+
describe "parsing response code" do
|
46
|
+
it "should parse something that looks like an oauth gem response" do
|
47
|
+
Response = Struct.new(:code)
|
48
|
+
GoogleContactsApi::Api.parse_response_code(Response.new("401")).should == 401
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should parse something that looks like an oauth2 gem response" do
|
52
|
+
Response = Struct.new(:status)
|
53
|
+
GoogleContactsApi::Api.parse_response_code(Response.new("401")).should == 401
|
54
|
+
end
|
55
|
+
end
|
44
56
|
end
|
45
57
|
|
46
58
|
describe "User" do
|
@@ -70,27 +82,35 @@ describe "GoogleContactsApi" do
|
|
70
82
|
end
|
71
83
|
|
72
84
|
describe "ContactSet" do
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
85
|
+
describe "with entries" do
|
86
|
+
before(:all) do
|
87
|
+
@contact_set_json = contact_set_json
|
88
|
+
@contact_set = GoogleContactsApi::ContactSet.new(@contact_set_json)
|
89
|
+
end
|
77
90
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
91
|
+
it "should return the right starting index" do
|
92
|
+
@contact_set.start_index.should == 1
|
93
|
+
end
|
94
|
+
it "should return the right number of results per page" do
|
95
|
+
@contact_set.items_per_page.should == 25
|
96
|
+
end
|
97
|
+
it "should return the right number of total results" do
|
98
|
+
@contact_set.total_results.should == 500
|
99
|
+
end
|
100
|
+
it "should tell me if there are more results" do
|
101
|
+
# yeah this is an awkward assertion and matcher
|
102
|
+
@contact_set.should be_has_more
|
103
|
+
@contact_set.has_more?.should == true
|
104
|
+
end
|
105
|
+
it "should parse results into Contacts" do
|
106
|
+
@contact_set.to_a.first.should be_instance_of(GoogleContactsApi::Contact)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
it "should parse nil results into an empty array" do
|
110
|
+
@empty_contact_set_json = empty_contact_set_json
|
111
|
+
@empty_contact_set = GoogleContactsApi::ContactSet.new(@empty_contact_set_json)
|
112
|
+
@empty_contact_set.total_results.should == 0
|
113
|
+
@empty_contact_set.instance_variable_get("@results").should == []
|
94
114
|
end
|
95
115
|
end
|
96
116
|
|
@@ -169,6 +189,8 @@ describe "GoogleContactsApi" do
|
|
169
189
|
@oauth.should_receive("get").with(@contact.photo_link)
|
170
190
|
@contact.photo
|
171
191
|
end
|
192
|
+
# TODO: there isn't any phone number in here
|
193
|
+
pending "should return all phone numbers"
|
172
194
|
it "should return all e-mail addresses" do
|
173
195
|
@contact.emails.should == ["contact1@example.com"]
|
174
196
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -16,18 +16,23 @@ RSpec.configure do |config|
|
|
16
16
|
config.mock_framework = :rspec
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
f = File.open(
|
19
|
+
def contact_set_json_from_file(filename)
|
20
|
+
f = File.open(File.join(File.dirname(__FILE__), filename))
|
21
21
|
json = f.read
|
22
22
|
f.close
|
23
23
|
json
|
24
24
|
end
|
25
25
|
|
26
|
+
def contact_set_json
|
27
|
+
contact_set_json_from_file("contact_set.json")
|
28
|
+
end
|
29
|
+
|
26
30
|
def group_set_json
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
+
contact_set_json_from_file("group_set.json")
|
32
|
+
end
|
33
|
+
|
34
|
+
def empty_contact_set_json
|
35
|
+
contact_set_json_from_file("empty_contact_set.json")
|
31
36
|
end
|
32
37
|
|
33
38
|
def contact_json_hash
|
metadata
CHANGED
@@ -1,127 +1,185 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_contacts_api
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.7
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Alvin Liang
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-01-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: activesupport
|
18
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
|
-
version_requirements:
|
27
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
28
31
|
name: i18n
|
29
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
30
33
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
35
38
|
type: :runtime
|
36
39
|
prerelease: false
|
37
|
-
version_requirements:
|
38
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
39
47
|
name: json
|
40
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
41
49
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
46
54
|
type: :runtime
|
47
55
|
prerelease: false
|
48
|
-
version_requirements:
|
49
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
50
63
|
name: hashie
|
51
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
52
65
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
57
70
|
type: :runtime
|
58
71
|
prerelease: false
|
59
|
-
version_requirements:
|
60
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
61
79
|
name: shoulda
|
62
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
63
81
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version:
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
68
86
|
type: :development
|
69
87
|
prerelease: false
|
70
|
-
version_requirements:
|
71
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
72
95
|
name: bundler
|
73
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
74
97
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version:
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
79
102
|
type: :development
|
80
103
|
prerelease: false
|
81
|
-
version_requirements:
|
82
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
83
111
|
name: jeweler
|
84
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
85
113
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version:
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
90
118
|
type: :development
|
91
119
|
prerelease: false
|
92
|
-
version_requirements:
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
101
134
|
type: :development
|
102
135
|
prerelease: false
|
103
|
-
version_requirements:
|
104
|
-
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
105
143
|
name: rspec
|
106
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
153
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version:
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rdoc
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
112
166
|
type: :development
|
113
167
|
prerelease: false
|
114
|
-
version_requirements:
|
115
|
-
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
description: Lets you read from the Google Contacts API. Posting to come later. Tests
|
175
|
+
to come later.
|
116
176
|
email: ayliang@gmail.com
|
117
177
|
executables: []
|
118
|
-
|
119
178
|
extensions: []
|
120
|
-
|
121
|
-
extra_rdoc_files:
|
179
|
+
extra_rdoc_files:
|
122
180
|
- LICENSE.txt
|
123
181
|
- README.markdown
|
124
|
-
files:
|
182
|
+
files:
|
125
183
|
- .document
|
126
184
|
- Gemfile
|
127
185
|
- LICENSE.txt
|
@@ -140,40 +198,36 @@ files:
|
|
140
198
|
- lib/google_contacts_api/result_set.rb
|
141
199
|
- lib/google_contacts_api/user.rb
|
142
200
|
- spec/contact_set.json
|
201
|
+
- spec/empty_contact_set.json
|
143
202
|
- spec/google_contacts_api_spec.rb
|
144
203
|
- spec/group_set.json
|
145
204
|
- spec/spec_helper.rb
|
146
|
-
has_rdoc: true
|
147
205
|
homepage: http://github.com/aliang/google_contacts_api
|
148
|
-
licenses:
|
206
|
+
licenses:
|
149
207
|
- MIT
|
150
208
|
post_install_message:
|
151
209
|
rdoc_options: []
|
152
|
-
|
153
|
-
require_paths:
|
210
|
+
require_paths:
|
154
211
|
- lib
|
155
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
212
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
156
213
|
none: false
|
157
|
-
requirements:
|
158
|
-
- -
|
159
|
-
- !ruby/object:Gem::Version
|
160
|
-
|
161
|
-
segments:
|
214
|
+
requirements:
|
215
|
+
- - ! '>='
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0'
|
218
|
+
segments:
|
162
219
|
- 0
|
163
|
-
|
164
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
|
+
hash: -4509345012049129477
|
221
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
222
|
none: false
|
166
|
-
requirements:
|
167
|
-
- -
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version:
|
223
|
+
requirements:
|
224
|
+
- - ! '>='
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: '0'
|
170
227
|
requirements: []
|
171
|
-
|
172
228
|
rubyforge_project:
|
173
|
-
rubygems_version: 1.
|
229
|
+
rubygems_version: 1.8.24
|
174
230
|
signing_key:
|
175
231
|
specification_version: 3
|
176
232
|
summary: Lets you read from the Google Contacts API
|
177
|
-
test_files:
|
178
|
-
- spec/google_contacts_api_spec.rb
|
179
|
-
- spec/spec_helper.rb
|
233
|
+
test_files: []
|