Sha256: 33b5906d2cb57d5b0743d025f13f39aaca69d82619959e92010b298de2b737cc

Contents?: true

Size: 1.51 KB

Versions: 16

Compression:

Stored size: 1.51 KB

Contents

# A visit to the site
# 
# Page views belong to a tracking cookie, from which it derives its
# campaign code, and whether or not it is a "new visit" for the given
# campaign code.
#
# === Also stored from the request:
#
# [request_path] The full request path
# [user_agent]   The request user agent
# [referer]      The request referer if it exists
# [remote_ip]    The originating ip address of the request
# [session]      The session id of the request
#
class PageView < ActiveRecord::Base
  include E9Rails::ActiveRecord::Scopes::Times

  belongs_to :tracking_cookie

  belongs_to :campaign, :inverse_of => :page_views
  has_one :user, :through => :tracking_cookie

  attr_accessor :should_cache 

  after_create :increment_campaign_visit_cache, :if => '!!should_cache'

  scope :by_user, lambda {|*users| 
    users.flatten!
    users.map! &:to_param
    joins(:tracking_cookie).where(TrackingCookie.arel_table[:user_id].send *(users.length == 1 ? [:eq, users.pop] : [:in, users]))
  }

  scope :by_campaign, lambda {|*campaigns| 
    campaigns.flatten!
    campaigns.map! &:to_param
    where(arel_table[:campaign_id].send *(campaigns.length == 1 ? [:eq, campaigns.pop] : [:in, campaigns]))
  }

  scope :new_visits,    lambda {|v=true| where(:new_visit => v) }
  scope :repeat_visits, lambda { new_visits(false) }

  delegate :name, :code, :to => :campaign, :prefix => true, :allow_nil => true

  protected

  def increment_campaign_visit_cache
    Campaign.increment_counter(new_visit ? :new_visits : :repeat_visits, campaign_id)
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
e9_crm-0.1.21 app/models/page_view.rb
e9_crm-0.1.20 app/models/page_view.rb
e9_crm-0.1.19 app/models/page_view.rb
e9_crm-0.1.18 app/models/page_view.rb
e9_crm-0.1.17 app/models/page_view.rb
e9_crm-0.1.16 app/models/page_view.rb
e9_crm-0.1.14 app/models/page_view.rb
e9_crm-0.1.13 app/models/page_view.rb
e9_crm-0.1.12 app/models/page_view.rb
e9_crm-0.1.11 app/models/page_view.rb
e9_crm-0.1.10 app/models/page_view.rb
e9_crm-0.1.8 app/models/page_view.rb
e9_crm-0.1.7 app/models/page_view.rb
e9_crm-0.1.6 app/models/page_view.rb
e9_crm-0.1.5 app/models/page_view.rb
e9_crm-0.1.4 app/models/page_view.rb