google-short-links 0.1.0 → 0.1.1
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/google-short-links.gemspec +1 -1
- data/lib/google_short_links.rb +2 -0
- data/lib/google_short_links/client.rb +122 -6
- data/lib/google_short_links/parser.rb +4 -0
- metadata +16 -16
data/Rakefile
CHANGED
@@ -40,7 +40,7 @@ RDoc::Task.new do |rdoc|
|
|
40
40
|
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
41
41
|
|
42
42
|
rdoc.rdoc_dir = 'rdoc'
|
43
|
-
rdoc.title = "
|
43
|
+
rdoc.title = "google-short-links #{version}"
|
44
44
|
rdoc.rdoc_files.include('README*')
|
45
45
|
rdoc.rdoc_files.include(File.join('lib', '**', '*.rb'))
|
46
46
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/google-short-links.gemspec
CHANGED
data/lib/google_short_links.rb
CHANGED
@@ -6,19 +6,63 @@ require 'uri'
|
|
6
6
|
|
7
7
|
require 'httparty'
|
8
8
|
|
9
|
+
# Client for Google Short Links.
|
10
|
+
#
|
11
|
+
# ==== Examples
|
12
|
+
#
|
13
|
+
# client = GoogleShortLinks::Client.new :server => 'short.example.com', :secret => 'abcdef1234567890', :email => 'ben@example.com'
|
14
|
+
# link = client.get_or_create_hash 'http://example.com/parent/child/long_document_name.html', :is_public => true
|
15
|
+
# link # => {"status"=>"ok", "url"=>"http://example.com/parent/child/long_document_name.html", "estimated_api_calls_remaining"=>98, "shortcut"=>"abc12", "usage_count"=>0, "owner"=>"ben@example.com", "is_public"=>true, "is_hash"=>true}
|
9
16
|
class GoogleShortLinks::Client
|
10
17
|
include HTTParty
|
11
18
|
|
12
|
-
|
19
|
+
# The domain name where Google Short Links is hosted.
|
20
|
+
attr_accessor :server
|
21
|
+
|
22
|
+
# Your HMAC-SHA1 secret.
|
23
|
+
attr_accessor :secret
|
24
|
+
|
25
|
+
# The email for the account under which the links will be created.
|
26
|
+
attr_accessor :email
|
13
27
|
|
14
28
|
parser GoogleShortLinks::Parser
|
15
29
|
|
30
|
+
# Initializes a new Client.
|
31
|
+
#
|
32
|
+
# ==== Parameters
|
33
|
+
#
|
34
|
+
# [<tt>options</tt>] Optional Hash containing configuration values.
|
35
|
+
#
|
36
|
+
# ==== Options
|
37
|
+
#
|
38
|
+
# [:server]
|
39
|
+
# The domain name where Google Short Links is hosted.
|
40
|
+
# [:secret]
|
41
|
+
# Your HMAC-SHA1 secret.
|
42
|
+
# [:email]
|
43
|
+
# The email for the account under which the links will be created.
|
16
44
|
def initialize options={}
|
17
45
|
self.server = options[:server]
|
18
46
|
self.secret = options[:secret]
|
19
47
|
self.email = options[:email]
|
20
48
|
end
|
21
49
|
|
50
|
+
# Creates a URL that is used to create a hash.
|
51
|
+
#
|
52
|
+
# ==== Parameters
|
53
|
+
#
|
54
|
+
# [<tt>url</tt>] Required String containing the URL to be shortened.
|
55
|
+
# [<tt>params</tt>] Optional Hash that will add or override GET parameters in the URL.
|
56
|
+
#
|
57
|
+
# ==== Parameters
|
58
|
+
#
|
59
|
+
# [:is_public]
|
60
|
+
# Boolean for whether or not the short link can be accessed without logging in to Google Apps.
|
61
|
+
#
|
62
|
+
# ==== Examples
|
63
|
+
#
|
64
|
+
# link_url = client.get_or_create_hash_url 'http://example.com/parent/child/long_document_name.html', :is_public => true
|
65
|
+
# link_url # => "http://short.example.com/js/get_or_create_hash?is_public=true&oauth_signature_method=HMAC-SHA1×tamp=1321663459.0&url=http%3A%2F%2Fexample.com%2Fparent%2Fchild%2Flong_document_name.html&user=ben%40example.com&oauth_signature=JElQ0Oq59q%2BOsinYuMzGX%2F8Tn2U%3D"
|
22
66
|
def get_or_create_hash_url url, params={}
|
23
67
|
request_path = request_path(:get_or_create_hash)
|
24
68
|
|
@@ -27,6 +71,23 @@ class GoogleShortLinks::Client
|
|
27
71
|
digest_url(request_path, query)
|
28
72
|
end
|
29
73
|
|
74
|
+
# Creates a URL that is used to create a shortlink with a customized shortcut.
|
75
|
+
#
|
76
|
+
# ==== Parameters
|
77
|
+
#
|
78
|
+
# [<tt>url</tt>] Required String containing the URL to be shortened.
|
79
|
+
# [<tt>shortcut</tt>] Required String containing the custom shortcut.
|
80
|
+
# [<tt>params</tt>] Optional Hash that will add or override GET parameters in the URL.
|
81
|
+
#
|
82
|
+
# ==== Parameters
|
83
|
+
#
|
84
|
+
# [:is_public]
|
85
|
+
# Boolean for whether or not the short link can be accessed without logging in to Google Apps.
|
86
|
+
#
|
87
|
+
# ==== Examples
|
88
|
+
#
|
89
|
+
# link_url = client.get_or_create_shortlink_url 'http://example.com/parent/child/long_document_name.html', 'example', :is_public => true
|
90
|
+
# link_url # => "http://short.example.com/js/get_or_create_shortlink?is_public=true&oauth_signature_method=HMAC-SHA1&shortcut=example×tamp=1321663613.0&url=http%3A%2F%2Fexample.com%2Fparent%2Fchild%2Flong_document_name.html&user=ben%40example.com&oauth_signature=FsOEjCDw3qpz%2B59Pdi4d1Qvv0Os%3D"
|
30
91
|
def get_or_create_shortlink_url url, shortcut, params={}
|
31
92
|
request_path = request_path(:get_or_create_shortlink)
|
32
93
|
|
@@ -35,6 +96,17 @@ class GoogleShortLinks::Client
|
|
35
96
|
digest_url(request_path, query)
|
36
97
|
end
|
37
98
|
|
99
|
+
# Creates a URL that is used to get details about a link from its shortcut.
|
100
|
+
#
|
101
|
+
# ==== Parameters
|
102
|
+
#
|
103
|
+
# [<tt>shortcut</tt>] Required String containing the URL to be shortened.
|
104
|
+
# [<tt>params</tt>] Optional Hash that will add or override GET parameters in the URL.
|
105
|
+
#
|
106
|
+
# ==== Examples
|
107
|
+
#
|
108
|
+
# link_url = client.get_details_url 'example'
|
109
|
+
# link_url # => "http://short.example.com/js/get_details?oauth_signature_method=HMAC-SHA1&shortcut=example×tamp=1321663629.0&user=ben%40example.com&oauth_signature=p8XqzF0lITupKN3Ta0qu2E8hqBI%3D"
|
38
110
|
def get_details_url shortcut, params={}
|
39
111
|
request_path = request_path(:get_details)
|
40
112
|
|
@@ -43,25 +115,69 @@ class GoogleShortLinks::Client
|
|
43
115
|
digest_url(request_path, query)
|
44
116
|
end
|
45
117
|
|
118
|
+
# Shortens a URL.
|
119
|
+
#
|
120
|
+
# ==== Parameters
|
121
|
+
#
|
122
|
+
# [<tt>url</tt>] Required String containing the URL to be shortened.
|
123
|
+
# [<tt>params</tt>] Optional Hash that will add or override GET parameters in the URL.
|
124
|
+
#
|
125
|
+
# ==== Parameters
|
126
|
+
#
|
127
|
+
# [:is_public]
|
128
|
+
# Boolean for whether or not the short link can be accessed without logging in to Google Apps.
|
129
|
+
#
|
130
|
+
# ==== Examples
|
131
|
+
#
|
132
|
+
# link = client.get_or_create_hash 'http://example.com/parent/child/long_document_name.html', :is_public => true
|
133
|
+
# link # => {"status"=>"ok", "url"=>"http://example.com/parent/child/long_document_name.html", "estimated_api_calls_remaining"=>98, "shortcut"=>"abc12", "usage_count"=>0, "owner"=>"ben@example.com", "is_public"=>true, "is_hash"=>true}
|
46
134
|
def get_or_create_hash url, params={}
|
47
135
|
self.class.get(get_or_create_hash_url(url, params)).parsed_response
|
48
136
|
end
|
49
137
|
|
138
|
+
# Creates a shortlink with a customized shortcut.
|
139
|
+
#
|
140
|
+
# ==== Parameters
|
141
|
+
#
|
142
|
+
# [<tt>url</tt>] Required String containing the URL to be shortened.
|
143
|
+
# [<tt>shortcut</tt>] Required String containing the custom shortcut.
|
144
|
+
# [<tt>params</tt>] Optional Hash that will add or override GET parameters in the URL.
|
145
|
+
#
|
146
|
+
# ==== Parameters
|
147
|
+
#
|
148
|
+
# [:is_public]
|
149
|
+
# Boolean for whether or not the short link can be accessed without logging in to Google Apps.
|
150
|
+
#
|
151
|
+
# ==== Examples
|
152
|
+
#
|
153
|
+
# link = client.get_or_create_shortlink 'http://example.com/parent/child/long_document_name.html', 'example', :is_public => true
|
154
|
+
# link # => {"status"=>"ok", "url"=>"http://example.com/parent/child/long_document_name.html", "estimated_api_calls_remaining"=>99, "shortcut"=>"example", "usage_count"=>0, "owner"=>"ben@example.com", "is_public"=>true, "is_hash"=>false}
|
50
155
|
def get_or_create_shortlink url, shortcut, params={}
|
51
156
|
self.class.get(get_or_create_shortlink_url(url, shortcut, params)).parsed_response
|
52
157
|
end
|
53
158
|
|
159
|
+
# Gets details about a link from its shortcut.
|
160
|
+
#
|
161
|
+
# ==== Parameters
|
162
|
+
#
|
163
|
+
# [<tt>shortcut</tt>] Required String containing the URL to be shortened.
|
164
|
+
# [<tt>params</tt>] Optional Hash that will add or override GET parameters in the URL.
|
165
|
+
#
|
166
|
+
# ==== Examples
|
167
|
+
#
|
168
|
+
# link = client.get_details 'example'
|
169
|
+
# link # => {"status"=>"ok", "url"=>"http://example.com/parent/child/long_document_name.html", "estimated_api_calls_remaining"=>100, "shortcut"=>"example", "usage_count"=>0, "owner"=>"ben@example.com", "is_public"=>true, "is_hash"=>false}
|
54
170
|
def get_details shortcut, params={}
|
55
171
|
self.class.get(get_details_url(shortcut, params)).parsed_response
|
56
172
|
end
|
57
173
|
|
58
174
|
protected
|
59
175
|
|
60
|
-
def request_path action
|
176
|
+
def request_path action #:nodoc:
|
61
177
|
"http://#{server}/js/#{action}"
|
62
178
|
end
|
63
179
|
|
64
|
-
def base_params
|
180
|
+
def base_params #:nodoc:
|
65
181
|
{
|
66
182
|
:oauth_signature_method => 'HMAC-SHA1',
|
67
183
|
:timestamp => Time.now.to_i.to_f,
|
@@ -69,11 +185,11 @@ class GoogleShortLinks::Client
|
|
69
185
|
}
|
70
186
|
end
|
71
187
|
|
72
|
-
def params_to_query params
|
188
|
+
def params_to_query params #:nodoc:
|
73
189
|
params.to_a.sort_by { |param| param.to_s }.map { |(key, value)| "#{CGI.escape(key.to_s)}=#{CGI.escape(value.to_s)}" }.join('&')
|
74
190
|
end
|
75
191
|
|
76
|
-
def digest request_path, query
|
192
|
+
def digest request_path, query #:nodoc:
|
77
193
|
content = "GET&#{CGI.escape(request_path)}&#{CGI.escape(query)}"
|
78
194
|
|
79
195
|
digest = OpenSSL::Digest::Digest.new('sha1')
|
@@ -81,7 +197,7 @@ class GoogleShortLinks::Client
|
|
81
197
|
CGI.escape(Base64.encode64(digest_raw).chomp)
|
82
198
|
end
|
83
199
|
|
84
|
-
def digest_url request_path, query
|
200
|
+
def digest_url request_path, query #:nodoc:
|
85
201
|
request_uri = URI.parse(request_path)
|
86
202
|
request_uri.query = "#{query}&oauth_signature=#{digest(request_path, query)}"
|
87
203
|
request_uri.to_s
|
@@ -1,9 +1,13 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
require 'multi_json'
|
3
3
|
|
4
|
+
# Parses the JSON that Google Short Links returns.
|
4
5
|
class GoogleShortLinks::Parser < HTTParty::Parser
|
6
|
+
# Google returns the JSON response as a text/html mime type.
|
7
|
+
# This class only supports JSON currently.
|
5
8
|
SupportedFormats = { 'text/html' => :json }
|
6
9
|
|
10
|
+
# Decodes JSON into a hash.
|
7
11
|
def json
|
8
12
|
MultiJson.decode(body)
|
9
13
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-short-links
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
17
|
-
requirement: &
|
17
|
+
requirement: &26633460 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *26633460
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: multi_json
|
28
|
-
requirement: &
|
28
|
+
requirement: &26632780 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *26632780
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: jeweler
|
39
|
-
requirement: &
|
39
|
+
requirement: &26632180 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *26632180
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rcov
|
50
|
-
requirement: &
|
50
|
+
requirement: &26631580 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *26631580
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rdoc
|
61
|
-
requirement: &
|
61
|
+
requirement: &26630980 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *26630980
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
|
-
requirement: &
|
72
|
+
requirement: &26630340 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *26630340
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: timecop
|
83
|
-
requirement: &
|
83
|
+
requirement: &26629740 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,7 +88,7 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *26629740
|
92
92
|
description: Ruby wrapper for Google Short Links.
|
93
93
|
email: benmanns@gmail.com
|
94
94
|
executables: []
|
@@ -131,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash:
|
134
|
+
hash: -3436815904282187362
|
135
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
136
|
none: false
|
137
137
|
requirements:
|