url_shortener 0.0.4 → 0.0.5
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/History.txt +10 -0
- data/Manifest.txt +2 -0
- data/README.rdoc +0 -1
- data/lib/url_shortener.rb +3 -1
- data/lib/url_shortener/client.rb +1 -1
- data/lib/url_shortener/response.rb +2 -1
- data/lib/url_shortener/response/stats.rb +69 -0
- data/spec/url_shortener/client_spec.rb +4 -0
- data/spec/url_shortener/response/stats_spec.rb +172 -0
- data/spec/url_shortener/response_spec.rb +16 -4
- metadata +15 -3
data/History.txt
CHANGED
@@ -28,3 +28,13 @@
|
|
28
28
|
* other api call methods now return a UrlShortener::Response object
|
29
29
|
These changes are introduced to return the api call results in a flexible manner and provide more flexibility for manipulating result output
|
30
30
|
|
31
|
+
=== 0.0.5 2009-11-17
|
32
|
+
|
33
|
+
* 3 additions:
|
34
|
+
* adds Hashie for convert hashe keys to method calls
|
35
|
+
* adds UrlShortener::Response::Stats
|
36
|
+
* adds some convenience methods to the returned results for stats
|
37
|
+
|
38
|
+
* 1 changes:
|
39
|
+
* api call method UrlShortener::Client#stats now returns a UrlShortener::Response::Stats object
|
40
|
+
|
data/Manifest.txt
CHANGED
@@ -9,6 +9,7 @@ lib/url_shortener/interface.rb
|
|
9
9
|
lib/url_shortener/response.rb
|
10
10
|
lib/url_shortener/response/shorten.rb
|
11
11
|
lib/url_shortener/response/expand.rb
|
12
|
+
lib/url_shortener/response/stats.rb
|
12
13
|
spec/spec_helper.rb
|
13
14
|
spec/url_shortener/authorize_spec.rb
|
14
15
|
spec/url_shortener/client_spec.rb
|
@@ -16,6 +17,7 @@ spec/url_shortener/interface_spec.rb
|
|
16
17
|
spec/url_shortener/response_spec.rb
|
17
18
|
spec/url_shortener/response/shorten_spec.rb
|
18
19
|
spec/url_shortener/response/expand_spec.rb
|
20
|
+
spec/url_shortener/response/stats_spec.rb
|
19
21
|
features/request_failure.feature
|
20
22
|
features/api_calls.feature
|
21
23
|
features/support/env.rb
|
data/README.rdoc
CHANGED
@@ -67,7 +67,6 @@ To use the url_shortener gem you need a bit.ly login and Api key.
|
|
67
67
|
|
68
68
|
stats = client.stats(:hash => '1RmnUT') # => UrlShortener::Response object
|
69
69
|
stats.result # => returns a hash of all data returned from bitly
|
70
|
-
#TODO: ADD convenience methods for stats
|
71
70
|
|
72
71
|
===To get url info
|
73
72
|
|
data/lib/url_shortener.rb
CHANGED
@@ -4,10 +4,12 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'httparty'
|
6
6
|
require 'cgi'
|
7
|
+
require 'hashie'
|
7
8
|
require 'url_shortener/error.rb'
|
8
9
|
require 'url_shortener/authorize.rb'
|
9
10
|
require 'url_shortener/client.rb'
|
10
11
|
require 'url_shortener/interface.rb'
|
11
12
|
require 'url_shortener/response.rb'
|
12
13
|
require 'url_shortener/response/shorten.rb'
|
13
|
-
require 'url_shortener/response/expand.rb'
|
14
|
+
require 'url_shortener/response/expand.rb'
|
15
|
+
require 'url_shortener/response/stats.rb'
|
data/lib/url_shortener/client.rb
CHANGED
@@ -33,7 +33,7 @@ module UrlShortener
|
|
33
33
|
def stats(option)
|
34
34
|
check_request_parameters(option)
|
35
35
|
response = interface(nil, endpoint_with_options('stats',option)).get
|
36
|
-
UrlShortener::Response.new(response)
|
36
|
+
UrlShortener::Response::Stats.new(response)
|
37
37
|
end
|
38
38
|
|
39
39
|
def info(option)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module UrlShortener
|
2
|
+
class Response::Stats < UrlShortener::Response
|
3
|
+
|
4
|
+
def initialize(response)
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def clicks
|
9
|
+
attributes.clicks
|
10
|
+
end
|
11
|
+
|
12
|
+
def user_clicks
|
13
|
+
attributes.userClicks
|
14
|
+
end
|
15
|
+
|
16
|
+
def referrers
|
17
|
+
find_referrers
|
18
|
+
end
|
19
|
+
|
20
|
+
def user_referrers
|
21
|
+
find_referrers(true)
|
22
|
+
end
|
23
|
+
|
24
|
+
# There are user referrers and only referrers
|
25
|
+
def find_referrers(user_referrers=false)
|
26
|
+
return unless referrer_data?
|
27
|
+
base_referrer = user_referrers ? attributes.userReferrers : attributes.referrers
|
28
|
+
return unless base_referrer
|
29
|
+
referrer_values(base_referrer)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def referrer_values(base_referrer)
|
35
|
+
collect_referrers = []
|
36
|
+
base_referrer.nodeKeyVal.each { |base| collect_referrers << full_referrer_urls(base) if node_key?(base) }
|
37
|
+
collect_referrers.flatten
|
38
|
+
end
|
39
|
+
|
40
|
+
def full_referrer_urls(base)
|
41
|
+
return unless node_key?(base)
|
42
|
+
resources = base.nodeKeyVal.is_a?(Array) ? base.nodeKeyVal.collect{|node| node.nodeKey} : base.nodeKeyVal.nodeKey
|
43
|
+
referrer_urls(base.nodeKey, resources)
|
44
|
+
end
|
45
|
+
|
46
|
+
def node_key?(base)
|
47
|
+
!(base.nil? || base.nodeKeyVal.nil?)
|
48
|
+
end
|
49
|
+
|
50
|
+
def attributes_present?
|
51
|
+
!(attributes.nil? || attributes.empty?)
|
52
|
+
end
|
53
|
+
|
54
|
+
def referrers_present?(another_attr=nil)
|
55
|
+
return !(attributes.referrers.nil? || attributes.referrers.empty?) unless another_attr
|
56
|
+
!(attributes.send(:another_attr).nil? || attributes.send(:another_attr).empty?)
|
57
|
+
end
|
58
|
+
|
59
|
+
def referrer_data?
|
60
|
+
attributes_present? && referrers_present?
|
61
|
+
end
|
62
|
+
|
63
|
+
def referrer_urls(base_url, resources)
|
64
|
+
return base_url unless resources
|
65
|
+
resources.collect { |resource| "#{base_url}#{resource}" }
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -153,6 +153,10 @@ describe UrlShortener::Client do
|
|
153
153
|
@interface.should_receive(:get)
|
154
154
|
@client.stats(:hash => @hash)
|
155
155
|
end
|
156
|
+
|
157
|
+
it "should return the UrlShortener::Response::Stats object" do
|
158
|
+
@client.stats(:hash => @hash).should be_instance_of(UrlShortener::Response::Stats)
|
159
|
+
end
|
156
160
|
end
|
157
161
|
|
158
162
|
describe "#info" do
|
@@ -0,0 +1,172 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe UrlShortener::Response::Stats do
|
4
|
+
|
5
|
+
describe "#clicks" do
|
6
|
+
before(:each) do
|
7
|
+
@hashie = stub('Hashie::Mash')
|
8
|
+
@response = {:referrers => {:key => :val}, :clicks => '23'}
|
9
|
+
@stats = UrlShortener::Response::Stats.new(@response)
|
10
|
+
@stats.stub!(:attributes).and_return(@hashie)
|
11
|
+
@hashie.stub!(:clicks)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should get the hash attributes" do
|
15
|
+
@stats.should_receive(:attributes).and_return(@hashie)
|
16
|
+
@stats.clicks
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should get the clicks from the hash attributes" do
|
20
|
+
@hashie.should_receive(:clicks)
|
21
|
+
@stats.clicks
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return nil when response is empty" do
|
25
|
+
response = {}
|
26
|
+
@stats = UrlShortener::Response::Stats.new(response)
|
27
|
+
@stats.clicks.should eql(nil)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#user_clicks" do
|
32
|
+
before(:each) do
|
33
|
+
@hashie = stub('Hashie::Mash')
|
34
|
+
@response = {:referrers => {:key => :val}, :clicks => '23', :userClicks => '233'}
|
35
|
+
@stats = UrlShortener::Response::Stats.new(@response)
|
36
|
+
@stats.stub!(:attributes).and_return(@hashie)
|
37
|
+
@hashie.stub!(:userClicks).and_return('233')
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should get the hash attributes" do
|
41
|
+
@stats.should_receive(:attributes).and_return(@hashie)
|
42
|
+
@stats.user_clicks
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should get the user clicks from the hash attributes" do
|
46
|
+
@hashie.should_receive(:userClicks)
|
47
|
+
@stats.user_clicks
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return userClicks" do
|
51
|
+
@stats.user_clicks.should eql('233')
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should return nil when response is empty" do
|
55
|
+
response = {}
|
56
|
+
@stats = UrlShortener::Response::Stats.new(response)
|
57
|
+
@stats.user_clicks.should eql(nil)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#referrers" do
|
62
|
+
before(:each) do
|
63
|
+
@response = {:referrers => {:nodeKeyVal => {:nodeKey => 'val'}}}
|
64
|
+
@stats = UrlShortener::Response::Stats.new(@response) end
|
65
|
+
|
66
|
+
it "should get the hash attributes" do
|
67
|
+
@stats.should_receive(:find_referrers)
|
68
|
+
@stats.referrers
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#user_referrers" do
|
74
|
+
before(:each) do
|
75
|
+
@response = {:referrers => {:nodeKeyVal => {:nodeKey => 'val'}}}
|
76
|
+
@stats = UrlShortener::Response::Stats.new(@response)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should get the hash attributes" do
|
80
|
+
@stats.should_receive(:find_referrers).with(true)
|
81
|
+
@stats.user_referrers
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#find_referrers" do
|
87
|
+
before(:each) do
|
88
|
+
@response = {:referrers => {:nodeKeyVal => {:nodeKey => 'val'}}}
|
89
|
+
@stats = UrlShortener::Response::Stats.new(@response)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should check if referrer data is present " do
|
93
|
+
@stats.should_receive(:referrer_data?)
|
94
|
+
@stats.find_referrers
|
95
|
+
end
|
96
|
+
|
97
|
+
context "when no referrer data present" do
|
98
|
+
before(:each) do
|
99
|
+
@stats.stub!(:referrer_data?)
|
100
|
+
end
|
101
|
+
it "should return nil" do
|
102
|
+
@stats.find_referrers.should eql(nil)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should try to find the attributes" do
|
106
|
+
@stats.should_receive(:attributes).never
|
107
|
+
@stats.find_referrers
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should not try to get the referrer values" do
|
111
|
+
@stats.should_receive(:referrer_values).never
|
112
|
+
@stats.find_referrers
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context "when referrer data is present but referrer element is not" do
|
117
|
+
before(:each) do
|
118
|
+
@hashie = stub('Hashie::Mash')
|
119
|
+
@stats.stub!(:referrer_data?).and_return(true)
|
120
|
+
@stats.stub!(:attributes).and_return(@hashie)
|
121
|
+
@hashie.stub!(:referrers)
|
122
|
+
@hashie.stub!(:userReferrers)
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should find the attributes" do
|
126
|
+
@stats.should_receive(:attributes).times.at_least(1)
|
127
|
+
@stats.find_referrers
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should get referrers if true is not passed in parameter for user referrers" do
|
131
|
+
@hashie.should_receive(:referrers)
|
132
|
+
@stats.find_referrers
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should not get user referrers if true is not passed in parameter for user referrers" do
|
136
|
+
@hashie.should_receive(:userReferrers).never
|
137
|
+
@stats.find_referrers
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should get user referrers if true is passed in parameter for user referrers" do
|
141
|
+
@hashie.should_receive(:userReferrers)
|
142
|
+
@stats.find_referrers(true)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should not get referrers if true is passed in parameter for user referrers" do
|
146
|
+
@hashie.should_receive(:referrers).never
|
147
|
+
@stats.find_referrers(true)
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should not get referrer values when referrers are not present" do
|
151
|
+
@stats.should_receive(:referrer_values).never
|
152
|
+
@stats.find_referrers
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
context "when both referrer data referrer element is present" do
|
157
|
+
before(:each) do
|
158
|
+
@hashie = stub('Hashie::Mash')
|
159
|
+
@stats.stub!(:referrer_data?).and_return(true)
|
160
|
+
@stats.stub!(:attributes).and_return(@hashie)
|
161
|
+
@hashie.stub!(:referrers).and_return(@hashie)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should get referrer values when referrers are present" do
|
165
|
+
@stats.should_receive(:referrer_values).with(@hashie)
|
166
|
+
@stats.find_referrers
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
@@ -4,12 +4,24 @@ describe UrlShortener::Response do
|
|
4
4
|
|
5
5
|
describe ".new" do
|
6
6
|
before(:each) do
|
7
|
-
@
|
7
|
+
@response_hash = {:a_key => 'value'}
|
8
|
+
@attribute = stub('Hashie::Mash')
|
9
|
+
Hashie::Mash.stub!(:new).and_return(@attribute)
|
10
|
+
@response = UrlShortener::Response.new(@response_hash)
|
8
11
|
end
|
9
12
|
|
10
|
-
it "should set the result
|
11
|
-
response
|
12
|
-
|
13
|
+
it "should set the result method" do
|
14
|
+
@response.result.should eql(@response_hash)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should set the attrubutes" do
|
18
|
+
@response.attributes.should eql(@attribute)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should initialize a new Hashie::Mash attribute" do
|
22
|
+
Hashie::Mash.should_receive(:new).with(@response_hash)
|
23
|
+
@response.attributes
|
24
|
+
UrlShortener::Response.new(@response_hash)
|
13
25
|
end
|
14
26
|
end
|
15
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: url_shortener
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nasir Jamal
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-17 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -18,10 +18,20 @@ dependencies:
|
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- - "
|
21
|
+
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.4.5
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hashie
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.4
|
34
|
+
version:
|
25
35
|
description: Url Shortener is a Ruby library / gem and API wrapper for bit.ly to shorten/expand the urls and retrieve other information about them.
|
26
36
|
email: nas35_in@yahoo.com
|
27
37
|
executables: []
|
@@ -42,6 +52,7 @@ files:
|
|
42
52
|
- lib/url_shortener/response.rb
|
43
53
|
- lib/url_shortener/response/shorten.rb
|
44
54
|
- lib/url_shortener/response/expand.rb
|
55
|
+
- lib/url_shortener/response/stats.rb
|
45
56
|
has_rdoc: true
|
46
57
|
homepage: http://github.com/nas/url_shortener
|
47
58
|
licenses: []
|
@@ -78,6 +89,7 @@ test_files:
|
|
78
89
|
- spec/url_shortener/response_spec.rb
|
79
90
|
- spec/url_shortener/response/shorten_spec.rb
|
80
91
|
- spec/url_shortener/response/expand_spec.rb
|
92
|
+
- spec/url_shortener/response/stats_spec.rb
|
81
93
|
- features/api_calls.feature
|
82
94
|
- features/request_failure.feature
|
83
95
|
- features/support/env.rb
|