google_url_shortener 0.0.3 → 0.0.4
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 +1 -0
- data/Gemfile.lock +3 -1
- data/google_url_shortener.gemspec +2 -3
- data/lib/google/url_shortener.rb +9 -10
- data/lib/google/url_shortener/analytics.rb +28 -0
- data/lib/google/url_shortener/analytics_group.rb +46 -0
- data/lib/google/url_shortener/base.rb +5 -1
- data/lib/google/url_shortener/errors.rb +14 -0
- data/lib/google/url_shortener/url.rb +5 -4
- data/lib/google/url_shortener/version.rb +1 -1
- data/readme.textile +29 -1
- data/spec/fixtures/expand.json +101 -0
- data/spec/fixtures/shorten.json +5 -0
- data/spec/helpers/fakeweb.rb +14 -0
- data/spec/lib/google/analytics_spec.rb +29 -0
- data/spec/lib/google/base_spec.rb +22 -0
- data/spec/lib/google/url_spec.rb +29 -0
- data/spec/lib/url_shortener_spec.rb +18 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/watch.rb +28 -0
- metadata +14 -9
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
google_url_shortener (0.0.
|
4
|
+
google_url_shortener (0.0.3)
|
5
5
|
json (= 1.4.6)
|
6
6
|
rest-client (= 1.6.1)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: http://rubygems.org/
|
10
10
|
specs:
|
11
|
+
fakeweb (1.3.0)
|
11
12
|
json (1.4.6)
|
12
13
|
mime-types (1.16)
|
13
14
|
rest-client (1.6.1)
|
@@ -18,6 +19,7 @@ PLATFORMS
|
|
18
19
|
|
19
20
|
DEPENDENCIES
|
20
21
|
bundler (>= 1.0.0)
|
22
|
+
fakeweb
|
21
23
|
google_url_shortener!
|
22
24
|
json (= 1.4.6)
|
23
25
|
rest-client (= 1.6.1)
|
@@ -9,11 +9,10 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["josh@josh-nesbitt.net"]
|
10
10
|
s.homepage = "http://rubygems.org/gems/google_url_shortener"
|
11
11
|
s.summary = "A simple library to shorten and expand goo.gl URL's."
|
12
|
-
s.description = "Google URL Shortener is a library to compress and expand goo.gl URL's. It also provides an interface to
|
12
|
+
s.description = "Google URL Shortener is a library to compress and expand goo.gl URL's. It also provides an interface to review the analytics of a short URL."
|
13
13
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.6"
|
15
|
-
s.rubyforge_project
|
16
|
-
|
15
|
+
s.rubyforge_project = "google_url_shortener"
|
17
16
|
s.add_dependency "json", "1.4.6"
|
18
17
|
s.add_dependency "rest-client", "1.6.1"
|
19
18
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
data/lib/google/url_shortener.rb
CHANGED
@@ -1,21 +1,20 @@
|
|
1
1
|
require 'restclient'
|
2
2
|
require 'json'
|
3
|
+
require 'date'
|
3
4
|
|
4
|
-
%w{ version request base url }.each do |f|
|
5
|
+
%w{ version request base url analytics analytics_group errors }.each do |f|
|
5
6
|
require("#{GEM_ROOT}/lib/google/url_shortener/#{f}")
|
6
7
|
end
|
7
8
|
|
8
9
|
module Google
|
9
10
|
module UrlShortener
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
Url.new(:short_url => url).expand!
|
18
|
-
end
|
11
|
+
|
12
|
+
def self.shorten!(url)
|
13
|
+
Url.new(:long_url => url).shorten!
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.expand!(url)
|
17
|
+
Url.new(:short_url => url).expand!
|
19
18
|
end
|
20
19
|
end
|
21
20
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Google
|
2
|
+
module UrlShortener
|
3
|
+
class Analytics
|
4
|
+
PROJECTION_LEVEL = "FULL"
|
5
|
+
attr_reader :raw, :all, :month, :week, :day, :two_hours
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def from_hash(hash)
|
9
|
+
a = new(hash)
|
10
|
+
a.parse_all!
|
11
|
+
a
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(raw={})
|
16
|
+
@raw = raw.dup
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_all!
|
20
|
+
@all = AnalyticsGroup.from_hash(self.raw["allTime"])
|
21
|
+
@month = AnalyticsGroup.from_hash(self.raw["month"])
|
22
|
+
@week = AnalyticsGroup.from_hash(self.raw["week"])
|
23
|
+
@day = AnalyticsGroup.from_hash(self.raw["day"])
|
24
|
+
@two_hours = AnalyticsGroup.from_hash(self.raw["twoHours"])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Google
|
2
|
+
module UrlShortener
|
3
|
+
class AnalyticsGroup
|
4
|
+
attr_reader :raw,
|
5
|
+
:short_url_clicks,
|
6
|
+
:long_url_clicks,
|
7
|
+
:referrers,
|
8
|
+
:countries,
|
9
|
+
:browsers,
|
10
|
+
:platforms
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def from_hash(hash)
|
14
|
+
a = new(hash)
|
15
|
+
a.parse_all!
|
16
|
+
a
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(raw={})
|
21
|
+
@raw = raw.dup
|
22
|
+
@short_url_clicks = self.raw["shortUrlClicks"].to_i
|
23
|
+
@long_url_clicks = self.raw["longUrlClicks"].to_i
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_all!
|
27
|
+
%w{ referrers countries browsers platforms }.each do |g|
|
28
|
+
self.instance_variable_set(:"@#{g}", reverse_array(self.raw[g]))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
def reverse_array(array=[])
|
34
|
+
hash = {}
|
35
|
+
|
36
|
+
return hash if array.nil?
|
37
|
+
|
38
|
+
array.each do |entry|
|
39
|
+
hash[entry["id"]] = entry["count"].to_i
|
40
|
+
end
|
41
|
+
|
42
|
+
hash
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -2,7 +2,7 @@ module Google
|
|
2
2
|
module UrlShortener
|
3
3
|
class Url < Base
|
4
4
|
include Request
|
5
|
-
attr_reader :long_url, :short_url, :status
|
5
|
+
attr_reader :long_url, :short_url, :status, :created_at, :analytics
|
6
6
|
|
7
7
|
def initialize(opts={})
|
8
8
|
opts.each_pair do |k, v|
|
@@ -11,11 +11,12 @@ module Google
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def decode!
|
14
|
-
params = validate_and_prepare_params(:shortUrl => self.short_url, :projection =>
|
14
|
+
params = validate_and_prepare_params(:shortUrl => self.short_url, :projection => Analytics::PROJECTION_LEVEL)
|
15
15
|
response = get(params)
|
16
16
|
|
17
|
-
|
18
|
-
@
|
17
|
+
@created_at = Date.parse(response["created"])
|
18
|
+
@analytics = Analytics.from_hash(response["analytics"])
|
19
|
+
@long_url = response["longUrl"]
|
19
20
|
end
|
20
21
|
alias_method :expand!, :decode!
|
21
22
|
|
data/readme.textile
CHANGED
@@ -9,6 +9,8 @@ h1. Google Url Shortener.
|
|
9
9
|
|
10
10
|
h2. Overview
|
11
11
|
|
12
|
+
Google URL Shortener is a library to compress and expand goo.gl URL's. It also provides an interface to review the analytics of a short URL.
|
13
|
+
|
12
14
|
|
13
15
|
|
14
16
|
h2. Installation
|
@@ -24,7 +26,7 @@ h2. Usage
|
|
24
26
|
|
25
27
|
h3. Setup
|
26
28
|
|
27
|
-
You need to provide an API to use the URL shortener service. To do this set the @api_key@ class variable:
|
29
|
+
You need to provide an API key to use the URL shortener service. To do this set the @api_key@ class variable:
|
28
30
|
|
29
31
|
pre. Google::UrlShortener::Base.api_key = "KEY"
|
30
32
|
|
@@ -54,6 +56,32 @@ Or the shorthand form:
|
|
54
56
|
pre. Google::UrlShortener.expand!("http://goo.gl/r5akx") # => http://blog.josh-nesbitt.net
|
55
57
|
|
56
58
|
|
59
|
+
h3. Getting more data from an expanded URL
|
60
|
+
|
61
|
+
More data is available from a URL once it's been expanded:
|
62
|
+
|
63
|
+
pre. url = Google::UrlShortener::Url.new(:short_url => "http://goo.gl/r5akx")
|
64
|
+
url.expand! # => http://blog.josh-nesbitt.net
|
65
|
+
url.created_at # => 2011-01-11
|
66
|
+
url.created_at.year # => 2011
|
67
|
+
url.analytics # => Google::UrlShortener::Analytics
|
68
|
+
url.analytics.all # => Google::UrlShortener::AnalyticsGroup
|
69
|
+
url.analytics.all.browsers # => { "Chrome" => 1 }
|
70
|
+
url.analytics.all.countries # => { "GB" => 1 }
|
71
|
+
url.analytics.all.platforms # => { "Macintosh" => 1 }
|
72
|
+
url.analytics.all.referrers # => { "Unknown/empty" => 1 }
|
73
|
+
url.analytics.all.long_url_clicks # => 23
|
74
|
+
url.analytics.all.short_url_clicks # => 3
|
75
|
+
|
76
|
+
Available scopes are:
|
77
|
+
|
78
|
+
pre. all
|
79
|
+
month
|
80
|
+
week
|
81
|
+
day
|
82
|
+
two_hours
|
83
|
+
|
84
|
+
E.g: @url.analytics.month@.
|
57
85
|
|
58
86
|
h2. Bugs
|
59
87
|
|
@@ -0,0 +1,101 @@
|
|
1
|
+
{
|
2
|
+
"kind": "urlshortener#url",
|
3
|
+
"id": "http://goo.gl/r5akx",
|
4
|
+
"longUrl": "http://blog.josh-nesbitt.net/",
|
5
|
+
"status": "OK",
|
6
|
+
"created": "2011-01-11T20:53:38.778+00:00",
|
7
|
+
"analytics": {
|
8
|
+
"allTime": {
|
9
|
+
"shortUrlClicks": "1",
|
10
|
+
"longUrlClicks": "1",
|
11
|
+
"referrers": [
|
12
|
+
{
|
13
|
+
"count": "1",
|
14
|
+
"id": "Unknown/empty"
|
15
|
+
}
|
16
|
+
],
|
17
|
+
"countries": [
|
18
|
+
{
|
19
|
+
"count": "1",
|
20
|
+
"id": "GB"
|
21
|
+
}
|
22
|
+
],
|
23
|
+
"browsers": [
|
24
|
+
{
|
25
|
+
"count": "1",
|
26
|
+
"id": "Chrome"
|
27
|
+
}
|
28
|
+
],
|
29
|
+
"platforms": [
|
30
|
+
{
|
31
|
+
"count": "1",
|
32
|
+
"id": "Macintosh"
|
33
|
+
}
|
34
|
+
]
|
35
|
+
},
|
36
|
+
"month": {
|
37
|
+
"shortUrlClicks": "1",
|
38
|
+
"longUrlClicks": "1",
|
39
|
+
"referrers": [
|
40
|
+
{
|
41
|
+
"count": "1",
|
42
|
+
"id": "Unknown/empty"
|
43
|
+
}
|
44
|
+
],
|
45
|
+
"countries": [
|
46
|
+
{
|
47
|
+
"count": "1",
|
48
|
+
"id": "GB"
|
49
|
+
}
|
50
|
+
],
|
51
|
+
"browsers": [
|
52
|
+
{
|
53
|
+
"count": "1",
|
54
|
+
"id": "Chrome"
|
55
|
+
}
|
56
|
+
],
|
57
|
+
"platforms": [
|
58
|
+
{
|
59
|
+
"count": "1",
|
60
|
+
"id": "Macintosh"
|
61
|
+
}
|
62
|
+
]
|
63
|
+
},
|
64
|
+
"week": {
|
65
|
+
"shortUrlClicks": "1",
|
66
|
+
"longUrlClicks": "1",
|
67
|
+
"referrers": [
|
68
|
+
{
|
69
|
+
"count": "1",
|
70
|
+
"id": "Unknown/empty"
|
71
|
+
}
|
72
|
+
],
|
73
|
+
"countries": [
|
74
|
+
{
|
75
|
+
"count": "1",
|
76
|
+
"id": "GB"
|
77
|
+
}
|
78
|
+
],
|
79
|
+
"browsers": [
|
80
|
+
{
|
81
|
+
"count": "1",
|
82
|
+
"id": "Chrome"
|
83
|
+
}
|
84
|
+
],
|
85
|
+
"platforms": [
|
86
|
+
{
|
87
|
+
"count": "1",
|
88
|
+
"id": "Macintosh"
|
89
|
+
}
|
90
|
+
]
|
91
|
+
},
|
92
|
+
"day": {
|
93
|
+
"shortUrlClicks": "0",
|
94
|
+
"longUrlClicks": "0"
|
95
|
+
},
|
96
|
+
"twoHours": {
|
97
|
+
"shortUrlClicks": "0",
|
98
|
+
"longUrlClicks": "0"
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module FakewebHelper
|
2
|
+
|
3
|
+
def stub_request(url, opts={})
|
4
|
+
method = opts[:method] || :get
|
5
|
+
fixture = opts[:fixture] || "Fakeweb request body"
|
6
|
+
body = begin
|
7
|
+
File.read(File.expand_path(File.dirname(__FILE__)) + "/../fixtures/#{fixture}.json")
|
8
|
+
rescue Errno::ENOENT
|
9
|
+
raise "Could not find fixture file named '#{fixture}'!"
|
10
|
+
end
|
11
|
+
|
12
|
+
FakeWeb.register_uri(method, url, :body => body)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Google
|
2
|
+
module UrlShortener
|
3
|
+
describe Analytics do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
stub_request(Google::UrlShortener::Request::BASE_URL + "?shortUrl=#{@short_url}&projection=FULL&key=#{@key}", :fixture => "expand")
|
7
|
+
url = Google::UrlShortener::Url.new(:short_url => @short_url)
|
8
|
+
url.expand!
|
9
|
+
|
10
|
+
@analytics = url.analytics
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should parse the analytics data correctly." do
|
14
|
+
@analytics.all.browsers.class.should == Hash
|
15
|
+
@analytics.all.referrers.class.should == Hash
|
16
|
+
@analytics.all.countries.class.should == Hash
|
17
|
+
@analytics.all.platforms.class.should == Hash
|
18
|
+
|
19
|
+
@analytics.all.browsers.should include("Chrome")
|
20
|
+
@analytics.all.referrers.should include("Unknown/empty")
|
21
|
+
@analytics.all.countries.should include("GB")
|
22
|
+
@analytics.all.platforms.should include("Macintosh")
|
23
|
+
|
24
|
+
@analytics.all.short_url_clicks.should == 1
|
25
|
+
@analytics.all.long_url_clicks.should == 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Google
|
2
|
+
module UrlShortener
|
3
|
+
describe Base do
|
4
|
+
|
5
|
+
it "should allow an API key to be set" do
|
6
|
+
key = "apikey"
|
7
|
+
Base.api_key = key
|
8
|
+
Base.api_key.should == key
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should allow a logger to be set" do
|
12
|
+
RestClient.log = nil
|
13
|
+
RestClient.log.should == nil
|
14
|
+
|
15
|
+
Base.log = $stdout
|
16
|
+
RestClient.log.should == $stdout
|
17
|
+
|
18
|
+
Base.log = nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Google
|
2
|
+
module UrlShortener
|
3
|
+
describe Url do
|
4
|
+
|
5
|
+
it "should have the correct attributes after shortening a URL" do
|
6
|
+
stub_request(Google::UrlShortener::Request::BASE_URL, :method => :post, :fixture => "shorten")
|
7
|
+
|
8
|
+
url = Google::UrlShortener::Url.new(:long_url => @long_url)
|
9
|
+
url.shorten!
|
10
|
+
|
11
|
+
url.long_url.should == @long_url
|
12
|
+
url.short_url.should == @short_url
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have the correct attributes after expanding a URL" do
|
16
|
+
stub_request(Google::UrlShortener::Request::BASE_URL + "?shortUrl=#{@short_url}&projection=FULL&key=#{@key}", :fixture => "expand")
|
17
|
+
|
18
|
+
url = Google::UrlShortener::Url.new(:short_url => @short_url)
|
19
|
+
url.expand!
|
20
|
+
|
21
|
+
url.long_url.should == @long_url
|
22
|
+
url.short_url.should == @short_url
|
23
|
+
url.created_at.year.should == 2011
|
24
|
+
url.created_at.month.should == 01
|
25
|
+
url.created_at.day.should == 11
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Google
|
2
|
+
describe UrlShortener do
|
3
|
+
|
4
|
+
it "should shorten a URL" do
|
5
|
+
stub_request(Google::UrlShortener::Request::BASE_URL, :method => :post, :fixture => "shorten")
|
6
|
+
|
7
|
+
url = UrlShortener.shorten!(@long_url)
|
8
|
+
url.should == @short_url
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should expand a URL" do
|
12
|
+
stub_request(Google::UrlShortener::Request::BASE_URL + "?shortUrl=#{@short_url}&projection=FULL&key=#{@key}", :fixture => "expand")
|
13
|
+
|
14
|
+
url = UrlShortener.expand!(@short_url)
|
15
|
+
url.should == @long_url
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
Dir[File.dirname(__FILE__) + "/helpers/*"].each { |f| require(f) }
|
4
|
+
require 'google_url_shortener'
|
5
|
+
require 'fakeweb'
|
6
|
+
require 'spec'
|
7
|
+
include FakewebHelper
|
8
|
+
|
9
|
+
Spec::Runner.configure do |config|
|
10
|
+
|
11
|
+
config.before(:all) do
|
12
|
+
Google::UrlShortener::Base.api_key = "TESTKEY"
|
13
|
+
@key = Google::UrlShortener::Base.api_key
|
14
|
+
@short_url = "http://goo.gl/r5akx"
|
15
|
+
@long_url = "http://blog.josh-nesbitt.net/"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/spec/watch.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# A simple alternative to autotest that isnt painful
|
2
|
+
|
3
|
+
options = {
|
4
|
+
:options => "--require '#{File.expand_path(File.dirname(__FILE__)) + "/spec_helper"}' --format nested --color",
|
5
|
+
:binary => "spec"
|
6
|
+
}
|
7
|
+
|
8
|
+
watch("(lib|spec)/(.*)\.rb") do |match|
|
9
|
+
puts %x[ clear ]
|
10
|
+
|
11
|
+
file = match[match.size - 1]
|
12
|
+
opts = options[:options]
|
13
|
+
binary = options[:binary]
|
14
|
+
|
15
|
+
files = []
|
16
|
+
|
17
|
+
["spec/lib/*.rb", "spec/lib/*/*.rb"].each do |glob|
|
18
|
+
Dir.glob(glob).each { |f| files << f }
|
19
|
+
end
|
20
|
+
|
21
|
+
puts "Found:"
|
22
|
+
files.each { |f| puts "+ #{f}" }
|
23
|
+
puts ""
|
24
|
+
command = "#{binary} #{files.collect! { |f| File.expand_path(f) }.join(" ")} #{opts}"
|
25
|
+
|
26
|
+
system(command)
|
27
|
+
|
28
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_url_shortener
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 25
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Josh Nesbitt
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - "="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 11
|
30
28
|
segments:
|
31
29
|
- 1
|
32
30
|
- 4
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - "="
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 13
|
46
43
|
segments:
|
47
44
|
- 1
|
48
45
|
- 6
|
@@ -58,7 +55,6 @@ dependencies:
|
|
58
55
|
requirements:
|
59
56
|
- - ">="
|
60
57
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 23
|
62
58
|
segments:
|
63
59
|
- 1
|
64
60
|
- 0
|
@@ -66,7 +62,7 @@ dependencies:
|
|
66
62
|
version: 1.0.0
|
67
63
|
type: :development
|
68
64
|
version_requirements: *id003
|
69
|
-
description: Google URL Shortener is a library to compress and expand goo.gl URL's. It also provides an interface to
|
65
|
+
description: Google URL Shortener is a library to compress and expand goo.gl URL's. It also provides an interface to review the analytics of a short URL.
|
70
66
|
email:
|
71
67
|
- josh@josh-nesbitt.net
|
72
68
|
executables: []
|
@@ -84,12 +80,23 @@ files:
|
|
84
80
|
- google_url_shortener.gemspec
|
85
81
|
- lib/google/url_shortener.rb
|
86
82
|
- lib/google/url_shortener/analytics.rb
|
83
|
+
- lib/google/url_shortener/analytics_group.rb
|
87
84
|
- lib/google/url_shortener/base.rb
|
85
|
+
- lib/google/url_shortener/errors.rb
|
88
86
|
- lib/google/url_shortener/request.rb
|
89
87
|
- lib/google/url_shortener/url.rb
|
90
88
|
- lib/google/url_shortener/version.rb
|
91
89
|
- lib/google_url_shortener.rb
|
92
90
|
- readme.textile
|
91
|
+
- spec/fixtures/expand.json
|
92
|
+
- spec/fixtures/shorten.json
|
93
|
+
- spec/helpers/fakeweb.rb
|
94
|
+
- spec/lib/google/analytics_spec.rb
|
95
|
+
- spec/lib/google/base_spec.rb
|
96
|
+
- spec/lib/google/url_spec.rb
|
97
|
+
- spec/lib/url_shortener_spec.rb
|
98
|
+
- spec/spec_helper.rb
|
99
|
+
- spec/watch.rb
|
93
100
|
has_rdoc: true
|
94
101
|
homepage: http://rubygems.org/gems/google_url_shortener
|
95
102
|
licenses: []
|
@@ -104,7 +111,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
111
|
requirements:
|
105
112
|
- - ">="
|
106
113
|
- !ruby/object:Gem::Version
|
107
|
-
hash: 3
|
108
114
|
segments:
|
109
115
|
- 0
|
110
116
|
version: "0"
|
@@ -113,7 +119,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
119
|
requirements:
|
114
120
|
- - ">="
|
115
121
|
- !ruby/object:Gem::Version
|
116
|
-
hash: 23
|
117
122
|
segments:
|
118
123
|
- 1
|
119
124
|
- 3
|