googl-api 0.2.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -1
- data/Gemfile.lock +6 -0
- data/README.rdoc +14 -7
- data/VERSION +1 -1
- data/googl-api.gemspec +8 -1
- data/lib/googl-api.rb +1 -0
- data/lib/googl-api/client.rb +15 -4
- data/lib/googl-api/client_login.rb +16 -0
- data/test/helper.rb +9 -2
- data/test/test_googl.rb +32 -4
- metadata +32 -5
data/Gemfile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
|
-
# gem 'httparty'
|
3
2
|
|
4
3
|
# Add dependencies to develop your gem here.
|
5
4
|
# Include everything needed to run rake, tests, features, etc.
|
@@ -8,4 +7,6 @@ group :development do
|
|
8
7
|
gem "bundler", "~> 1.0.0"
|
9
8
|
gem "jeweler", "~> 1.5.2"
|
10
9
|
gem "rcov", ">= 0"
|
10
|
+
gem 'httparty'
|
11
|
+
gem "google_client_login"
|
11
12
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
crack (0.1.8)
|
4
5
|
git (1.2.5)
|
6
|
+
google_client_login (0.3.1)
|
7
|
+
httparty (0.6.1)
|
8
|
+
crack (= 0.1.8)
|
5
9
|
jeweler (1.5.2)
|
6
10
|
bundler (~> 1.0.0)
|
7
11
|
git (>= 1.2.5)
|
@@ -15,6 +19,8 @@ PLATFORMS
|
|
15
19
|
|
16
20
|
DEPENDENCIES
|
17
21
|
bundler (~> 1.0.0)
|
22
|
+
google_client_login
|
23
|
+
httparty
|
18
24
|
jeweler (~> 1.5.2)
|
19
25
|
rcov
|
20
26
|
shoulda
|
data/README.rdoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
A very simple Ruby wrapper for the Google Url Shortener.
|
4
4
|
|
5
|
-
* service - http://goo.gl
|
5
|
+
* service - http://goo.gl
|
6
6
|
* api docs - http://code.google.com/apis/urlshortener/index.html
|
7
7
|
|
8
8
|
== INSTALLATION:
|
@@ -11,11 +11,12 @@ A very simple Ruby wrapper for the Google Url Shortener.
|
|
11
11
|
|
12
12
|
== USAGE:
|
13
13
|
|
14
|
-
Create a googl client using your API key:
|
14
|
+
Create a googl client using your API key and/or with ClientLogin auth information. (note: you will need to "Activate" the "URL Shortener API" on this page to retrieve and user your api_key: https://code.google.com/apis/console/b/0/#project:1090911256926:overview )
|
15
15
|
|
16
|
-
googl = GooglApi.new('
|
16
|
+
googl = GooglApi.new(:api_key => 'your_api_key', :email => 'google_email', :password => 'valid_password')
|
17
|
+
|
17
18
|
|
18
|
-
Then use the client to shorten, extend or review the analytics for a URL.
|
19
|
+
Then use the client to shorten, extend or review the analytics for a URL. If authentication is provided the short_url provided will be specific to the given user and will show up in the users history.
|
19
20
|
|
20
21
|
googl.shorten('http://www.google.com')
|
21
22
|
googl.expand('http://goo.gl/fbsS')
|
@@ -23,9 +24,15 @@ Then use the client to shorten, extend or review the analytics for a URL.
|
|
23
24
|
|
24
25
|
These methods will return a response object containing the short/long url and other values provide by the API
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
To access a users history you must provide authentication information
|
28
|
+
|
29
|
+
googl = GooglApi.new(:email => 'google_email', :password => 'valid_password')
|
30
|
+
googl.history
|
31
|
+
|
32
|
+
This method returns a hash containing the authenticated users history
|
33
|
+
|
34
|
+
* TODO: implement analytics and history response objects
|
35
|
+
* TODO: implement oauth
|
29
36
|
|
30
37
|
== ACKNOWLEDGEMENTS
|
31
38
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/googl-api.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{googl-api}
|
8
|
-
s.version = "0.
|
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 = ["John Allen"]
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"init.rb",
|
29
29
|
"lib/googl-api.rb",
|
30
30
|
"lib/googl-api/client.rb",
|
31
|
+
"lib/googl-api/client_login.rb",
|
31
32
|
"lib/googl-api/response.rb",
|
32
33
|
"test/helper.rb",
|
33
34
|
"test/test_googl.rb"
|
@@ -51,12 +52,16 @@ Gem::Specification.new do |s|
|
|
51
52
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
52
53
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
53
54
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
55
|
+
s.add_development_dependency(%q<httparty>, [">= 0"])
|
56
|
+
s.add_development_dependency(%q<google_client_login>, [">= 0"])
|
54
57
|
s.add_runtime_dependency(%q<httparty>, [">= 0.6.1"])
|
55
58
|
else
|
56
59
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
57
60
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
58
61
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
59
62
|
s.add_dependency(%q<rcov>, [">= 0"])
|
63
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
64
|
+
s.add_dependency(%q<google_client_login>, [">= 0"])
|
60
65
|
s.add_dependency(%q<httparty>, [">= 0.6.1"])
|
61
66
|
end
|
62
67
|
else
|
@@ -64,6 +69,8 @@ Gem::Specification.new do |s|
|
|
64
69
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
65
70
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
66
71
|
s.add_dependency(%q<rcov>, [">= 0"])
|
72
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
73
|
+
s.add_dependency(%q<google_client_login>, [">= 0"])
|
67
74
|
s.add_dependency(%q<httparty>, [">= 0.6.1"])
|
68
75
|
end
|
69
76
|
end
|
data/lib/googl-api.rb
CHANGED
data/lib/googl-api/client.rb
CHANGED
@@ -4,8 +4,8 @@ module GooglApi
|
|
4
4
|
API_URL = 'https://www.googleapis.com/urlshortener/'
|
5
5
|
API_VERSION = 'v1'
|
6
6
|
|
7
|
-
def self.new(
|
8
|
-
Client.new(
|
7
|
+
def self.new(options = {})
|
8
|
+
Client.new(options)
|
9
9
|
end
|
10
10
|
|
11
11
|
class Client
|
@@ -14,8 +14,14 @@ module GooglApi
|
|
14
14
|
base_uri "#{API_URL}#{API_VERSION}"
|
15
15
|
headers 'Content-Type' => 'application/json; charset=utf-8'
|
16
16
|
|
17
|
-
def initialize(
|
18
|
-
|
17
|
+
def initialize(options = {})
|
18
|
+
# set api key if provided
|
19
|
+
@api_key = { :key => options[:api_key] } if options.has_key?(:api_key)
|
20
|
+
|
21
|
+
# set auth token for client login if provided
|
22
|
+
if options[:email] && options[:password] && @token = ClientLogin.authenticate(options[:email], options[:password])
|
23
|
+
self.class.headers.merge!("Authorization" => "GoogleLogin auth=#{@token}")
|
24
|
+
end
|
19
25
|
end
|
20
26
|
|
21
27
|
def shorten(url)
|
@@ -32,6 +38,11 @@ module GooglApi
|
|
32
38
|
raise ArgumentError.new("A URL to check analytics on is required") if url.blank?
|
33
39
|
load_respose(self.class.get('/url', :query => @api_key.merge({ :shortUrl => url, :projection => projection })))
|
34
40
|
end
|
41
|
+
|
42
|
+
def history
|
43
|
+
raise ArgumentError.new("Doing a history search requires a Client Login (or eventually OAuth to be set)") unless @token
|
44
|
+
self.class.get('/url/history')
|
45
|
+
end
|
35
46
|
private
|
36
47
|
def load_respose(resp)
|
37
48
|
raise GooglError.new(resp.message, resp.code) if resp.code != 200
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'google_client_login'
|
2
|
+
|
3
|
+
module GooglApi
|
4
|
+
class ClientLogin
|
5
|
+
class << self
|
6
|
+
def authenticate(email, password)
|
7
|
+
login_service = GoogleClientLogin::GoogleAuth.new(:accountType => 'HOSTED_OR_GOOGLE',
|
8
|
+
:service => 'urlshortener',
|
9
|
+
:source => 'companyName-applicationName-versionID'
|
10
|
+
)
|
11
|
+
login_service.authenticate(email, password)
|
12
|
+
auth_token = login_service.auth
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/test/helper.rb
CHANGED
data/test/test_googl.rb
CHANGED
@@ -3,13 +3,13 @@ require 'helper'
|
|
3
3
|
class TestGoogl < Test::Unit::TestCase
|
4
4
|
context "googl-api module" do
|
5
5
|
should "create a new googl-api client" do
|
6
|
-
c = GooglApi.new(api_key)
|
6
|
+
c = GooglApi.new(:api_key => api_key)
|
7
7
|
assert_equal GooglApi::Client, c.class
|
8
8
|
end
|
9
9
|
end
|
10
10
|
context "using the googl-api client" do
|
11
11
|
setup do
|
12
|
-
@client = GooglApi.new(api_key)
|
12
|
+
@client = GooglApi.new(:api_key => api_key)
|
13
13
|
end
|
14
14
|
|
15
15
|
context "shortening" do
|
@@ -21,13 +21,13 @@ class TestGoogl < Test::Unit::TestCase
|
|
21
21
|
assert_kind_of GooglApi::Response, @url
|
22
22
|
end
|
23
23
|
should "return a short goo.gl url" do
|
24
|
-
|
24
|
+
assert @url.short_url.match(/^http:\/\/goo.gl\//)
|
25
25
|
end
|
26
26
|
should "save the long url" do
|
27
27
|
assert_equal "http://ruby-lang.org/", @url.long_url
|
28
28
|
end
|
29
29
|
should "provide a qr code url" do
|
30
|
-
assert_equal
|
30
|
+
assert_equal @url.short_url, @url.qr_code[0..(@url.short_url.size - 1)]
|
31
31
|
end
|
32
32
|
end
|
33
33
|
context "no links" do
|
@@ -97,5 +97,33 @@ class TestGoogl < Test::Unit::TestCase
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
end
|
100
|
+
context "history" do
|
101
|
+
should "raise an ArgumentError because auth is not set" do
|
102
|
+
assert_raise ArgumentError do
|
103
|
+
@client.history
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
context "using google client login" do
|
109
|
+
setup do
|
110
|
+
@client_auth = GooglApi.new(:email => email, :password => password)
|
111
|
+
end
|
112
|
+
|
113
|
+
context "shortening" do
|
114
|
+
context "a single link" do
|
115
|
+
setup do
|
116
|
+
@url = @client_auth.shorten('http://ruby-lang.org/')
|
117
|
+
end
|
118
|
+
should "return a GooglApi::Response" do
|
119
|
+
assert_kind_of GooglApi::Response, @url
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
context "history" do
|
124
|
+
should "have history" do
|
125
|
+
assert_not_nil @client_auth.history
|
126
|
+
end
|
127
|
+
end
|
100
128
|
end
|
101
129
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- John Allen
|
@@ -76,6 +76,32 @@ dependencies:
|
|
76
76
|
- !ruby/object:Gem::Dependency
|
77
77
|
name: httparty
|
78
78
|
requirement: &id005 !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 0
|
85
|
+
version: "0"
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: *id005
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: google_client_login
|
91
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
version: "0"
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *id006
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: httparty
|
104
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
79
105
|
none: false
|
80
106
|
requirements:
|
81
107
|
- - ">="
|
@@ -87,7 +113,7 @@ dependencies:
|
|
87
113
|
version: 0.6.1
|
88
114
|
type: :runtime
|
89
115
|
prerelease: false
|
90
|
-
version_requirements: *
|
116
|
+
version_requirements: *id007
|
91
117
|
description: A very simple ruby wrapper for the goo.gl URL Shortening service
|
92
118
|
email: john@threedogconsulting.com
|
93
119
|
executables: []
|
@@ -109,6 +135,7 @@ files:
|
|
109
135
|
- init.rb
|
110
136
|
- lib/googl-api.rb
|
111
137
|
- lib/googl-api/client.rb
|
138
|
+
- lib/googl-api/client_login.rb
|
112
139
|
- lib/googl-api/response.rb
|
113
140
|
- test/helper.rb
|
114
141
|
- test/test_googl.rb
|
@@ -126,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
153
|
requirements:
|
127
154
|
- - ">="
|
128
155
|
- !ruby/object:Gem::Version
|
129
|
-
hash:
|
156
|
+
hash: 3605682061074164118
|
130
157
|
segments:
|
131
158
|
- 0
|
132
159
|
version: "0"
|