vigetlabs-garb 0.1.2
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 +0 -0
- data/README.md +168 -0
- data/Rakefile +26 -0
- data/garb.gemspec +42 -0
- data/lib/extensions/happymapper.rb +67 -0
- data/lib/extensions/operator.rb +20 -0
- data/lib/extensions/string.rb +13 -0
- data/lib/extensions/symbol.rb +36 -0
- data/lib/garb/authentication_request.rb +46 -0
- data/lib/garb/data_request.rb +28 -0
- data/lib/garb/profile.rb +45 -0
- data/lib/garb/report.rb +211 -0
- data/lib/garb/report_parameter.rb +36 -0
- data/lib/garb/report_response.rb +56 -0
- data/lib/garb/session.rb +19 -0
- data/lib/garb.rb +67 -0
- data/test/authentication_request_test.rb +91 -0
- data/test/data_request_test.rb +52 -0
- data/test/fixtures/profile_feed.xml +33 -0
- data/test/fixtures/report_feed.xml +46 -0
- data/test/garb_test.rb +9 -0
- data/test/operator_test.rb +37 -0
- data/test/profile_test.rb +58 -0
- data/test/report_parameter_test.rb +55 -0
- data/test/report_response_test.rb +24 -0
- data/test/report_test.rb +124 -0
- data/test/session_test.rb +26 -0
- data/test/symbol_test.rb +44 -0
- data/test/test_helper.rb +13 -0
- metadata +99 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class ProfileTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "The Profile class" do
|
7
|
+
|
8
|
+
should "be able to return a list of all profiles" do
|
9
|
+
Session.stubs(:email).with().returns('user@host.com')
|
10
|
+
|
11
|
+
url = 'https://www.google.com/analytics/feeds/accounts/user@host.com'
|
12
|
+
|
13
|
+
xml = read_fixture('profile_feed.xml')
|
14
|
+
|
15
|
+
data_request = mock
|
16
|
+
data_request.expects(:send_request).with().returns(stub(:body => xml))
|
17
|
+
|
18
|
+
DataRequest.expects(:new).with(url).returns(data_request)
|
19
|
+
|
20
|
+
entries = [stub]
|
21
|
+
|
22
|
+
Profile::Entry.expects(:parse).with(xml).returns(entries)
|
23
|
+
|
24
|
+
profiles = []
|
25
|
+
entries.each do |entry|
|
26
|
+
profile = stub
|
27
|
+
profiles << profile
|
28
|
+
Garb::Profile.expects(:new).with(entry).returns(profile)
|
29
|
+
end
|
30
|
+
|
31
|
+
assert_equal profiles, Profile.all
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
context "An instance of the Profile class" do
|
37
|
+
|
38
|
+
setup do
|
39
|
+
@entry = (Profile::Entry.parse(read_fixture('profile_feed.xml'))).first
|
40
|
+
@profile = Profile.new(@entry)
|
41
|
+
end
|
42
|
+
|
43
|
+
should "have a value for :title" do
|
44
|
+
assert_equal "Historical", @profile.title
|
45
|
+
end
|
46
|
+
|
47
|
+
should "have a value for :table_id" do
|
48
|
+
assert_equal 'ga:12345', @profile.table_id
|
49
|
+
end
|
50
|
+
|
51
|
+
should "have a value for :id" do
|
52
|
+
assert_equal '12345', @profile.id
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class ReportParameterTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "An instance of the ReportParameter class" do
|
7
|
+
setup do
|
8
|
+
@metrics = ReportParameter.new(:metrics)
|
9
|
+
end
|
10
|
+
|
11
|
+
should "have a name" do
|
12
|
+
assert_equal "metrics", @metrics.name
|
13
|
+
end
|
14
|
+
|
15
|
+
should "have a list of elements" do
|
16
|
+
assert_equal [], @metrics.elements
|
17
|
+
end
|
18
|
+
|
19
|
+
should "be able to add new elements" do
|
20
|
+
assert_equal(@metrics, @metrics << :request_uri)
|
21
|
+
assert_equal [:request_uri], @metrics.elements
|
22
|
+
end
|
23
|
+
|
24
|
+
should "merge an array of elements" do
|
25
|
+
assert_equal(@metrics, @metrics << [:request_uri])
|
26
|
+
assert_equal [:request_uri], @metrics.elements
|
27
|
+
end
|
28
|
+
|
29
|
+
context "converting to params" do
|
30
|
+
should "be able to format the parameters into strings" do
|
31
|
+
@metrics << :request_uri
|
32
|
+
assert_equal({'metrics' => 'ga:requestUri'}, @metrics.to_params)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "join multiple symbol elements" do
|
36
|
+
@metrics << :request_uri << :city
|
37
|
+
assert_equal({'metrics' => 'ga:requestUri,ga:city'}, @metrics.to_params)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "join operator elements" do
|
41
|
+
@metrics << :city.desc
|
42
|
+
assert_equal({'metrics' => '-ga:city'}, @metrics.to_params)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "parameterize hash operators and join elements" do
|
46
|
+
@metrics << {:city.eql => 'New York'}
|
47
|
+
params = {'metrics' => 'ga:city%3D%3DNew+York'}
|
48
|
+
|
49
|
+
assert_equal params, @metrics.to_params
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class ReportResponseTest < Test::Unit::TestCase
|
5
|
+
context "An instance of the ReportResponse class" do
|
6
|
+
setup do
|
7
|
+
@xml = File.read(File.dirname(__FILE__) + "/fixtures/report_feed.xml")
|
8
|
+
@response = ReportResponse.new(@xml)
|
9
|
+
end
|
10
|
+
|
11
|
+
should "parse xml response with happymapper" do
|
12
|
+
h1 = {"city"=>"(not set)", "pageviews"=>"33", "country"=>"(not set)"}
|
13
|
+
h2 = {"city"=>"Kabul", "pageviews"=>"2", "country"=>"Afghanistan"}
|
14
|
+
h3 = {"city"=>"Tirana", "pageviews"=>"1", "country"=>"Albania"}
|
15
|
+
|
16
|
+
OpenStruct.expects(:new).with(h1).returns('entry1')
|
17
|
+
OpenStruct.expects(:new).with(h2).returns('entry2')
|
18
|
+
OpenStruct.expects(:new).with(h3).returns('entry3')
|
19
|
+
|
20
|
+
assert_equal(['entry1', 'entry2', 'entry3'], @response.parse)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/report_test.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class ReportTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "An instance of the Report class" do
|
7
|
+
setup do
|
8
|
+
@now = Time.now
|
9
|
+
Time.stubs(:now).returns(@now)
|
10
|
+
@profile = stub(:table_id => 'ga:1234')
|
11
|
+
@report = Report.new(@profile)
|
12
|
+
end
|
13
|
+
|
14
|
+
%w(metrics dimensions sort filters).each do |param|
|
15
|
+
should "have parameters for #{param}" do
|
16
|
+
assert @report.send(:"#{param}").is_a?(ReportParameter)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
should "have a start_date" do
|
21
|
+
report = Report.new(@profile, :start_date => @now)
|
22
|
+
assert_equal @now, report.start_date
|
23
|
+
end
|
24
|
+
|
25
|
+
should "have a default start_date of one month ago" do
|
26
|
+
month_ago = @now - Report::MONTH
|
27
|
+
assert_equal month_ago, @report.start_date
|
28
|
+
end
|
29
|
+
|
30
|
+
should "have an end_date" do
|
31
|
+
report = Report.new(@profile, :end_date => @now)
|
32
|
+
assert_equal @now, report.end_date
|
33
|
+
end
|
34
|
+
|
35
|
+
should "have a default end_date of now" do
|
36
|
+
assert_equal @now, @report.end_date
|
37
|
+
end
|
38
|
+
|
39
|
+
should "have max results if set" do
|
40
|
+
@report.max_results = 5
|
41
|
+
assert_equal({'max-results' => 5}, @report.page_params)
|
42
|
+
end
|
43
|
+
|
44
|
+
should "have an empty hash if max results not set" do
|
45
|
+
assert_equal({}, @report.page_params)
|
46
|
+
end
|
47
|
+
|
48
|
+
should "have a profile" do
|
49
|
+
assert_equal @profile, @report.profile
|
50
|
+
end
|
51
|
+
|
52
|
+
should "return default params with no options" do
|
53
|
+
Report.expects(:format_time).with(@report.start_date).returns('start')
|
54
|
+
Report.expects(:format_time).with(@report.end_date).returns('end')
|
55
|
+
|
56
|
+
params = {'ids' => 'ga:1234', 'start-date' => 'start', 'end-date' => 'end'}
|
57
|
+
assert_equal params, @report.default_params
|
58
|
+
end
|
59
|
+
|
60
|
+
should "combine parameters for request" do
|
61
|
+
@report.sort.expects(:to_params).returns({'sort' => 'value'})
|
62
|
+
@report.filters.expects(:to_params).returns({'filters' => 'value'})
|
63
|
+
@report.metrics.expects(:to_params).returns({'metrics' => 'value'})
|
64
|
+
@report.dimensions.expects(:to_params).returns({'dimensions' => 'value'})
|
65
|
+
|
66
|
+
@report.expects(:page_params).returns({})
|
67
|
+
@report.expects(:default_params).returns({'ids' => 'ga:1234'})
|
68
|
+
|
69
|
+
params = {'ids' => 'ga:1234', 'metrics' => 'value', 'dimensions' => 'value', 'sort' => 'value', 'filters' => 'value'}
|
70
|
+
|
71
|
+
assert_equal params, @report.params
|
72
|
+
end
|
73
|
+
|
74
|
+
should "send a request and get the response body" do
|
75
|
+
response = stub(:body => 'feed')
|
76
|
+
data_request = mock
|
77
|
+
data_request.expects(:send_request).with().returns(response)
|
78
|
+
|
79
|
+
@report.stubs(:params).returns({'key' => 'value'})
|
80
|
+
DataRequest.expects(:new).with(Report::URL, {'key' => 'value'}).returns(data_request)
|
81
|
+
|
82
|
+
assert_equal 'feed', @report.send_request_for_body
|
83
|
+
end
|
84
|
+
|
85
|
+
should "fetch and parse all entries" do
|
86
|
+
@report.expects(:send_request_for_body).with().returns('xml')
|
87
|
+
ReportResponse.expects(:new).with('xml').returns(mock(:parse => ['entry']))
|
88
|
+
assert_equal ['entry'], @report.all
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "The Report class" do
|
93
|
+
|
94
|
+
# should "get the value for a given entry and property" do
|
95
|
+
# # entry = mock do |m|
|
96
|
+
# # m.expects(:/).with().returns(['balding'])
|
97
|
+
# # end
|
98
|
+
# # assert_equal 'balding', Report.property_value(entry, Report.element_id(:balding))
|
99
|
+
# end
|
100
|
+
#
|
101
|
+
# should "get the values for a given entry and array of properties" do
|
102
|
+
# entry = stub
|
103
|
+
# Report.stubs(:property_value).with(entry, "balding").returns('balding')
|
104
|
+
# Report.stubs(:property_value).with(entry, "spaulding").returns('spaulding')
|
105
|
+
#
|
106
|
+
# data = Report.property_values(entry, [:balding, :spaulding])
|
107
|
+
# assert_equal 'balding', data.balding
|
108
|
+
# assert_equal 'spaulding', data.spaulding
|
109
|
+
# end
|
110
|
+
#
|
111
|
+
# should "return an ostruct for an entry" do
|
112
|
+
# entry = stub
|
113
|
+
# Report.stubs(:property_value).with(entry, "balding").returns('balding')
|
114
|
+
# assert_equal true, Report.property_values(entry, [:balding]).is_a?(OpenStruct)
|
115
|
+
# end
|
116
|
+
|
117
|
+
should "format time" do
|
118
|
+
t = Time.now
|
119
|
+
assert_equal t.strftime('%Y-%m-%d'), Report.format_time(t)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class SessionTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "The Session class" do
|
7
|
+
|
8
|
+
should "be able retrieve an auth_token for a user" do
|
9
|
+
auth_request = mock {|m| m.expects(:auth_token).with().returns('toke') }
|
10
|
+
AuthenticationRequest.expects(:new).with('email', 'password').returns(auth_request)
|
11
|
+
|
12
|
+
Session.login('email', 'password')
|
13
|
+
assert_equal 'toke', Session.auth_token
|
14
|
+
end
|
15
|
+
|
16
|
+
should "retain the email address for this session" do
|
17
|
+
AuthenticationRequest.stubs(:new).returns(stub(:auth_token => 'toke'))
|
18
|
+
|
19
|
+
Session.login('email', 'password')
|
20
|
+
assert_equal 'email', Session.email
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/test/symbol_test.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class SymbolTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "An instance of the Symbol class" do
|
6
|
+
|
7
|
+
should "properly format itself for ga" do
|
8
|
+
assert_equal "ga:requestUri", :request_uri.to_ga
|
9
|
+
end
|
10
|
+
|
11
|
+
should "define a :desc operator" do
|
12
|
+
operator = stub()
|
13
|
+
symbol = :foo
|
14
|
+
|
15
|
+
Operator.expects(:new).with(:foo, '-', true).returns(operator)
|
16
|
+
assert_equal operator, :foo.desc
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.should_define_operator(operators)
|
20
|
+
operators.each do |method, operator|
|
21
|
+
should "define an :#{method} operator" do
|
22
|
+
new_operator = stub()
|
23
|
+
symbol = :foo
|
24
|
+
|
25
|
+
Operator.expects(:new).with(:foo, operator).returns(new_operator)
|
26
|
+
assert_equal new_operator, :foo.send(method)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
should_define_operator :eql => '==',
|
32
|
+
:not_eql => '!=',
|
33
|
+
:gt => '>',
|
34
|
+
:gte => '>=',
|
35
|
+
:lt => '<',
|
36
|
+
:lte => '<=',
|
37
|
+
:matches => '==',
|
38
|
+
:does_not_match => '!=',
|
39
|
+
:contains => '=~',
|
40
|
+
:does_not_contain => '!~',
|
41
|
+
:substring => '=@',
|
42
|
+
:not_substring => '!@'
|
43
|
+
end
|
44
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vigetlabs-garb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tony Pitale
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-04-22 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: jnunemaker-happymapper
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.2.2
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: libxml-ruby
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.8
|
34
|
+
version:
|
35
|
+
description: A ruby gem to aid in the use of the Google Analytics API
|
36
|
+
email: tony.pitale@viget.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- History.txt
|
45
|
+
- README.md
|
46
|
+
- Rakefile
|
47
|
+
- garb.gemspec
|
48
|
+
- lib/garb.rb
|
49
|
+
- lib/garb/authentication_request.rb
|
50
|
+
- lib/garb/data_request.rb
|
51
|
+
- lib/garb/profile.rb
|
52
|
+
- lib/garb/report.rb
|
53
|
+
- lib/garb/report_parameter.rb
|
54
|
+
- lib/garb/report_response.rb
|
55
|
+
- lib/garb/session.rb
|
56
|
+
- lib/extensions/symbol.rb
|
57
|
+
- lib/extensions/string.rb
|
58
|
+
- lib/extensions/operator.rb
|
59
|
+
- lib/extensions/happymapper.rb
|
60
|
+
has_rdoc: false
|
61
|
+
homepage: http://github.com/vigetlabs/garb
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
78
|
+
version:
|
79
|
+
requirements: []
|
80
|
+
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.2.0
|
83
|
+
signing_key:
|
84
|
+
specification_version: 2
|
85
|
+
summary: Google Analytics API Ruby Wrapper
|
86
|
+
test_files:
|
87
|
+
- test/authentication_request_test.rb
|
88
|
+
- test/data_request_test.rb
|
89
|
+
- test/garb_test.rb
|
90
|
+
- test/operator_test.rb
|
91
|
+
- test/profile_test.rb
|
92
|
+
- test/report_parameter_test.rb
|
93
|
+
- test/report_response_test.rb
|
94
|
+
- test/report_test.rb
|
95
|
+
- test/session_test.rb
|
96
|
+
- test/symbol_test.rb
|
97
|
+
- test/test_helper.rb
|
98
|
+
- test/fixtures/profile_feed.xml
|
99
|
+
- test/fixtures/report_feed.xml
|