lib/staccato/rack.rb in staccato-rack-0.3.2 vs lib/staccato/rack.rb in staccato-rack-0.4.0
- old
+ new
@@ -1,80 +1,27 @@
-require 'staccato/rack/version'
-require 'staccato'
+require 'logger'
require 'rack/request'
-require 'ostruct'
+require 'staccato'
+require 'staccato/rack/version'
+require 'staccato/rack/faraday_http_adapter'
+require 'staccato/rack/page_view'
+
module Staccato
module Rack
- # Proxy Class to do page views
- class PageView < OpenStruct
- def initialize
- super
- @custom_metrics = []
- @custom_dimensions = []
- end
-
- def add_custom_metric(position, value)
- @custom_metrics << [position, value]
- end
-
- def add_custom_dimension(position, value)
- @custom_dimensions << [position, value]
- end
-
- def track!(default_tracker, tracking_id, request)
- page_view_params = marshal_dump
- if page_view_params[:client_id]
- tracker = Staccato.tracker(tracking_id, page_view_params[:client_id])
- else
- tracker = default_tracker
- end
- track_hit(tracker, page_view_params, request)
- end
-
- private
-
- def track_hit(tracker, page_view_params, request)
- hit = Staccato::Pageview.new(tracker, { path: request.fullpath,
- user_agent: request.env['HTTP_USER_AGENT'],
- user_ip: request.ip }.merge(page_view_params))
- add_custom_to_hit(hit)
- r = hit.track!
- log_response(r, hit)
- hit
- end
-
- def add_custom_to_hit(hit)
- @custom_metrics.each do |p, v|
- hit.add_custom_metric(p, v)
- end
- @custom_dimensions.each do |p, v|
- hit.add_custom_dimension(p, v)
- end
- end
-
- def log_response(r, hit)
- logger.info "GA Tracking: #{hit.params.inspect} => #{r.response.code if r}"
- end
- end
-
- # Null Logger clas
- class NullLogger
- def info(*)
- end
- end
-
# middleware
class Middleware
# page view wrapper
attr_accessor :last_hit
def initialize(app, tracking_id, options = {})
@app = app
@tracking_id = tracking_id
- @default_tracker = Staccato.tracker(tracking_id)
- @logger = options[:logger] || NullLogger.new
+ @logger = options[:logger]
+ @default_tracker = Staccato.tracker(tracking_id) do |c|
+ c.adapter = FaradayHttpAdaper.new(@logger)
+ end
end
def call(env)
env['staccato.pageview'] = PageView.new.tap { |p| p.logger = @logger }