garb 0.8.4 → 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/lib/garb.rb +1 -4
- data/lib/garb/management/account.rb +14 -10
- data/lib/garb/management/profile.rb +18 -12
- data/lib/garb/management/web_property.rb +13 -9
- data/lib/garb/profile_reports.rb +1 -1
- data/lib/garb/report_response.rb +3 -5
- data/lib/garb/version.rb +1 -1
- data/test/unit/garb/management/account_test.rb +3 -3
- data/test/unit/garb/management/profile_test.rb +3 -3
- data/test/unit/garb/management/web_property_test.rb +3 -3
- data/test/unit/garb/model_test.rb +3 -1
- data/test/unit/garb/resource_test.rb +15 -14
- metadata +3 -8
data/lib/garb.rb
CHANGED
@@ -57,10 +57,7 @@ module Garb
|
|
57
57
|
alias :from_ga :from_google_analytics
|
58
58
|
|
59
59
|
def parse_properties(entry)
|
60
|
-
entry['dxp:property'].
|
61
|
-
hash[Garb.from_ga(p['name'])] = p['value']
|
62
|
-
hash
|
63
|
-
end
|
60
|
+
Hash[entry['dxp:property'].map {|p| [Garb.from_ga(p['name']),p['value']]}]
|
64
61
|
end
|
65
62
|
|
66
63
|
def parse_link(entry, rel)
|
@@ -1,23 +1,27 @@
|
|
1
1
|
module Garb
|
2
2
|
module Management
|
3
3
|
class Account
|
4
|
-
|
5
|
-
|
4
|
+
attr_accessor :session, :path
|
5
|
+
attr_accessor :id, :title, :name
|
6
6
|
|
7
7
|
def self.all(session = Session)
|
8
8
|
feed = Feed.new(session, '/accounts') # builds request and parses response
|
9
9
|
|
10
|
-
feed.entries.map {|entry|
|
10
|
+
feed.entries.map {|entry| new_from_entry(entry, session)}
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
def self.new_from_entry(entry, session)
|
14
|
+
account = new
|
15
|
+
account.session = session
|
16
|
+
account.path = Garb.parse_link(entry, "self").gsub(Feed::BASE_URL, '')
|
17
|
+
account.title = entry['title'].gsub('Google Analytics Account ', '')
|
18
|
+
account.properties = Garb.parse_properties(entry)
|
19
|
+
account
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
def properties=(properties)
|
23
|
+
self.id = properties["account_id"]
|
24
|
+
self.name = properties["account_name"]
|
21
25
|
end
|
22
26
|
|
23
27
|
def web_properties
|
@@ -4,12 +4,12 @@ module Garb
|
|
4
4
|
|
5
5
|
include ProfileReports
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
attr_accessor :session, :path
|
8
|
+
attr_accessor :id, :table_id, :title, :account_id, :web_property_id
|
9
9
|
|
10
10
|
def self.all(session = Session, path = '/accounts/~all/webproperties/~all/profiles')
|
11
11
|
feed = Feed.new(session, path)
|
12
|
-
feed.entries.map {|entry|
|
12
|
+
feed.entries.map {|entry| new_from_entry(entry, session)}
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.for_account(account)
|
@@ -20,16 +20,22 @@ module Garb
|
|
20
20
|
all(web_property.session, web_property.path+'/profiles')
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
24
|
-
|
25
|
-
@path = Garb.parse_link(entry, "self").gsub(Feed::BASE_URL, '')
|
23
|
+
def self.new_from_entry(entry, session)
|
24
|
+
profile = new
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
profile.session = session
|
27
|
+
profile.path = Garb.parse_link(entry, "self").gsub(Feed::BASE_URL, '')
|
28
|
+
profile.properties = Garb.parse_properties(entry)
|
29
|
+
|
30
|
+
profile
|
31
|
+
end
|
32
|
+
|
33
|
+
def properties=(properties)
|
34
|
+
self.id = properties['profile_id']
|
35
|
+
self.table_id = properties['dxp:table_id']
|
36
|
+
self.title = properties['profile_name']
|
37
|
+
self.account_id = properties['account_id']
|
38
|
+
self.web_property_id = properties['web_property_id']
|
33
39
|
end
|
34
40
|
|
35
41
|
# def goals
|
@@ -1,25 +1,29 @@
|
|
1
1
|
module Garb
|
2
2
|
module Management
|
3
3
|
class WebProperty
|
4
|
-
|
5
|
-
|
4
|
+
attr_accessor :session, :path
|
5
|
+
attr_accessor :id, :account_id
|
6
6
|
|
7
7
|
def self.all(session = Session, path='/accounts/~all/webproperties')
|
8
8
|
feed = Feed.new(session, path)
|
9
|
-
feed.entries.map {|entry|
|
9
|
+
feed.entries.map {|entry| new_from_entry(entry, session)}
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.for_account(account)
|
13
13
|
all(account.session, account.path+'/webproperties')
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
16
|
+
def self.new_from_entry(entry, session)
|
17
|
+
web_property = new
|
18
|
+
web_property.session = session
|
19
|
+
web_property.path = Garb.parse_link(entry, "self").gsub(Feed::BASE_URL, '')
|
20
|
+
web_property.properties = Garb.parse_properties(entry)
|
21
|
+
web_property
|
22
|
+
end
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
|
24
|
+
def properties=(properties)
|
25
|
+
self.id = properties["web_property_id"]
|
26
|
+
self.account_id = properties["account_id"]
|
23
27
|
end
|
24
28
|
|
25
29
|
def profiles
|
data/lib/garb/profile_reports.rb
CHANGED
@@ -3,7 +3,7 @@ module Garb
|
|
3
3
|
def self.add_report_method(klass)
|
4
4
|
# demodulize leaves potential to redefine
|
5
5
|
# these methods given different namespaces
|
6
|
-
method_name = klass.name.demodulize.underscore
|
6
|
+
method_name = klass.name.to_s.demodulize.underscore
|
7
7
|
return unless method_name.length > 0
|
8
8
|
|
9
9
|
class_eval <<-CODE
|
data/lib/garb/report_response.rb
CHANGED
@@ -14,11 +14,9 @@ module Garb
|
|
14
14
|
private
|
15
15
|
def parse
|
16
16
|
entries.map do |entry|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
@instance_klass.new(hash)
|
17
|
+
@instance_klass.new(Hash[
|
18
|
+
values_for(entry).map {|v| [Garb.from_ga(v['name']), v['value']]}
|
19
|
+
])
|
22
20
|
end
|
23
21
|
end
|
24
22
|
|
data/lib/garb/version.rb
CHANGED
@@ -8,12 +8,12 @@ module Garb
|
|
8
8
|
feed = stub(:entries => ["entry1"])
|
9
9
|
Feed.stubs(:new).returns(feed)
|
10
10
|
|
11
|
-
Account.stubs(:
|
11
|
+
Account.stubs(:new_from_entry)
|
12
12
|
Account.all
|
13
13
|
|
14
14
|
assert_received(Feed, :new) {|e| e.with(Session, '/accounts')}
|
15
15
|
assert_received(feed, :entries)
|
16
|
-
assert_received(Account, :
|
16
|
+
assert_received(Account, :new_from_entry) {|e| e.with("entry1", Session)}
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -27,7 +27,7 @@ module Garb
|
|
27
27
|
{"name" => "ga:accountName", "value" => "Garb"}
|
28
28
|
]
|
29
29
|
}
|
30
|
-
@account = Account.
|
30
|
+
@account = Account.new_from_entry(entry, Session)
|
31
31
|
end
|
32
32
|
|
33
33
|
should "extract id and title from GA entry" do
|
@@ -8,12 +8,12 @@ module Garb
|
|
8
8
|
feed = stub(:entries => ["entry1"])
|
9
9
|
Feed.stubs(:new).returns(feed)
|
10
10
|
|
11
|
-
Profile.stubs(:
|
11
|
+
Profile.stubs(:new_from_entry)
|
12
12
|
Profile.all
|
13
13
|
|
14
14
|
assert_received(Feed, :new) {|e| e.with(Session, '/accounts/~all/webproperties/~all/profiles')}
|
15
15
|
assert_received(feed, :entries)
|
16
|
-
assert_received(Profile, :
|
16
|
+
assert_received(Profile, :new_from_entry) {|e| e.with("entry1", Session)}
|
17
17
|
end
|
18
18
|
|
19
19
|
should "find all web properties for a given account"
|
@@ -31,7 +31,7 @@ module Garb
|
|
31
31
|
{"name" => "ga:profileName", "value" => "example.com"}
|
32
32
|
]
|
33
33
|
}
|
34
|
-
@profile = Profile.
|
34
|
+
@profile = Profile.new_from_entry(entry, Session)
|
35
35
|
end
|
36
36
|
|
37
37
|
should "have a title" do
|
@@ -8,12 +8,12 @@ module Garb
|
|
8
8
|
feed = stub(:entries => ["entry1"])
|
9
9
|
Feed.stubs(:new).returns(feed)
|
10
10
|
|
11
|
-
WebProperty.stubs(:
|
11
|
+
WebProperty.stubs(:new_from_entry)
|
12
12
|
WebProperty.all
|
13
13
|
|
14
14
|
assert_received(Feed, :new) {|e| e.with(Session, '/accounts/~all/webproperties')}
|
15
15
|
assert_received(feed, :entries)
|
16
|
-
assert_received(WebProperty, :
|
16
|
+
assert_received(WebProperty, :new_from_entry) {|e| e.with("entry1", Session)}
|
17
17
|
end
|
18
18
|
|
19
19
|
should "find all web properties for a given account" do
|
@@ -36,7 +36,7 @@ module Garb
|
|
36
36
|
]
|
37
37
|
}
|
38
38
|
|
39
|
-
@web_property = WebProperty.
|
39
|
+
@web_property = WebProperty.new_from_entry(entry, Session)
|
40
40
|
end
|
41
41
|
|
42
42
|
should "have an id" do
|
@@ -51,7 +51,7 @@ module Garb
|
|
51
51
|
]
|
52
52
|
}
|
53
53
|
|
54
|
-
@profile = Garb::Management::Profile.
|
54
|
+
@profile = Garb::Management::Profile.new_from_entry(entry, Session)
|
55
55
|
end
|
56
56
|
|
57
57
|
context "when getting results" do
|
@@ -66,6 +66,8 @@ module Garb
|
|
66
66
|
now = Time.now
|
67
67
|
Time.stubs(:new).returns(now)
|
68
68
|
|
69
|
+
# p @profile.id
|
70
|
+
|
69
71
|
@params = {'ids' => Garb.to_ga(@profile.id),
|
70
72
|
'start-date' => (now - Model::MONTH).strftime('%Y-%m-%d'),
|
71
73
|
'end-date' => now.strftime('%Y-%m-%d'),
|
@@ -1,49 +1,50 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class TestReport
|
4
|
-
extend Garb::Resource
|
5
|
-
end
|
6
|
-
|
7
3
|
# Most of the resource testing is done as a part of ReportTest
|
8
4
|
class ResourceTest < MiniTest::Unit::TestCase
|
9
5
|
|
10
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
|
+
|
11
12
|
should "get results from GA" do
|
12
13
|
profile = stub(:is_a? => true)
|
13
|
-
|
14
|
+
@test_report.expects(:send_request_for_body).returns('xml')
|
14
15
|
Garb::ReportResponse.expects(:new).with('xml', OpenStruct).returns(mock(:results => 'analytics'))
|
15
16
|
|
16
|
-
assert_equal 'analytics',
|
17
|
+
assert_equal 'analytics', @test_report.results(profile)
|
17
18
|
end
|
18
19
|
|
19
20
|
should "get results from GA using a specific user session" do
|
20
21
|
profile = '123'
|
21
22
|
session = Garb::Session.new
|
22
|
-
|
23
|
+
@test_report.expects(:send_request_for_body).returns('xml')
|
23
24
|
Garb::ReportResponse.expects(:new).with('xml', OpenStruct).returns(mock(:results => 'analytics'))
|
24
25
|
Garb::Profile.expects(:first).with(profile, session).returns(mock('Garb::Profile'))
|
25
26
|
|
26
|
-
assert_equal 'analytics',
|
27
|
+
assert_equal 'analytics', @test_report.results(profile, :session => session)
|
27
28
|
end
|
28
29
|
|
29
30
|
should "permit setting a segment id" do
|
30
|
-
|
31
|
-
assert_equal "gaid::1",
|
31
|
+
@test_report.set_segment_id 1
|
32
|
+
assert_equal "gaid::1", @test_report.segment
|
32
33
|
end
|
33
34
|
|
34
35
|
should "permit setting a klass used for instantiation of results" do
|
35
36
|
TestKlass = Class.new(OpenStruct)
|
36
|
-
|
37
|
-
assert_equal TestKlass,
|
37
|
+
@test_report.set_instance_klass TestKlass
|
38
|
+
assert_equal TestKlass, @test_report.instance_klass
|
38
39
|
end
|
39
40
|
|
40
41
|
should "return an empty result set if profile is invalid" do
|
41
42
|
profile = '123'
|
42
|
-
|
43
|
+
@test_report.expects(:send_request_for_body).never
|
43
44
|
Garb::ReportResponse.expects(:new).never
|
44
45
|
|
45
46
|
Garb::Profile.expects(:first).returns(nil)
|
46
|
-
assert_equal [],
|
47
|
+
assert_equal [], @test_report.results(profile)
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: garb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 55
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
8
|
+
- 5
|
9
|
+
version: 0.8.5
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Tony Pitale
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-12-05 00:00:00 -05:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 23
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
- 1
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ">="
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 7
|
46
43
|
segments:
|
47
44
|
- 2
|
48
45
|
- 2
|
@@ -131,7 +128,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
128
|
requirements:
|
132
129
|
- - ">="
|
133
130
|
- !ruby/object:Gem::Version
|
134
|
-
hash: 3
|
135
131
|
segments:
|
136
132
|
- 0
|
137
133
|
version: "0"
|
@@ -140,7 +136,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
136
|
requirements:
|
141
137
|
- - ">="
|
142
138
|
- !ruby/object:Gem::Version
|
143
|
-
hash: 3
|
144
139
|
segments:
|
145
140
|
- 0
|
146
141
|
version: "0"
|