staccato-rack 0.1.1 → 0.2.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
- 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