readmedia-garb 0.9.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +198 -0
- data/Rakefile +57 -0
- data/lib/garb/account.rb +22 -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 +18 -0
- data/lib/garb/filter_parameters.rb +42 -0
- data/lib/garb/goal.rb +20 -0
- data/lib/garb/management/account.rb +39 -0
- data/lib/garb/management/feed.rb +26 -0
- data/lib/garb/management/goal.rb +44 -0
- data/lib/garb/management/profile.rb +44 -0
- data/lib/garb/management/segment.rb +27 -0
- data/lib/garb/management/web_property.rb +38 -0
- data/lib/garb/model.rb +91 -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 +56 -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/reports.rb +5 -0
- data/lib/garb/resource.rb +115 -0
- data/lib/garb/result_set.rb +21 -0
- data/lib/garb/session.rb +25 -0
- data/lib/garb/step.rb +13 -0
- data/lib/garb/version.rb +14 -0
- data/lib/garb.rb +69 -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 +48 -0
- data/test/test_helper.rb +45 -0
- data/test/unit/garb/account_feed_request_test.rb +42 -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 +107 -0
- data/test/unit/garb/destination_test.rb +28 -0
- data/test/unit/garb/filter_parameters_test.rb +68 -0
- data/test/unit/garb/goal_test.rb +24 -0
- data/test/unit/garb/management/account_test.rb +70 -0
- data/test/unit/garb/management/feed_test.rb +44 -0
- data/test/unit/garb/management/goal_test.rb +81 -0
- data/test/unit/garb/management/profile_test.rb +81 -0
- data/test/unit/garb/management/segment_test.rb +47 -0
- data/test/unit/garb/management/web_property_test.rb +64 -0
- data/test/unit/garb/model_test.rb +141 -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 +47 -0
- data/test/unit/garb/report_test.rb +99 -0
- data/test/unit/garb/resource_test.rb +50 -0
- data/test/unit/garb/session_test.rb +84 -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 +189 -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,47 @@
|
|
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
|
+
@xml = 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(@xml)
|
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(@xml)
|
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(@xml, SpecialKlass)
|
25
|
+
assert_equal [SpecialKlass, SpecialKlass, SpecialKlass], response.results.map(&:class)
|
26
|
+
end
|
27
|
+
|
28
|
+
should "know the total number of results" do
|
29
|
+
response = ReportResponse.new(@xml)
|
30
|
+
assert_equal 18, response.results.total_results
|
31
|
+
end
|
32
|
+
|
33
|
+
should "know if the data has been sampled" do
|
34
|
+
response = ReportResponse.new(@xml)
|
35
|
+
assert_equal true, response.results.sampled?
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
should "return an empty array if there are no results" do
|
40
|
+
response = ReportResponse.new("result xml")
|
41
|
+
Crack::XML.stubs(:parse).with("result xml").returns({'feed' => {'entry' => nil}})
|
42
|
+
|
43
|
+
assert_equal [], response.results.to_a
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
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,50 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
# Most of the resource testing is done as a part of ReportTest
|
4
|
+
class ResourceTest < MiniTest::Unit::TestCase
|
5
|
+
|
6
|
+
context "A class with Garb::Resource mixed in" do
|
7
|
+
setup do
|
8
|
+
@test_report = Class.new
|
9
|
+
@test_report.extend(Garb::Resource)
|
10
|
+
end
|
11
|
+
|
12
|
+
should "get results from GA" do
|
13
|
+
profile = stub(:is_a? => true)
|
14
|
+
@test_report.expects(:send_request_for_body).returns('xml')
|
15
|
+
Garb::ReportResponse.expects(:new).with('xml', OpenStruct).returns(mock(:results => 'analytics'))
|
16
|
+
|
17
|
+
assert_equal 'analytics', @test_report.results(profile)
|
18
|
+
end
|
19
|
+
|
20
|
+
should "get results from GA using a specific user session" do
|
21
|
+
profile = '123'
|
22
|
+
session = Garb::Session.new
|
23
|
+
@test_report.expects(:send_request_for_body).returns('xml')
|
24
|
+
Garb::ReportResponse.expects(:new).with('xml', OpenStruct).returns(mock(:results => 'analytics'))
|
25
|
+
Garb::Profile.expects(:first).with(profile, session).returns(mock('Garb::Profile'))
|
26
|
+
|
27
|
+
assert_equal 'analytics', @test_report.results(profile, :session => session)
|
28
|
+
end
|
29
|
+
|
30
|
+
should "permit setting a segment id" do
|
31
|
+
@test_report.set_segment_id 1
|
32
|
+
assert_equal "gaid::1", @test_report.segment
|
33
|
+
end
|
34
|
+
|
35
|
+
should "permit setting a klass used for instantiation of results" do
|
36
|
+
TestKlass = Class.new(OpenStruct)
|
37
|
+
@test_report.set_instance_klass TestKlass
|
38
|
+
assert_equal TestKlass, @test_report.instance_klass
|
39
|
+
end
|
40
|
+
|
41
|
+
should "return an empty result set if profile is invalid" do
|
42
|
+
profile = '123'
|
43
|
+
@test_report.expects(:send_request_for_body).never
|
44
|
+
Garb::ReportResponse.expects(:new).never
|
45
|
+
|
46
|
+
Garb::Profile.expects(:first).returns(nil)
|
47
|
+
assert_equal [], @test_report.results(profile)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,84 @@
|
|
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
|
+
end
|
42
|
+
|
43
|
+
context "A Session" do
|
44
|
+
setup do
|
45
|
+
@session = Session.new
|
46
|
+
end
|
47
|
+
|
48
|
+
should "be able retrieve an auth_token for a user" do
|
49
|
+
auth_request = mock {|m| m.expects(:auth_token).with({}).returns('toke') }
|
50
|
+
AuthenticationRequest.expects(:new).with('email', 'password', {}).returns(auth_request)
|
51
|
+
|
52
|
+
@session.login('email', 'password')
|
53
|
+
assert_equal 'toke', @session.auth_token
|
54
|
+
end
|
55
|
+
|
56
|
+
should "be able retrieve an auth_token for a user with secure ssl" do
|
57
|
+
opts = {:secure => true, :account_type => 'GOOGLE'}
|
58
|
+
auth_request = mock {|m| m.expects(:auth_token).with(opts).returns('toke') }
|
59
|
+
AuthenticationRequest.expects(:new).with('email', 'password', opts).returns(auth_request)
|
60
|
+
|
61
|
+
@session.login('email', 'password', opts)
|
62
|
+
assert_equal 'toke', @session.auth_token
|
63
|
+
end
|
64
|
+
|
65
|
+
should "retain the email address for this session" do
|
66
|
+
AuthenticationRequest.stubs(:new).returns(stub(:auth_token => 'toke'))
|
67
|
+
|
68
|
+
@session.login('email', 'password')
|
69
|
+
assert_equal 'email', @session.email
|
70
|
+
end
|
71
|
+
|
72
|
+
should "know if the Session is for a single user" do
|
73
|
+
@session.auth_token = "abcdefg1234567"
|
74
|
+
assert_equal true, @session.single_user?
|
75
|
+
end
|
76
|
+
|
77
|
+
should "know if the Session is for oauth" do
|
78
|
+
@session.access_token = 'some_oauth_access_token'
|
79
|
+
assert_equal true, @session.oauth_user?
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
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,189 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: readmedia-garb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 1
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 9
|
9
|
+
- 1
|
10
|
+
- 1
|
11
|
+
version: 0.9.1.1
|
12
|
+
platform: ruby
|
13
|
+
authors:
|
14
|
+
- Tony Pitale, Philip Brocoum (readMedia)
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2012-08-28 00:00:00 +00:00
|
20
|
+
default_executable:
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
23
|
+
name: crack
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 23
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
- 1
|
34
|
+
- 6
|
35
|
+
version: 0.1.6
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: activesupport
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 7
|
47
|
+
segments:
|
48
|
+
- 2
|
49
|
+
- 2
|
50
|
+
- 0
|
51
|
+
version: 2.2.0
|
52
|
+
type: :runtime
|
53
|
+
version_requirements: *id002
|
54
|
+
description:
|
55
|
+
email: Developer@readMedia.com
|
56
|
+
executables: []
|
57
|
+
|
58
|
+
extensions: []
|
59
|
+
|
60
|
+
extra_rdoc_files: []
|
61
|
+
|
62
|
+
files:
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- lib/garb.rb
|
66
|
+
- lib/garb/report_response.rb
|
67
|
+
- lib/garb/data_request.rb
|
68
|
+
- lib/garb/report_parameter.rb
|
69
|
+
- lib/garb/management/feed.rb
|
70
|
+
- lib/garb/management/segment.rb
|
71
|
+
- lib/garb/management/web_property.rb
|
72
|
+
- lib/garb/management/goal.rb
|
73
|
+
- lib/garb/management/account.rb
|
74
|
+
- lib/garb/management/profile.rb
|
75
|
+
- lib/garb/goal.rb
|
76
|
+
- lib/garb/authentication_request.rb
|
77
|
+
- lib/garb/session.rb
|
78
|
+
- lib/garb/report.rb
|
79
|
+
- lib/garb/profile_reports.rb
|
80
|
+
- lib/garb/version.rb
|
81
|
+
- lib/garb/result_set.rb
|
82
|
+
- lib/garb/account.rb
|
83
|
+
- lib/garb/resource.rb
|
84
|
+
- lib/garb/reports.rb
|
85
|
+
- lib/garb/account_feed_request.rb
|
86
|
+
- lib/garb/destination.rb
|
87
|
+
- lib/garb/model.rb
|
88
|
+
- lib/garb/reports/bounces.rb
|
89
|
+
- lib/garb/reports/visits.rb
|
90
|
+
- lib/garb/reports/pageviews.rb
|
91
|
+
- lib/garb/reports/exits.rb
|
92
|
+
- lib/garb/reports/unique_pageviews.rb
|
93
|
+
- lib/garb/step.rb
|
94
|
+
- lib/garb/filter_parameters.rb
|
95
|
+
- lib/garb/profile.rb
|
96
|
+
- lib/support.rb
|
97
|
+
- test/fixtures/cacert.pem
|
98
|
+
- test/fixtures/report_feed.xml
|
99
|
+
- test/fixtures/profile_feed.xml
|
100
|
+
- test/test_helper.rb
|
101
|
+
- test/unit/symbol_operator_test.rb
|
102
|
+
- test/unit/garb/oauth_session_test.rb
|
103
|
+
- test/unit/garb/session_test.rb
|
104
|
+
- test/unit/garb/resource_test.rb
|
105
|
+
- test/unit/garb/report_parameter_test.rb
|
106
|
+
- test/unit/garb/model_test.rb
|
107
|
+
- test/unit/garb/management/feed_test.rb
|
108
|
+
- test/unit/garb/management/account_test.rb
|
109
|
+
- test/unit/garb/management/web_property_test.rb
|
110
|
+
- test/unit/garb/management/profile_test.rb
|
111
|
+
- test/unit/garb/management/goal_test.rb
|
112
|
+
- test/unit/garb/management/segment_test.rb
|
113
|
+
- test/unit/garb/report_response_test.rb
|
114
|
+
- test/unit/garb/destination_test.rb
|
115
|
+
- test/unit/garb/profile_reports_test.rb
|
116
|
+
- test/unit/garb/step_test.rb
|
117
|
+
- test/unit/garb/account_test.rb
|
118
|
+
- test/unit/garb/profile_test.rb
|
119
|
+
- test/unit/garb/report_test.rb
|
120
|
+
- test/unit/garb/account_feed_request_test.rb
|
121
|
+
- test/unit/garb/goal_test.rb
|
122
|
+
- test/unit/garb/filter_parameters_test.rb
|
123
|
+
- test/unit/garb/data_request_test.rb
|
124
|
+
- test/unit/garb/authentication_request_test.rb
|
125
|
+
- test/unit/garb_test.rb
|
126
|
+
has_rdoc: false
|
127
|
+
homepage: http://github.com/readmedia/garb
|
128
|
+
licenses: []
|
129
|
+
|
130
|
+
post_install_message:
|
131
|
+
rdoc_options: []
|
132
|
+
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
hash: 3
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
version: "0"
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
hash: 3
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
version: "0"
|
153
|
+
requirements: []
|
154
|
+
|
155
|
+
rubyforge_project: readmedia
|
156
|
+
rubygems_version: 1.3.9.4
|
157
|
+
signing_key:
|
158
|
+
specification_version: 3
|
159
|
+
summary: Google Analytics API (v2.4) Ruby Wrapper
|
160
|
+
test_files:
|
161
|
+
- test/fixtures/cacert.pem
|
162
|
+
- test/fixtures/report_feed.xml
|
163
|
+
- test/fixtures/profile_feed.xml
|
164
|
+
- test/test_helper.rb
|
165
|
+
- test/unit/symbol_operator_test.rb
|
166
|
+
- test/unit/garb/oauth_session_test.rb
|
167
|
+
- test/unit/garb/session_test.rb
|
168
|
+
- test/unit/garb/resource_test.rb
|
169
|
+
- test/unit/garb/report_parameter_test.rb
|
170
|
+
- test/unit/garb/model_test.rb
|
171
|
+
- test/unit/garb/management/feed_test.rb
|
172
|
+
- test/unit/garb/management/account_test.rb
|
173
|
+
- test/unit/garb/management/web_property_test.rb
|
174
|
+
- test/unit/garb/management/profile_test.rb
|
175
|
+
- test/unit/garb/management/goal_test.rb
|
176
|
+
- test/unit/garb/management/segment_test.rb
|
177
|
+
- test/unit/garb/report_response_test.rb
|
178
|
+
- test/unit/garb/destination_test.rb
|
179
|
+
- test/unit/garb/profile_reports_test.rb
|
180
|
+
- test/unit/garb/step_test.rb
|
181
|
+
- test/unit/garb/account_test.rb
|
182
|
+
- test/unit/garb/profile_test.rb
|
183
|
+
- test/unit/garb/report_test.rb
|
184
|
+
- test/unit/garb/account_feed_request_test.rb
|
185
|
+
- test/unit/garb/goal_test.rb
|
186
|
+
- test/unit/garb/filter_parameters_test.rb
|
187
|
+
- test/unit/garb/data_request_test.rb
|
188
|
+
- test/unit/garb/authentication_request_test.rb
|
189
|
+
- test/unit/garb_test.rb
|