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 }