titanous-garb 0.8.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/README.md +262 -0
- data/Rakefile +56 -0
- data/lib/garb.rb +69 -0
- data/lib/garb/account.rb +21 -0
- data/lib/garb/account_feed_request.rb +25 -0
- data/lib/garb/authentication_request.rb +53 -0
- data/lib/garb/data_request.rb +42 -0
- data/lib/garb/destination.rb +20 -0
- data/lib/garb/filter_parameters.rb +41 -0
- data/lib/garb/goal.rb +20 -0
- data/lib/garb/management/account.rb +32 -0
- data/lib/garb/management/feed.rb +26 -0
- data/lib/garb/management/goal.rb +20 -0
- data/lib/garb/management/profile.rb +39 -0
- data/lib/garb/management/web_property.rb +30 -0
- data/lib/garb/model.rb +89 -0
- data/lib/garb/profile.rb +33 -0
- data/lib/garb/profile_reports.rb +16 -0
- data/lib/garb/report.rb +28 -0
- data/lib/garb/report_parameter.rb +25 -0
- data/lib/garb/report_response.rb +34 -0
- data/lib/garb/reports.rb +5 -0
- data/lib/garb/reports/bounces.rb +5 -0
- data/lib/garb/reports/exits.rb +5 -0
- data/lib/garb/reports/pageviews.rb +5 -0
- data/lib/garb/reports/unique_pageviews.rb +5 -0
- data/lib/garb/reports/visits.rb +5 -0
- data/lib/garb/resource.rb +115 -0
- data/lib/garb/session.rb +35 -0
- data/lib/garb/step.rb +13 -0
- data/lib/garb/version.rb +13 -0
- data/lib/support.rb +40 -0
- data/test/fixtures/cacert.pem +67 -0
- data/test/fixtures/profile_feed.xml +72 -0
- data/test/fixtures/report_feed.xml +46 -0
- data/test/test_helper.rb +37 -0
- data/test/unit/garb/account_feed_request_test.rb +9 -0
- data/test/unit/garb/account_test.rb +53 -0
- data/test/unit/garb/authentication_request_test.rb +121 -0
- data/test/unit/garb/data_request_test.rb +120 -0
- data/test/unit/garb/destination_test.rb +28 -0
- data/test/unit/garb/filter_parameters_test.rb +59 -0
- data/test/unit/garb/goal_test.rb +24 -0
- data/test/unit/garb/management/account_test.rb +54 -0
- data/test/unit/garb/management/profile_test.rb +59 -0
- data/test/unit/garb/management/web_property_test.rb +58 -0
- data/test/unit/garb/model_test.rb +134 -0
- data/test/unit/garb/oauth_session_test.rb +11 -0
- data/test/unit/garb/profile_reports_test.rb +29 -0
- data/test/unit/garb/profile_test.rb +77 -0
- data/test/unit/garb/report_parameter_test.rb +43 -0
- data/test/unit/garb/report_response_test.rb +37 -0
- data/test/unit/garb/report_test.rb +99 -0
- data/test/unit/garb/resource_test.rb +49 -0
- data/test/unit/garb/session_test.rb +91 -0
- data/test/unit/garb/step_test.rb +15 -0
- data/test/unit/garb_test.rb +26 -0
- data/test/unit/symbol_operator_test.rb +37 -0
- metadata +180 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class ReportParameterTest < MiniTest::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 << :page_path)
|
21
|
+
assert_equal [:page_path], @metrics.elements
|
22
|
+
end
|
23
|
+
|
24
|
+
should "merge an array of elements" do
|
25
|
+
assert_equal(@metrics, @metrics << [:page_path])
|
26
|
+
assert_equal [:page_path], @metrics.elements
|
27
|
+
end
|
28
|
+
|
29
|
+
context "converting to params" do
|
30
|
+
should "be able to format the parameters into strings" do
|
31
|
+
@metrics << :page_path
|
32
|
+
assert_equal({'metrics' => 'ga:pagePath'}, @metrics.to_params)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "join multiple symbol elements" do
|
36
|
+
@metrics << :page_path << :city
|
37
|
+
assert_equal({'metrics' => 'ga:pagePath,ga:city'}, @metrics.to_params)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
SpecialKlass = Class.new(OpenStruct)
|
5
|
+
|
6
|
+
class ReportResponseTest < MiniTest::Unit::TestCase
|
7
|
+
context "A ReportResponse" do
|
8
|
+
context "with a report feed" do
|
9
|
+
setup do
|
10
|
+
@file = File.read(File.join(File.dirname(__FILE__), '..', '..', "/fixtures/report_feed.xml"))
|
11
|
+
end
|
12
|
+
|
13
|
+
should "parse results from atom xml" do
|
14
|
+
response = ReportResponse.new(@file)
|
15
|
+
assert_equal ['33', '2', '1'], response.results.map(&:pageviews)
|
16
|
+
end
|
17
|
+
|
18
|
+
should "default to returning an array of OpenStruct objects" do
|
19
|
+
response = ReportResponse.new(@file)
|
20
|
+
assert_equal [OpenStruct, OpenStruct, OpenStruct], response.results.map(&:class)
|
21
|
+
end
|
22
|
+
|
23
|
+
should "return an array of instances of a specified class" do
|
24
|
+
response = ReportResponse.new(@file, SpecialKlass)
|
25
|
+
assert_equal [SpecialKlass, SpecialKlass, SpecialKlass], response.results.map(&:class)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
should "return an empty array if there are no results" do
|
30
|
+
response = ReportResponse.new("result xml")
|
31
|
+
Crack::XML.stubs(:parse).with("result xml").returns({'feed' => {'entry' => nil}})
|
32
|
+
|
33
|
+
assert_equal [], response.results
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
# Also tests Garb::Resource, which is the basis for Garb::Report
|
5
|
+
class ReportTest < MiniTest::Unit::TestCase
|
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', :session => Session)
|
11
|
+
@report = Report.new(@profile)
|
12
|
+
end
|
13
|
+
|
14
|
+
%w(metrics dimensions sort).each do |param|
|
15
|
+
should "have parameters for #{param}" do
|
16
|
+
assert @report.send(:"#{param}").is_a?(ReportParameter)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "clear parameters for #{param}" do
|
20
|
+
assert_equal({}, @report.send(:"clear_#{param}").to_params)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
should "have filter parameters for filters" do
|
25
|
+
assert @report.filters.is_a?(FilterParameters)
|
26
|
+
end
|
27
|
+
|
28
|
+
should "add new filters to filter parameters" do
|
29
|
+
@report.clear_filters
|
30
|
+
hash = {:thing.gt => 'val'}
|
31
|
+
@report.filters hash
|
32
|
+
|
33
|
+
assert_equal hash, @report.filters.parameters.first
|
34
|
+
end
|
35
|
+
|
36
|
+
should "clear filter parameters for filters" do
|
37
|
+
assert_equal({}, @report.clear_filters.to_params)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "have default parameters" do
|
41
|
+
@report.stubs(:format_time).returns('2009-08-01')
|
42
|
+
params = {'ids' => 'ga:1234', 'start-date' => '2009-08-01', 'end-date' => '2009-08-01'}
|
43
|
+
assert_equal params, @report.default_params
|
44
|
+
end
|
45
|
+
|
46
|
+
should "allow setting a segment id to the segment params" do
|
47
|
+
@report.set_segment_id 121
|
48
|
+
assert_equal({'segment' => 'gaid::121'}, @report.segment_params)
|
49
|
+
end
|
50
|
+
|
51
|
+
should "collect params from metrics, dimensions, filters, sort, and defaults" do
|
52
|
+
@report.stubs(:metrics).returns(stub(:to_params => {'metrics' => 6}))
|
53
|
+
@report.stubs(:dimensions).returns(stub(:to_params => {'dimensions' => 5}))
|
54
|
+
@report.stubs(:filters).returns(stub(:to_params => {'filters' => 4}))
|
55
|
+
@report.stubs(:sort).returns(stub(:to_params => {'sort' => 3}))
|
56
|
+
@report.stubs(:page_params).returns({'page_params' => 2})
|
57
|
+
@report.stubs(:default_params).returns({'default_params' => 1})
|
58
|
+
@report.stubs(:segment_params).returns({'segment' => 'gaid::10'})
|
59
|
+
|
60
|
+
expected_params = {'metrics' => 6,'dimensions' => 5, 'filters' => 4, 'sort' => 3,
|
61
|
+
'page_params' => 2, 'default_params' => 1, 'segment' => 'gaid::10'}
|
62
|
+
|
63
|
+
assert_equal expected_params, @report.params
|
64
|
+
end
|
65
|
+
|
66
|
+
should "format time" do
|
67
|
+
assert_equal @now.strftime('%Y-%m-%d'), @report.format_time(@now)
|
68
|
+
end
|
69
|
+
|
70
|
+
should "send a data request to GA" do
|
71
|
+
response = mock {|m| m.expects(:body).returns('response body') }
|
72
|
+
request = mock {|m| m.expects(:send_request).returns(response) }
|
73
|
+
@report.expects(:params).returns('params')
|
74
|
+
|
75
|
+
DataRequest.expects(:new).with(Session, Garb::Report::URL, 'params').returns(request)
|
76
|
+
assert_equal 'response body', @report.send_request_for_body
|
77
|
+
end
|
78
|
+
|
79
|
+
should "fetch and parse results from GA" do
|
80
|
+
@report.expects(:send_request_for_body).with().returns('xml')
|
81
|
+
ReportResponse.expects(:new).with('xml').returns(mock(:results => ['entry']))
|
82
|
+
assert_equal ['entry'], @report.results
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "An instance of the Report class with initial options" do
|
87
|
+
setup do
|
88
|
+
@profile = stub(:table_id => 'ga:1234')
|
89
|
+
@report = Report.new(@profile, :limit => 10, :offset => 20)
|
90
|
+
end
|
91
|
+
|
92
|
+
should "have page paramaters" do
|
93
|
+
params = {'max-results' => 10, 'start-index' => 20}
|
94
|
+
assert_equal params, @report.page_params
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestReport
|
4
|
+
extend Garb::Resource
|
5
|
+
end
|
6
|
+
|
7
|
+
# Most of the resource testing is done as a part of ReportTest
|
8
|
+
class ResourceTest < MiniTest::Unit::TestCase
|
9
|
+
|
10
|
+
context "A class with Garb::Resource mixed in" do
|
11
|
+
should "get results from GA" do
|
12
|
+
profile = stub(:is_a? => true)
|
13
|
+
TestReport.expects(:send_request_for_body).returns('xml')
|
14
|
+
Garb::ReportResponse.expects(:new).with('xml', OpenStruct).returns(mock(:results => 'analytics'))
|
15
|
+
|
16
|
+
assert_equal 'analytics', TestReport.results(profile)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "get results from GA using a specific user session" do
|
20
|
+
profile = '123'
|
21
|
+
session = Garb::Session.new
|
22
|
+
TestReport.expects(:send_request_for_body).returns('xml')
|
23
|
+
Garb::ReportResponse.expects(:new).with('xml', OpenStruct).returns(mock(:results => 'analytics'))
|
24
|
+
Garb::Profile.expects(:first).with(profile, session).returns(mock('Garb::Profile'))
|
25
|
+
|
26
|
+
assert_equal 'analytics', TestReport.results(profile, :session => session)
|
27
|
+
end
|
28
|
+
|
29
|
+
should "permit setting a segment id" do
|
30
|
+
TestReport.set_segment_id 1
|
31
|
+
assert_equal "gaid::1", TestReport.segment
|
32
|
+
end
|
33
|
+
|
34
|
+
should "permit setting a klass used for instantiation of results" do
|
35
|
+
TestKlass = Class.new(OpenStruct)
|
36
|
+
TestReport.set_instance_klass TestKlass
|
37
|
+
assert_equal TestKlass, TestReport.instance_klass
|
38
|
+
end
|
39
|
+
|
40
|
+
should "return an empty result set if profile is invalid" do
|
41
|
+
profile = '123'
|
42
|
+
TestReport.expects(:send_request_for_body).never
|
43
|
+
Garb::ReportResponse.expects(:new).never
|
44
|
+
|
45
|
+
Garb::Profile.expects(:first).returns(nil)
|
46
|
+
assert_equal [], TestReport.results(profile)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class SessionTest < MiniTest::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 "be able retrieve an auth_token for a user with secure ssl" do
|
17
|
+
opts = {:secure => true, :account_type => 'GOOGLE'}
|
18
|
+
auth_request = mock {|m| m.expects(:auth_token).with(opts).returns('toke') }
|
19
|
+
AuthenticationRequest.expects(:new).with('email', 'password', opts).returns(auth_request)
|
20
|
+
|
21
|
+
Session.login('email', 'password', opts)
|
22
|
+
assert_equal 'toke', Session.auth_token
|
23
|
+
end
|
24
|
+
|
25
|
+
should "retain the email address for this session" do
|
26
|
+
AuthenticationRequest.stubs(:new).returns(stub(:auth_token => 'toke'))
|
27
|
+
|
28
|
+
Session.login('email', 'password')
|
29
|
+
assert_equal 'email', Session.email
|
30
|
+
end
|
31
|
+
|
32
|
+
should "know if the Session is for a single user" do
|
33
|
+
Session.auth_token = "abcdefg1234567"
|
34
|
+
assert_equal true, Session.single_user?
|
35
|
+
end
|
36
|
+
|
37
|
+
should "know if the Session is for oauth" do
|
38
|
+
Session.access_token = 'some_oauth_access_token'
|
39
|
+
assert_equal true, Session.oauth_user?
|
40
|
+
end
|
41
|
+
|
42
|
+
should "define a AuthSub" do
|
43
|
+
Session.auth_sub('a_token')
|
44
|
+
assert_equal true, Session.auth_sub?
|
45
|
+
assert_equal 'a_token', Session.auth_token
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
context "A Session" do
|
51
|
+
setup do
|
52
|
+
@session = Session.new
|
53
|
+
end
|
54
|
+
|
55
|
+
should "be able retrieve an auth_token for a user" do
|
56
|
+
auth_request = mock {|m| m.expects(:auth_token).with({}).returns('toke') }
|
57
|
+
AuthenticationRequest.expects(:new).with('email', 'password', {}).returns(auth_request)
|
58
|
+
|
59
|
+
@session.login('email', 'password')
|
60
|
+
assert_equal 'toke', @session.auth_token
|
61
|
+
end
|
62
|
+
|
63
|
+
should "be able retrieve an auth_token for a user with secure ssl" do
|
64
|
+
opts = {:secure => true, :account_type => 'GOOGLE'}
|
65
|
+
auth_request = mock {|m| m.expects(:auth_token).with(opts).returns('toke') }
|
66
|
+
AuthenticationRequest.expects(:new).with('email', 'password', opts).returns(auth_request)
|
67
|
+
|
68
|
+
@session.login('email', 'password', opts)
|
69
|
+
assert_equal 'toke', @session.auth_token
|
70
|
+
end
|
71
|
+
|
72
|
+
should "retain the email address for this session" do
|
73
|
+
AuthenticationRequest.stubs(:new).returns(stub(:auth_token => 'toke'))
|
74
|
+
|
75
|
+
@session.login('email', 'password')
|
76
|
+
assert_equal 'email', @session.email
|
77
|
+
end
|
78
|
+
|
79
|
+
should "know if the Session is for a single user" do
|
80
|
+
@session.auth_token = "abcdefg1234567"
|
81
|
+
assert_equal true, @session.single_user?
|
82
|
+
end
|
83
|
+
|
84
|
+
should "know if the Session is for oauth" do
|
85
|
+
@session.access_token = 'some_oauth_access_token'
|
86
|
+
assert_equal true, @session.oauth_user?
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Garb
|
4
|
+
class StepTest < MiniTest::Unit::TestCase
|
5
|
+
context "A Step" do
|
6
|
+
should "have a name, number, and path" do
|
7
|
+
step = Step.new({'name' => 'Contact Form Page', 'number' => '1', 'path' => '/contact.html'})
|
8
|
+
|
9
|
+
assert_equal 'Contact Form Page', step.name
|
10
|
+
assert_equal 1, step.number
|
11
|
+
assert_equal '/contact.html', step.path
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class GarbTest < MiniTest::Unit::TestCase
|
4
|
+
context "The Garb module" do
|
5
|
+
should 'prefix a string with ga: for GA' do
|
6
|
+
assert_equal '-ga:bob', Garb.to_google_analytics(stub(:to_google_analytics => '-ga:bob'))
|
7
|
+
assert_equal 'ga:bob', Garb.to_google_analytics('bob')
|
8
|
+
end
|
9
|
+
|
10
|
+
should 'remove ga: prefix' do
|
11
|
+
assert_equal 'bob', Garb.from_google_analytics('ga:bob')
|
12
|
+
end
|
13
|
+
|
14
|
+
should "have a helper to parse properties out of entries" do
|
15
|
+
entry = {"dxp:property"=>[{"name"=>"ga:accountId", "value"=>"1189765"}, {"name"=>"ga:webPropertyId", "value"=>"UA-1189765-1"}]}
|
16
|
+
|
17
|
+
assert_equal({"account_id" => '1189765', "web_property_id" => "UA-1189765-1"}, Garb.parse_properties(entry))
|
18
|
+
end
|
19
|
+
|
20
|
+
should "parse out the self link" do
|
21
|
+
entry = {"link" => [{"rel" => "self", "href" => "http://google.com/accounts/12345"}]}
|
22
|
+
|
23
|
+
assert_equal "http://google.com/accounts/12345", Garb.parse_link(entry, "self")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SymbolOperatorTest < MiniTest::Unit::TestCase
|
4
|
+
context "An instance of a SymbolOperator" do
|
5
|
+
should "lower camelize the target" do
|
6
|
+
assert_equal "ga:uniqueVisits==", SymbolOperator.new(:unique_visits, :eql).to_google_analytics
|
7
|
+
end
|
8
|
+
|
9
|
+
should "return target and operator together" do
|
10
|
+
assert_equal "ga:metric==", SymbolOperator.new(:metric, :eql).to_google_analytics
|
11
|
+
end
|
12
|
+
|
13
|
+
should "prefix the operator to the target" do
|
14
|
+
assert_equal "-ga:metric", SymbolOperator.new(:metric, :desc).to_google_analytics
|
15
|
+
end
|
16
|
+
|
17
|
+
# should "know if it is equal to another operator" do
|
18
|
+
# op1 = SymbolOperator.new(:hello, "==")
|
19
|
+
# op2 = SymbolOperator.new(:hello, "==")
|
20
|
+
# assert_equal op1, op2
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# should "not be equal to another operator if target, operator, or prefix is different" do
|
24
|
+
# op1 = SymbolOperator.new(:hello, "==")
|
25
|
+
# op2 = SymbolOperator.new(:hello, "==", true)
|
26
|
+
# refute_equal op1, op2
|
27
|
+
#
|
28
|
+
# op1 = SymbolOperator.new(:hello1, "==")
|
29
|
+
# op2 = SymbolOperator.new(:hello2, "==")
|
30
|
+
# refute_equal op1, op2
|
31
|
+
#
|
32
|
+
# op1 = SymbolOperator.new(:hello, "!=")
|
33
|
+
# op2 = SymbolOperator.new(:hello, "==")
|
34
|
+
# refute_equal op1, op2
|
35
|
+
# end
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,180 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: titanous-garb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 53
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
- 5
|
10
|
+
version: 0.8.5
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Tony Pitale
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-16 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: crack
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 1
|
33
|
+
- 6
|
34
|
+
version: 0.1.6
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: activesupport
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 7
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 2
|
49
|
+
- 0
|
50
|
+
version: 2.2.0
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
description:
|
54
|
+
email: tony.pitale@viget.com
|
55
|
+
executables: []
|
56
|
+
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
extra_rdoc_files: []
|
60
|
+
|
61
|
+
files:
|
62
|
+
- README.md
|
63
|
+
- Rakefile
|
64
|
+
- lib/garb/account.rb
|
65
|
+
- lib/garb/account_feed_request.rb
|
66
|
+
- lib/garb/authentication_request.rb
|
67
|
+
- lib/garb/data_request.rb
|
68
|
+
- lib/garb/destination.rb
|
69
|
+
- lib/garb/filter_parameters.rb
|
70
|
+
- lib/garb/goal.rb
|
71
|
+
- lib/garb/management/account.rb
|
72
|
+
- lib/garb/management/feed.rb
|
73
|
+
- lib/garb/management/goal.rb
|
74
|
+
- lib/garb/management/profile.rb
|
75
|
+
- lib/garb/management/web_property.rb
|
76
|
+
- lib/garb/model.rb
|
77
|
+
- lib/garb/profile.rb
|
78
|
+
- lib/garb/profile_reports.rb
|
79
|
+
- lib/garb/report.rb
|
80
|
+
- lib/garb/report_parameter.rb
|
81
|
+
- lib/garb/report_response.rb
|
82
|
+
- lib/garb/reports/bounces.rb
|
83
|
+
- lib/garb/reports/exits.rb
|
84
|
+
- lib/garb/reports/pageviews.rb
|
85
|
+
- lib/garb/reports/unique_pageviews.rb
|
86
|
+
- lib/garb/reports/visits.rb
|
87
|
+
- lib/garb/reports.rb
|
88
|
+
- lib/garb/resource.rb
|
89
|
+
- lib/garb/session.rb
|
90
|
+
- lib/garb/step.rb
|
91
|
+
- lib/garb/version.rb
|
92
|
+
- lib/garb.rb
|
93
|
+
- lib/support.rb
|
94
|
+
- test/fixtures/cacert.pem
|
95
|
+
- test/fixtures/profile_feed.xml
|
96
|
+
- test/fixtures/report_feed.xml
|
97
|
+
- test/test_helper.rb
|
98
|
+
- test/unit/garb/account_feed_request_test.rb
|
99
|
+
- test/unit/garb/account_test.rb
|
100
|
+
- test/unit/garb/authentication_request_test.rb
|
101
|
+
- test/unit/garb/data_request_test.rb
|
102
|
+
- test/unit/garb/destination_test.rb
|
103
|
+
- test/unit/garb/filter_parameters_test.rb
|
104
|
+
- test/unit/garb/goal_test.rb
|
105
|
+
- test/unit/garb/management/account_test.rb
|
106
|
+
- test/unit/garb/management/profile_test.rb
|
107
|
+
- test/unit/garb/management/web_property_test.rb
|
108
|
+
- test/unit/garb/model_test.rb
|
109
|
+
- test/unit/garb/oauth_session_test.rb
|
110
|
+
- test/unit/garb/profile_reports_test.rb
|
111
|
+
- test/unit/garb/profile_test.rb
|
112
|
+
- test/unit/garb/report_parameter_test.rb
|
113
|
+
- test/unit/garb/report_response_test.rb
|
114
|
+
- test/unit/garb/report_test.rb
|
115
|
+
- test/unit/garb/resource_test.rb
|
116
|
+
- test/unit/garb/session_test.rb
|
117
|
+
- test/unit/garb/step_test.rb
|
118
|
+
- test/unit/garb_test.rb
|
119
|
+
- test/unit/symbol_operator_test.rb
|
120
|
+
has_rdoc: true
|
121
|
+
homepage: http://github.com/vigetlabs/garb
|
122
|
+
licenses: []
|
123
|
+
|
124
|
+
post_install_message:
|
125
|
+
rdoc_options: []
|
126
|
+
|
127
|
+
require_paths:
|
128
|
+
- lib
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
hash: 3
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
version: "0"
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
hash: 3
|
144
|
+
segments:
|
145
|
+
- 0
|
146
|
+
version: "0"
|
147
|
+
requirements: []
|
148
|
+
|
149
|
+
rubyforge_project:
|
150
|
+
rubygems_version: 1.3.7
|
151
|
+
signing_key:
|
152
|
+
specification_version: 3
|
153
|
+
summary: Google Analytics API Ruby Wrapper
|
154
|
+
test_files:
|
155
|
+
- test/fixtures/cacert.pem
|
156
|
+
- test/fixtures/profile_feed.xml
|
157
|
+
- test/fixtures/report_feed.xml
|
158
|
+
- test/test_helper.rb
|
159
|
+
- test/unit/garb/account_feed_request_test.rb
|
160
|
+
- test/unit/garb/account_test.rb
|
161
|
+
- test/unit/garb/authentication_request_test.rb
|
162
|
+
- test/unit/garb/data_request_test.rb
|
163
|
+
- test/unit/garb/destination_test.rb
|
164
|
+
- test/unit/garb/filter_parameters_test.rb
|
165
|
+
- test/unit/garb/goal_test.rb
|
166
|
+
- test/unit/garb/management/account_test.rb
|
167
|
+
- test/unit/garb/management/profile_test.rb
|
168
|
+
- test/unit/garb/management/web_property_test.rb
|
169
|
+
- test/unit/garb/model_test.rb
|
170
|
+
- test/unit/garb/oauth_session_test.rb
|
171
|
+
- test/unit/garb/profile_reports_test.rb
|
172
|
+
- test/unit/garb/profile_test.rb
|
173
|
+
- test/unit/garb/report_parameter_test.rb
|
174
|
+
- test/unit/garb/report_response_test.rb
|
175
|
+
- test/unit/garb/report_test.rb
|
176
|
+
- test/unit/garb/resource_test.rb
|
177
|
+
- test/unit/garb/session_test.rb
|
178
|
+
- test/unit/garb/step_test.rb
|
179
|
+
- test/unit/garb_test.rb
|
180
|
+
- test/unit/symbol_operator_test.rb
|