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.
Files changed (59) hide show
  1. data/README.md +262 -0
  2. data/Rakefile +56 -0
  3. data/lib/garb.rb +69 -0
  4. data/lib/garb/account.rb +21 -0
  5. data/lib/garb/account_feed_request.rb +25 -0
  6. data/lib/garb/authentication_request.rb +53 -0
  7. data/lib/garb/data_request.rb +42 -0
  8. data/lib/garb/destination.rb +20 -0
  9. data/lib/garb/filter_parameters.rb +41 -0
  10. data/lib/garb/goal.rb +20 -0
  11. data/lib/garb/management/account.rb +32 -0
  12. data/lib/garb/management/feed.rb +26 -0
  13. data/lib/garb/management/goal.rb +20 -0
  14. data/lib/garb/management/profile.rb +39 -0
  15. data/lib/garb/management/web_property.rb +30 -0
  16. data/lib/garb/model.rb +89 -0
  17. data/lib/garb/profile.rb +33 -0
  18. data/lib/garb/profile_reports.rb +16 -0
  19. data/lib/garb/report.rb +28 -0
  20. data/lib/garb/report_parameter.rb +25 -0
  21. data/lib/garb/report_response.rb +34 -0
  22. data/lib/garb/reports.rb +5 -0
  23. data/lib/garb/reports/bounces.rb +5 -0
  24. data/lib/garb/reports/exits.rb +5 -0
  25. data/lib/garb/reports/pageviews.rb +5 -0
  26. data/lib/garb/reports/unique_pageviews.rb +5 -0
  27. data/lib/garb/reports/visits.rb +5 -0
  28. data/lib/garb/resource.rb +115 -0
  29. data/lib/garb/session.rb +35 -0
  30. data/lib/garb/step.rb +13 -0
  31. data/lib/garb/version.rb +13 -0
  32. data/lib/support.rb +40 -0
  33. data/test/fixtures/cacert.pem +67 -0
  34. data/test/fixtures/profile_feed.xml +72 -0
  35. data/test/fixtures/report_feed.xml +46 -0
  36. data/test/test_helper.rb +37 -0
  37. data/test/unit/garb/account_feed_request_test.rb +9 -0
  38. data/test/unit/garb/account_test.rb +53 -0
  39. data/test/unit/garb/authentication_request_test.rb +121 -0
  40. data/test/unit/garb/data_request_test.rb +120 -0
  41. data/test/unit/garb/destination_test.rb +28 -0
  42. data/test/unit/garb/filter_parameters_test.rb +59 -0
  43. data/test/unit/garb/goal_test.rb +24 -0
  44. data/test/unit/garb/management/account_test.rb +54 -0
  45. data/test/unit/garb/management/profile_test.rb +59 -0
  46. data/test/unit/garb/management/web_property_test.rb +58 -0
  47. data/test/unit/garb/model_test.rb +134 -0
  48. data/test/unit/garb/oauth_session_test.rb +11 -0
  49. data/test/unit/garb/profile_reports_test.rb +29 -0
  50. data/test/unit/garb/profile_test.rb +77 -0
  51. data/test/unit/garb/report_parameter_test.rb +43 -0
  52. data/test/unit/garb/report_response_test.rb +37 -0
  53. data/test/unit/garb/report_test.rb +99 -0
  54. data/test/unit/garb/resource_test.rb +49 -0
  55. data/test/unit/garb/session_test.rb +91 -0
  56. data/test/unit/garb/step_test.rb +15 -0
  57. data/test/unit/garb_test.rb +26 -0
  58. data/test/unit/symbol_operator_test.rb +37 -0
  59. 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