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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZjlmYTEyODk5YWM2NWVhYjMxMGViZjRkMDY4MTZlMjNjYmQzZGRjYw==
4
+ ODkzYjE2ZmI0MmZkNzNmY2Q0ODQ3ZmRhYWVkOTZkYTE1ZjRjNzBiMQ==
5
5
  data.tar.gz: !binary |-
6
- Yzg1YWQyODM4YmRhOThjMTFhODhjY2IyNWZjMzVmNzdkOWMxMzdmNw==
6
+ ZDkzNTA5MjMxNjY2YjQ0ZDcxYWFiNWFkNGU4OGYzZDIxYWY0MjJkNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZGQxZTc2MjQwNzNiMzMzZmQ0OTNlNWIxMTU4Y2ExODhlN2EzOTgzNzAyNGJj
10
- YjA4ODg3YTQ3MTFiMmViMjc0ODVjNTcxNTMyODg4Mzk5MmM4MThmZmVlYWNk
11
- MTJiNjk5MmU0YThmNTcyYWIxZWQzYTg3MGJlZjU0Y2ZlNDU3NDc=
9
+ YWZmYjYwMTBiNzQxZjFiMDdhMmYyMDE2MzU3NjA1NzM1OGUxZmNhMTA4ODM5
10
+ MTM1ZDdmNjNiNGIwODVlYmQ5MDUwNjhhMjA2ZGVjOWI1ZTMzYjdiNjVkOWM0
11
+ MGE5ZDRhOGExNjUzYmM0OTk3OGJlNjdmMzY2ZDk5NTQ1MGQ3OTI=
12
12
  data.tar.gz: !binary |-
13
- M2ZiNjg4ZmRmZjY3ZDA2Y2E0ZjNlMWFmMWQ3NjEyNmNmNTY5OWQ2MWIzMmMx
14
- NjA4NjdlNDgzMThjZTEzNDIzOTFmMTEyY2E4ODZjNjMzODhlYzgwYThmZDI0
15
- ZGFmM2RlYmFkZDRkNTVhNDQwNmExNjYwZjAyY2EzNzgwNmE4ODk=
13
+ NjhkNjlhNDMwN2YyYzlkZDgzYTA4MTYyMGQ2NGRiODNiMzM0YWFmNTZjNjAz
14
+ ZTEyNGUxN2ZmNmI4Y2JlM2Q0NjI1MjFlZGVlYTdiYTNmMDlmYjViMTg1MzVj
15
+ OTEzYTNkMDUyNzU4ODM0Yzk1NjI3ZGU5YWFjODQ0NzZjZWUzNjY=
data/lib/staccato/rack.rb CHANGED
@@ -1,68 +1,13 @@
1
- require 'staccato/rack/version'
2
- require 'staccato'
1
+ require 'logger'
3
2
  require 'rack/request'
4
- require 'ostruct'
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
- @default_tracker = Staccato.tracker(tracking_id)
76
- @logger = options[:logger] || NullLogger.new
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
@@ -2,6 +2,6 @@
2
2
  module Staccato
3
3
  # rack module
4
4
  module Rack
5
- VERSION = '0.3.2'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
@@ -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.3.2
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-10 00:00:00.000000000 Z
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