Class: RedisAnalytics::Tracker

Inherits:
Object
  • Object
show all
Defined in:
lib/redis_analytics/tracker.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Tracker

Returns a new instance of Tracker.



6
7
8
# File 'lib/redis_analytics/tracker.rb', line 6

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



10
11
12
# File 'lib/redis_analytics/tracker.rb', line 10

def call(env)
  dup.call!(env)
end

#call!(env) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/redis_analytics/tracker.rb', line 14

def call!(env)
  @env = env
  @request  = Rack::Request.new(env)
  status, headers, body = @app.call(env)
  @response = Rack::Response.new(body, status, headers)
  record if should_record?
  @response.finish
end

#recordObject



37
38
39
40
41
42
# File 'lib/redis_analytics/tracker.rb', line 37

def record
  v = Visit.new(@request, @response)
  @response = v.record
  @response.set_cookie(RedisAnalytics.current_visit_cookie_name, v.updated_current_visit_info)
  @response.set_cookie(RedisAnalytics.first_visit_cookie_name, v.updated_first_visit_info)
end

#should_record?Boolean

Returns:

  • (Boolean)


23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/redis_analytics/tracker.rb', line 23

def should_record?
  dashboard_path = Rails.application.routes.named_routes[:redis_analytics].path rescue nil
  return false if dashboard_path =~ @request.path
  return false unless @response.ok?
  return false unless @response.content_type =~ /^text\/html/
  RedisAnalytics.path_filters.each do |filter|
    return false if filter.matches?(@request.path)
  end
  RedisAnalytics.filters.each do |filter|
    return false if filter.matches?(@request, @response)
  end
  return true
end