lazy_google_analytics 0.0.1 → 0.1.0
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/.DS_Store +0 -0
- data/README.md +28 -25
- data/Rakefile +9 -0
- data/lazy_google_analytics.gemspec +3 -0
- data/lib/.DS_Store +0 -0
- data/lib/generators/.DS_Store +0 -0
- data/lib/generators/lazy_google_analytics/.DS_Store +0 -0
- data/lib/generators/lazy_google_analytics/install/install_generator.rb +21 -0
- data/lib/generators/templates/README +13 -0
- data/lib/generators/templates/lazy_google_analytics.rb.erb +8 -0
- data/lib/lazy_google_analytics/.DS_Store +0 -0
- data/lib/lazy_google_analytics/auth.rb +2 -1
- data/lib/lazy_google_analytics/client.rb +34 -22
- data/lib/lazy_google_analytics/config.rb +10 -36
- data/lib/lazy_google_analytics/engine.rb +8 -0
- data/lib/lazy_google_analytics/railtie.rb +8 -0
- data/lib/lazy_google_analytics/version.rb +1 -1
- data/lib/lazy_google_analytics.rb +6 -0
- data/spec/.DS_Store +0 -0
- data/spec/fixtures/.DS_Store +0 -0
- data/spec/functional/auth_spec.rb +2 -2
- data/spec/functional/client_spec.rb +11 -9
- data/spec/functional/config_spec.rb +14 -10
- data/spec/spec_helper.rb +12 -0
- metadata +45 -4
data/.DS_Store
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -6,7 +6,6 @@ Lazy google analytics for the lazy programmer. it´s an abstraction around googl
|
|
6
6
|
|
7
7
|
google-analytics-client gem is a very powerfull tool to access the api resources on google. but for me it was not very straightforward , so i come around with a simple way to implement it. thats all. Hope you like it.
|
8
8
|
|
9
|
-
|
10
9
|
## Installation
|
11
10
|
|
12
11
|
Add this line to your application's Gemfile:
|
@@ -23,23 +22,38 @@ Or install it yourself as:
|
|
23
22
|
|
24
23
|
## Simple Usage
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
25
|
+
setup options:
|
26
|
+
|
27
|
+
LazyGoogleAnalytics::Config.setup do |config|
|
28
|
+
config.pass_phrase = "notasecret"
|
29
|
+
config.key_file = /location/to_your/key_file.p12
|
30
|
+
config.client_id = "XXXXX.apps.googleusercontent.com"
|
31
|
+
config.scope = "https://www.googleapis.com/auth/analytics.readonly"
|
32
|
+
config.profile_id = "XXXXX"
|
33
|
+
config.email = "XXXXXX@developer.gserviceaccount.com"
|
34
|
+
end
|
35
|
+
|
36
|
+
api calls:
|
37
|
+
|
38
|
+
@client = LazyGoogleAnalytics::Client.new()
|
32
39
|
|
33
|
-
|
40
|
+
By default LazyGoogleAnalytics::Client is going to make a call for visits within 1 month timeline sorted by month & day, using the profile in config block.
|
34
41
|
|
35
|
-
|
42
|
+
But you can extend that behavior passing and entire options_hash with specific parameters:
|
36
43
|
|
37
|
-
@
|
44
|
+
@client = LazyGoogleAnalytics::Client.new()
|
45
|
+
@client.parameters({'ids' => "ga:XXXXX",
|
46
|
+
'start-date' => "2013-03-12",
|
47
|
+
'end-date' => "2013-04-12",
|
48
|
+
'dimensions' => "ga:day,ga:month",
|
49
|
+
'metrics' => "ga:visits",
|
50
|
+
'sort' => "ga:month,ga:day" })
|
38
51
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
52
|
+
## Rails 3
|
53
|
+
|
54
|
+
installs configuration initializer
|
55
|
+
|
56
|
+
rails g lazy_google_analytics:install
|
43
57
|
|
44
58
|
## GA How to:
|
45
59
|
|
@@ -50,7 +64,6 @@ If you follow this simple steps , you can´t fail.
|
|
50
64
|
+ Add the created @developer.gserviceaccount.com to your users list in the analytics user panel.
|
51
65
|
+ Configure options based on server key and analytics profile id, not the (UA-something) account id!
|
52
66
|
|
53
|
-
|
54
67
|
## Contributing
|
55
68
|
|
56
69
|
1. Fork it
|
@@ -59,13 +72,3 @@ If you follow this simple steps , you can´t fail.
|
|
59
72
|
4. Push to the branch (`git push origin my-new-feature`)
|
60
73
|
5. Create new Pull Request
|
61
74
|
|
62
|
-
|
63
|
-
### TODO
|
64
|
-
|
65
|
-
+ Needs some refactor on client options.
|
66
|
-
+ Needs more specs on client options.
|
67
|
-
+ Config Generators for ruby on rails for the laziest ones.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
data/Rakefile
CHANGED
data/lib/.DS_Store
ADDED
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module LazyGoogleAnalytics
|
4
|
+
class InstallGenerator < ::Rails::Generators::Base
|
5
|
+
|
6
|
+
source_root File.expand_path("../../../templates", __FILE__)
|
7
|
+
|
8
|
+
desc "Creates a Lazy-Google-Analytics initializer."
|
9
|
+
#class_option :orm
|
10
|
+
|
11
|
+
def copy_initializer
|
12
|
+
say_status("installing", "Lazy google analytics", :green)
|
13
|
+
copy_file "lazy_google_analytics.rb.erb", "config/initializers/lazy_google_analytics.rb"
|
14
|
+
end
|
15
|
+
|
16
|
+
def show_readme
|
17
|
+
readme "README" if behavior == :invoke
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
Hey, Thanks for install Lazy Google Analytics!
|
3
|
+
In order to make Lazy GA work you will need to follow these steps:
|
4
|
+
|
5
|
+
1. register your api access in: google api console at https://code.google.com/apis/console/) and create a server key.
|
6
|
+
|
7
|
+
2. Download the p12 key. and save it in your app ie:. config/keys/xxx.p12
|
8
|
+
|
9
|
+
3. In order give permissions to the generated user to your GA profile you need to add the created @developer.gserviceaccount.com to your users list in the analytics profile user panel.
|
10
|
+
|
11
|
+
4. Configure options in config/initializers/lazy_google_analytics.rb
|
12
|
+
|
13
|
+
Enjoy :)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
LazyGoogleAnalytics::Config.setup do |config|
|
2
|
+
#config.pass_phrase = "notasecret"
|
3
|
+
#config.key_file = Rails.root + "/config/XXXXkey_file.p12"
|
4
|
+
#config.client_id = "XXXXX.apps.googleusercontent.com"
|
5
|
+
#config.scope = "https://www.googleapis.com/auth/analytics.readonly"
|
6
|
+
#config.profile_id = "XXXXX" # note that this number corresponds to profile id , not analytics UA-XXXXX number
|
7
|
+
#config.email = "XXXXXX@developer.gserviceaccount.com" # you have to add email dev account to users list on analytics profile
|
8
|
+
end
|
Binary file
|
@@ -3,7 +3,8 @@ module LazyGoogleAnalytics
|
|
3
3
|
|
4
4
|
attr_accessor :analytics, :client
|
5
5
|
|
6
|
-
def initialize
|
6
|
+
def initialize
|
7
|
+
config = LazyGoogleAnalytics::Config
|
7
8
|
@key = Google::APIClient::PKCS12.load_key(config.key_file, config.pass_phrase)
|
8
9
|
@asserter = Google::APIClient::JWTAsserter.new( config.email, config.scope, @key)
|
9
10
|
end
|
@@ -1,37 +1,39 @@
|
|
1
1
|
module LazyGoogleAnalytics
|
2
2
|
class Client
|
3
3
|
|
4
|
+
CLIENT_OPTIONS = %w(api_method parameters ids start_date end_date dimensions metrics sort filters)
|
5
|
+
attr_accessor :options, :auth
|
6
|
+
|
4
7
|
def initialize(opts = {})
|
5
|
-
@config = opts[:config]
|
6
|
-
@auth = opts[:auth]
|
7
8
|
|
8
|
-
@
|
9
|
-
@
|
10
|
-
@start_date = opts[:client_options][:start_date] ||= DateTime.now.prev_month.strftime("%Y-%m-%d")
|
11
|
-
@end_date = opts[:client_options][:end_date] ||= DateTime.now.strftime("%Y-%m-%d")
|
12
|
-
@dimensions = opts[:client_options][:dimensions] ||= "ga:day,ga:month"
|
13
|
-
@metrics = opts[:client_options][:metrics] ||= "ga:visits"
|
14
|
-
@sort = opts[:client_options][:sort] ||= "ga:month,ga:day"
|
9
|
+
@auth ||= LazyGoogleAnalytics::Auth.new
|
10
|
+
@auth.authorize # check expiration and cache ?
|
15
11
|
|
12
|
+
self.tap do |client|
|
13
|
+
client.options ||= {}
|
14
|
+
client.defaults_options(opts)
|
15
|
+
client.options ||= opts
|
16
|
+
yield client if block_given?
|
17
|
+
end
|
16
18
|
end
|
17
19
|
|
20
|
+
def defaults_options(opts)
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
startDate = DateTime.now.prev_month.strftime("%Y-%m-%d")
|
22
|
-
endDate = DateTime.now.strftime("%Y-%m-%d")
|
22
|
+
start_date = opts[:start_date] ||= DateTime.now.prev_month.strftime("%Y-%m-%d")
|
23
|
+
end_date = opts[:end_date] ||= DateTime.now.strftime("%Y-%m-%d")
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
25
|
+
self.api_method(@auth.analytics.data.ga.get)
|
26
|
+
self.parameters({'ids' => "ga:#{LazyGoogleAnalytics::Config.profile_id}",
|
27
|
+
'start-date' => start_date,
|
28
|
+
'end-date' => end_date,
|
29
|
+
'dimensions' => "ga:day,ga:month",
|
30
|
+
'metrics' => "ga:visits",
|
31
|
+
'sort' => "ga:month,ga:day" })
|
32
|
+
end
|
32
33
|
|
33
|
-
@results = @auth.client.execute( options)
|
34
34
|
|
35
|
+
def results
|
36
|
+
@results = @auth.client.execute(@options)
|
35
37
|
end
|
36
38
|
|
37
39
|
def formatted_columns
|
@@ -46,6 +48,16 @@ module LazyGoogleAnalytics
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
51
|
+
def method_missing(meth, opts = {})
|
52
|
+
merge_options meth, opts
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def merge_options(name, opts)
|
58
|
+
@options.merge! name => opts
|
59
|
+
end
|
60
|
+
|
49
61
|
end
|
50
62
|
end
|
51
63
|
|
@@ -1,43 +1,17 @@
|
|
1
|
+
require "active_support/core_ext/module/attribute_accessors"
|
2
|
+
|
1
3
|
module LazyGoogleAnalytics
|
2
4
|
class Config
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
def initialize(data={})
|
7
|
-
@data = {}
|
8
|
-
update!(data)
|
9
|
-
end
|
10
|
-
|
11
|
-
def update!(data)
|
12
|
-
data.each do |key, value|
|
13
|
-
self[key] = value
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def [](key)
|
18
|
-
@data[key.to_sym]
|
19
|
-
end
|
20
|
-
|
21
|
-
def []=(key, value)
|
22
|
-
if value.class == Hash
|
23
|
-
@data[key.to_sym] = LazyGoogleAnalytics::Config.new(value)
|
24
|
-
else
|
25
|
-
@data[key.to_sym] = value
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def method_missing(sym, *args)
|
30
|
-
if sym.to_s =~ /(.+)=$/
|
31
|
-
self[$1] = args.first
|
32
|
-
else
|
33
|
-
self[sym]
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def has_required_keys?
|
38
|
-
res = @data.keys - [:pass_phrase, :key_file, :client_id, :scope, :profile_id, :email]
|
39
|
-
raise LazyGoogleAnalytics::Config::WrongConfig unless res.empty?
|
6
|
+
def self.setup
|
7
|
+
yield self
|
40
8
|
end
|
41
9
|
|
10
|
+
mattr_accessor :pass_phrase,
|
11
|
+
:key_file,
|
12
|
+
:client_id,
|
13
|
+
:scope,
|
14
|
+
:profile_id,
|
15
|
+
:email
|
42
16
|
end
|
43
17
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
4
|
require "google/api_client"
|
5
|
+
require "active_support"
|
5
6
|
|
6
7
|
module LazyGoogleAnalytics
|
7
8
|
|
@@ -10,4 +11,9 @@ module LazyGoogleAnalytics
|
|
10
11
|
autoload :Auth, 'lazy_google_analytics/auth.rb'
|
11
12
|
autoload :Client, 'lazy_google_analytics/client.rb'
|
12
13
|
|
14
|
+
if defined?(::Rails::Railtie)
|
15
|
+
autoload :Railtie, 'lazy_google_analytics/railtie.rb'
|
16
|
+
autoload :Rails, 'lazy_google_analytics/engine.rb' if ::Rails.version >= '3.1'
|
17
|
+
end
|
18
|
+
|
13
19
|
end
|
data/spec/.DS_Store
CHANGED
Binary file
|
data/spec/fixtures/.DS_Store
CHANGED
Binary file
|
@@ -2,8 +2,8 @@ require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
|
2
2
|
|
3
3
|
describe "Config" do
|
4
4
|
before(:all) do
|
5
|
-
|
6
|
-
@auth
|
5
|
+
config_setup
|
6
|
+
@auth = LazyGoogleAnalytics::Auth.new
|
7
7
|
end
|
8
8
|
|
9
9
|
it "authorization object" do
|
@@ -2,19 +2,21 @@ require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
|
2
2
|
|
3
3
|
describe "Client" do
|
4
4
|
before(:all) do
|
5
|
-
|
6
|
-
@
|
7
|
-
@auth.authorize
|
8
|
-
@client = LazyGoogleAnalytics::Client.new({
|
9
|
-
:config=>@config,
|
10
|
-
:auth=>@auth,
|
11
|
-
:client_options => {}
|
12
|
-
})
|
5
|
+
config_setup
|
6
|
+
@client = LazyGoogleAnalytics::Client.new()
|
13
7
|
end
|
14
8
|
|
15
9
|
it "find objects object" do
|
16
|
-
#binding.pry
|
17
10
|
@client.results
|
18
11
|
end
|
19
12
|
|
13
|
+
it "headers" do
|
14
|
+
@client.formatted_columns.should == "ga:day\tga:month\tga:visits"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "rows" do
|
18
|
+
@client.formatted_rows.class.should == Array
|
19
|
+
@client.formatted_rows.should_not be_empty
|
20
|
+
end
|
21
|
+
|
20
22
|
end
|
@@ -1,20 +1,24 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
2
2
|
|
3
|
-
describe "Config" do
|
3
|
+
describe "Config class" do
|
4
4
|
before(:all) do
|
5
|
-
@config = LazyGoogleAnalytics::Config.new(config_options)
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
LazyGoogleAnalytics::Config.setup do |config|
|
7
|
+
config.pass_phrase = config_options["pass_phrase"]
|
8
|
+
config.key_file = config_options["key_file"]
|
9
|
+
config.client_id = config_options["client_id"]
|
10
|
+
config.scope = config_options["scope"]
|
11
|
+
config.profile_id = config_options["profile_id"]
|
12
|
+
config.email = config_options["email"]
|
13
|
+
end
|
10
14
|
end
|
11
15
|
|
12
16
|
it "has all the keys required" do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
LazyGoogleAnalytics::Config.pass_phrase.should_not be_empty
|
18
|
+
LazyGoogleAnalytics::Config.key_file.should_not be_empty
|
19
|
+
LazyGoogleAnalytics::Config.scope.should_not be_empty
|
20
|
+
LazyGoogleAnalytics::Config.profile_id.should_not be_empty
|
21
|
+
LazyGoogleAnalytics::Config.email.should_not be_empty
|
18
22
|
end
|
19
23
|
|
20
24
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -18,4 +18,16 @@ RSpec.configure do |config|
|
|
18
18
|
return config
|
19
19
|
end
|
20
20
|
|
21
|
+
def config_setup
|
22
|
+
LazyGoogleAnalytics::Config.setup do |config|
|
23
|
+
config.pass_phrase = config_options["pass_phrase"]
|
24
|
+
config.key_file = config_options["key_file"]
|
25
|
+
config.client_id = config_options["client_id"]
|
26
|
+
config.scope = config_options["scope"]
|
27
|
+
config.profile_id = config_options["profile_id"]
|
28
|
+
config.email = config_options["email"]
|
29
|
+
end
|
30
|
+
LazyGoogleAnalytics::Config
|
31
|
+
end
|
32
|
+
|
21
33
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lazy_google_analytics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-api-client
|
@@ -59,6 +59,38 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: hash-deep-merge
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: activesupport
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
62
94
|
description: google analytics api access for the lazy ones
|
63
95
|
email:
|
64
96
|
- miguelmichelson@gmail.com
|
@@ -73,10 +105,19 @@ files:
|
|
73
105
|
- README.md
|
74
106
|
- Rakefile
|
75
107
|
- lazy_google_analytics.gemspec
|
108
|
+
- lib/.DS_Store
|
109
|
+
- lib/generators/.DS_Store
|
110
|
+
- lib/generators/lazy_google_analytics/.DS_Store
|
111
|
+
- lib/generators/lazy_google_analytics/install/install_generator.rb
|
112
|
+
- lib/generators/templates/README
|
113
|
+
- lib/generators/templates/lazy_google_analytics.rb.erb
|
76
114
|
- lib/lazy_google_analytics.rb
|
115
|
+
- lib/lazy_google_analytics/.DS_Store
|
77
116
|
- lib/lazy_google_analytics/auth.rb
|
78
117
|
- lib/lazy_google_analytics/client.rb
|
79
118
|
- lib/lazy_google_analytics/config.rb
|
119
|
+
- lib/lazy_google_analytics/engine.rb
|
120
|
+
- lib/lazy_google_analytics/railtie.rb
|
80
121
|
- lib/lazy_google_analytics/version.rb
|
81
122
|
- spec/.DS_Store
|
82
123
|
- spec/fixtures/.DS_Store
|
@@ -99,7 +140,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
140
|
version: '0'
|
100
141
|
segments:
|
101
142
|
- 0
|
102
|
-
hash:
|
143
|
+
hash: -2207734988759702426
|
103
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
145
|
none: false
|
105
146
|
requirements:
|
@@ -108,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
149
|
version: '0'
|
109
150
|
segments:
|
110
151
|
- 0
|
111
|
-
hash:
|
152
|
+
hash: -2207734988759702426
|
112
153
|
requirements: []
|
113
154
|
rubyforge_project:
|
114
155
|
rubygems_version: 1.8.25
|