staccato-rack 0.3.2 → 0.4.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.
- checksums.yaml +8 -8
- data/lib/staccato/rack.rb +10 -63
- data/lib/staccato/rack/faraday_http_adapter.rb +27 -0
- data/lib/staccato/rack/page_view.rb +54 -0
- data/lib/staccato/rack/version.rb +1 -1
- data/staccato-rack.gemspec +4 -1
- metadata +46 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODkzYjE2ZmI0MmZkNzNmY2Q0ODQ3ZmRhYWVkOTZkYTE1ZjRjNzBiMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDkzNTA5MjMxNjY2YjQ0ZDcxYWFiNWFkNGU4OGYzZDIxYWY0MjJkNQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWZmYjYwMTBiNzQxZjFiMDdhMmYyMDE2MzU3NjA1NzM1OGUxZmNhMTA4ODM5
|
10
|
+
MTM1ZDdmNjNiNGIwODVlYmQ5MDUwNjhhMjA2ZGVjOWI1ZTMzYjdiNjVkOWM0
|
11
|
+
MGE5ZDRhOGExNjUzYmM0OTk3OGJlNjdmMzY2ZDk5NTQ1MGQ3OTI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjhkNjlhNDMwN2YyYzlkZDgzYTA4MTYyMGQ2NGRiODNiMzM0YWFmNTZjNjAz
|
14
|
+
ZTEyNGUxN2ZmNmI4Y2JlM2Q0NjI1MjFlZGVlYTdiYTNmMDlmYjViMTg1MzVj
|
15
|
+
OTEzYTNkMDUyNzU4ODM0Yzk1NjI3ZGU5YWFjODQ0NzZjZWUzNjY=
|
data/lib/staccato/rack.rb
CHANGED
@@ -1,68 +1,13 @@
|
|
1
|
-
require '
|
2
|
-
require 'staccato'
|
1
|
+
require 'logger'
|
3
2
|
require 'rack/request'
|
4
|
-
require '
|
3
|
+
require 'staccato'
|
4
|
+
|
5
|
+
require 'staccato/rack/version'
|
6
|
+
require 'staccato/rack/faraday_http_adapter'
|
7
|
+
require 'staccato/rack/page_view'
|
5
8
|
|
6
9
|
module Staccato
|
7
10
|
module Rack
|
8
|
-
# Proxy Class to do page views
|
9
|
-
class PageView < OpenStruct
|
10
|
-
def initialize
|
11
|
-
super
|
12
|
-
@custom_metrics = []
|
13
|
-
@custom_dimensions = []
|
14
|
-
end
|
15
|
-
|
16
|
-
def add_custom_metric(position, value)
|
17
|
-
@custom_metrics << [position, value]
|
18
|
-
end
|
19
|
-
|
20
|
-
def add_custom_dimension(position, value)
|
21
|
-
@custom_dimensions << [position, value]
|
22
|
-
end
|
23
|
-
|
24
|
-
def track!(default_tracker, tracking_id, request)
|
25
|
-
page_view_params = marshal_dump
|
26
|
-
if page_view_params[:client_id]
|
27
|
-
tracker = Staccato.tracker(tracking_id, page_view_params[:client_id])
|
28
|
-
else
|
29
|
-
tracker = default_tracker
|
30
|
-
end
|
31
|
-
track_hit(tracker, page_view_params, request)
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def track_hit(tracker, page_view_params, request)
|
37
|
-
hit = Staccato::Pageview.new(tracker, { path: request.fullpath,
|
38
|
-
user_agent: request.env['HTTP_USER_AGENT'],
|
39
|
-
user_ip: request.ip }.merge(page_view_params))
|
40
|
-
add_custom_to_hit(hit)
|
41
|
-
r = hit.track!
|
42
|
-
log_response(r, hit)
|
43
|
-
hit
|
44
|
-
end
|
45
|
-
|
46
|
-
def add_custom_to_hit(hit)
|
47
|
-
@custom_metrics.each do |p, v|
|
48
|
-
hit.add_custom_metric(p, v)
|
49
|
-
end
|
50
|
-
@custom_dimensions.each do |p, v|
|
51
|
-
hit.add_custom_dimension(p, v)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def log_response(r, hit)
|
56
|
-
logger.info "GA Tracking: #{hit.params.inspect} => #{r.response.code if r}"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# Null Logger clas
|
61
|
-
class NullLogger
|
62
|
-
def info(*)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
11
|
# middleware
|
67
12
|
class Middleware
|
68
13
|
# page view wrapper
|
@@ -72,8 +17,10 @@ module Staccato
|
|
72
17
|
def initialize(app, tracking_id, options = {})
|
73
18
|
@app = app
|
74
19
|
@tracking_id = tracking_id
|
75
|
-
@
|
76
|
-
@
|
20
|
+
@logger = options[:logger]
|
21
|
+
@default_tracker = Staccato.tracker(tracking_id) do |c|
|
22
|
+
c.adapter = FaradayHttpAdaper.new(@logger)
|
23
|
+
end
|
77
24
|
end
|
78
25
|
|
79
26
|
def call(env)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module Staccato
|
4
|
+
module Rack
|
5
|
+
# Proxy Class to do page views
|
6
|
+
class FaradayHttpAdaper
|
7
|
+
def initialize(logger = nil)
|
8
|
+
@logger = logger
|
9
|
+
@conn = Faraday.new(url: 'https://ssl.google-analytics.com') do |faraday|
|
10
|
+
faraday.request :url_encoded # form-encode POST params
|
11
|
+
faraday.response :logger, @logger if @logger
|
12
|
+
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def post(data)
|
17
|
+
Thread.new(data) do |body_data|
|
18
|
+
@conn.post do |req|
|
19
|
+
req.url '/collect'
|
20
|
+
req.options.timeout = 1 # open/read timeout in seconds
|
21
|
+
req.body = body_data
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Staccato
|
4
|
+
module Rack
|
5
|
+
# Proxy Class to do page views
|
6
|
+
class PageView < OpenStruct
|
7
|
+
def initialize
|
8
|
+
super
|
9
|
+
@custom_metrics = []
|
10
|
+
@custom_dimensions = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_custom_metric(position, value)
|
14
|
+
@custom_metrics << [position, value]
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_custom_dimension(position, value)
|
18
|
+
@custom_dimensions << [position, value]
|
19
|
+
end
|
20
|
+
|
21
|
+
def track!(default_tracker, tracking_id, request)
|
22
|
+
page_view_params = marshal_dump
|
23
|
+
if page_view_params[:client_id]
|
24
|
+
tracker = Staccato.tracker(tracking_id, page_view_params[:client_id]) do |c|
|
25
|
+
c.adapter = FaradayHttpAdaper.new(logger)
|
26
|
+
end
|
27
|
+
else
|
28
|
+
tracker = default_tracker
|
29
|
+
end
|
30
|
+
track_hit(tracker, page_view_params, request)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def track_hit(tracker, page_view_params, request)
|
36
|
+
hit = Staccato::Pageview.new(tracker, { path: request.fullpath,
|
37
|
+
user_agent: request.env['HTTP_USER_AGENT'],
|
38
|
+
user_ip: request.ip }.merge(page_view_params))
|
39
|
+
add_custom_to_hit(hit)
|
40
|
+
hit.track!
|
41
|
+
hit
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_custom_to_hit(hit)
|
45
|
+
@custom_metrics.each do |p, v|
|
46
|
+
hit.add_custom_metric(p, v)
|
47
|
+
end
|
48
|
+
@custom_dimensions.each do |p, v|
|
49
|
+
hit.add_custom_dimension(p, v)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/staccato-rack.gemspec
CHANGED
@@ -20,10 +20,13 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
22
|
spec.add_dependency 'rack'
|
23
|
-
spec.add_dependency 'staccato'
|
23
|
+
spec.add_dependency 'staccato', '>= 0.3.0'
|
24
|
+
spec.add_dependency 'faraday'
|
24
25
|
|
25
26
|
spec.add_development_dependency 'rubocop'
|
26
27
|
spec.add_development_dependency 'minitest', '>= 0.8.0'
|
28
|
+
spec.add_development_dependency 'rr'
|
29
|
+
spec.add_development_dependency 'webmock'
|
27
30
|
spec.add_development_dependency 'minitest-reporters'
|
28
31
|
spec.add_development_dependency 'rack-test'
|
29
32
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: staccato-rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grant Speelman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -26,6 +26,20 @@ dependencies:
|
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: staccato
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ! '>='
|
@@ -66,6 +80,34 @@ dependencies:
|
|
66
80
|
- - ! '>='
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: 0.8.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rr
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
69
111
|
- !ruby/object:Gem::Dependency
|
70
112
|
name: minitest-reporters
|
71
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,6 +183,8 @@ files:
|
|
141
183
|
- bin/console
|
142
184
|
- bin/setup
|
143
185
|
- lib/staccato/rack.rb
|
186
|
+
- lib/staccato/rack/faraday_http_adapter.rb
|
187
|
+
- lib/staccato/rack/page_view.rb
|
144
188
|
- lib/staccato/rack/version.rb
|
145
189
|
- staccato-rack.gemspec
|
146
190
|
homepage: https://github.com/unboxed/staccato-rack
|