staccato-rack 0.1.1 → 0.2.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
- YzQ4NDljNWM0OTk5YTQzYzI4ZWQzZjE1NzNmMzYyNDc0Mjk2ZGQwNw==
4
+ OTgwMzI4NDk3OWE0OWE1NDY2MzFjNTU2NzI1YTRkNDljOTUzNjg2Mw==
5
5
  data.tar.gz: !binary |-
6
- MjgzM2M2MmRhZjRhOTExZDBhNmM5Y2I1ZGFmYTYzMzZkOGFkY2NmZA==
6
+ YzA3ZGRkNzI5MTc0NTcwMjA3ZDgyNDhjYmY4MWNmNjNiNjI1NTUwYw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZWM5M2EwMzg4ZDMyNWU4Zjk4Y2I3ODk1OTY1YTQ2NWUyN2MxY2Q2Y2RmNzI4
10
- YzY2NzU5NTg5MGY0ZjJjYmY3MzYwOGM1Y2FiZDgzNzk5OTgzOWZlYjE5Mzlh
11
- NzlhMGZjNzU3ZmE3MDY4OTM1OGZkNmU0NTkzNTVlOWFlZGY3OTU=
9
+ Y2VlOTI0MDNmYzEyYzQyY2JlODEyNGU1NGYyMjU2OGJlYWExMWQ4ZDQzMzRh
10
+ NjBhMmZiY2VjMjY1ZDFkMmJmODEwODJiY2I2ODk0NTRiMWU0OWYyOGRiMDJl
11
+ OTk4ZGIwMTkzYTI3OWQzZGQwZDFkZWIyZDI5MDQyZTNiZTY1ZmQ=
12
12
  data.tar.gz: !binary |-
13
- YWIzMWYyZDY4OWUyNTNmNDcxODJkYWJkNzA0NjUzZmY1YTIwNGIyYjY4MzI5
14
- YWI5YzYzY2JlYjM3Y2MwYTBiMzkwODRhNDk4NzdkZjExZGEyYjRkN2ZiMGI2
15
- ODQyNWFiMmViMjg3ZWEyZDQwZjIxMTYwMzIzZTdiZTdiOTZmNzk=
13
+ MDJjZjBkNGFjYWI3Y2I2YWRhNmQzMzk3Y2JiNWU0YzQyYzlkNzMyNDc0Yzky
14
+ MjYzYjAwZTYyN2NmYTJhOWY1Y2ViNDQwNjZlYjBlMjM1ZjVhZjk4OTQwMGYy
15
+ YzUzZWNjMDQzZWVkMDQ2ZmMzODYyMDkwNDM3NTdjNjMxZWJhODE=
data/lib/staccato/rack.rb CHANGED
@@ -1,42 +1,81 @@
1
1
  require 'staccato/rack/version'
2
2
  require 'staccato'
3
3
  require 'rack/request'
4
+ require 'ostruct'
4
5
 
5
6
  module Staccato
6
7
  module Rack
7
8
  # middleware
8
9
  class Middleware
10
+ # page view wrapper
11
+ class PageView < OpenStruct
12
+ def initialize
13
+ super
14
+ @custom_metrics = []
15
+ @custom_dimensions = []
16
+ end
17
+
18
+ def add_custom_metric(position, value)
19
+ @custom_metrics << [position, value]
20
+ end
21
+
22
+ def add_custom_dimension(position, value)
23
+ @custom_dimensions << [position, value]
24
+ end
25
+
26
+ def track!(default_tracker, tracking_id, request)
27
+ page_view_params = marshal_dump
28
+ if page_view_params[:client_id]
29
+ tracker = Staccato.tracker(tracking_id, page_view_params[:client_id])
30
+ else
31
+ tracker = default_tracker
32
+ end
33
+ track_hit(tracker, page_view_params, request)
34
+ end
35
+
36
+ private
37
+
38
+ def track_hit(tracker, page_view_params, request)
39
+ hit = Staccato::Pageview.new(tracker, page_view_params.merge(path: request.fullpath,
40
+ hostname: request.host,
41
+ user_agent: request.env['HTTP_USER_AGENT'],
42
+ user_ip: request.ip))
43
+ add_custom_to_hit(hit)
44
+ hit.track!
45
+ hit
46
+ end
47
+
48
+ def add_custom_to_hit(hit)
49
+ @custom_metrics.each do |p, v|
50
+ hit.add_custom_metric(p, v)
51
+ end
52
+ @custom_dimensions.each do |p, v|
53
+ hit.add_custom_dimension(p, v)
54
+ end
55
+ end
56
+ end
57
+
9
58
  attr_accessor :last_hit
10
59
 
11
60
  def initialize(app, tracking_id)
12
61
  @app = app
13
- @tracker = Staccato.tracker(tracking_id)
62
+ @tracking_id = tracking_id
63
+ @default_tracker = Staccato.tracker(tracking_id)
14
64
  end
15
65
 
16
66
  def call(env)
17
- # First, call `@app`
18
- load_staccato_into_env(env)
67
+ env['staccato.pageview'] = PageView.new
19
68
 
20
- # @last_hit = nil
69
+ @last_hit = nil
21
70
  status, headers, body = @app.call(env)
22
71
 
23
- env['staccato.tracker'].track(env['staccato.pageview'].params) if (200..299).include?(status.to_i)
72
+ if (200..299).include?(status.to_i)
73
+ @last_hit = env['staccato.pageview'].track!(@default_tracker, @tracking_id, ::Rack::Request.new(env))
74
+ end
24
75
 
25
76
  # return result
26
77
  [status, headers, body]
27
78
  end
28
-
29
- private
30
-
31
- def load_staccato_into_env(env)
32
- request = ::Rack::Request.new(env)
33
- env['staccato.tracker'] = @tracker
34
- env['staccato.pageview'] = Staccato::Pageview.new(@tracker,
35
- path: request.fullpath,
36
- hostname: request.host,
37
- user_agent: request.env['HTTP_USER_AGENT'],
38
- user_ip: request.ip)
39
- end
40
79
  end
41
80
  end
42
81
  end
@@ -2,6 +2,6 @@
2
2
  module Staccato
3
3
  # rack module
4
4
  module Rack
5
- VERSION = '0.1.1'
5
+ VERSION = '0.2.0'
6
6
  end
7
7
  end
@@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'minitest', '>= 0.8.0'
27
27
  spec.add_development_dependency 'minitest-reporters'
28
28
  spec.add_development_dependency 'rack-test'
29
- spec.add_development_dependency 'bundler', '~> 1.8'
29
+ spec.add_development_dependency 'bundler', '~> 1.6'
30
30
  spec.add_development_dependency 'rake', '~> 10.0'
31
31
  end
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.1.1
4
+ version: 0.2.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-07 00:00:00.000000000 Z
11
+ date: 2015-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - ~>
102
102
  - !ruby/object:Gem::Version
103
- version: '1.8'
103
+ version: '1.6'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- version: '1.8'
110
+ version: '1.6'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement