staccato-rack 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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