Sha256: 614045b83a59129fdab0a727ff81f82df6ad2d79ba59406a5a33b44ccf9cfc3d
Contents?: true
Size: 1.94 KB
Versions: 1
Compression:
Stored size: 1.94 KB
Contents
require_relative 'campaign' require_relative 'browser' require_relative 'serializers/symbol' require 'addressable/uri' module Sojourn class Request < ActiveRecord::Base attr_accessor :user_agent serialize :method, Serializers::Symbol serialize :params belongs_to :campaign, foreign_key: :sojourn_campaign_id belongs_to :browser, foreign_key: :sojourn_browser_id has_many :events, foreign_key: :sojourn_request_id def self.from_request(request) new referer: request.referer.try(:truncate, 2048), host: request.host.try(:truncate, 2048), path: request.path.try(:truncate, 2048), controller: request.params[:controller], action: request.params[:action], params: request.filtered_parameters.with_indifferent_access.except(:controller, :action), method: request.request_method_symbol, ip_address: request.remote_ip, user_agent: request.user_agent end before_validation do self.campaign ||= Campaign.from_request(self) self.browser ||= Browser.from_request(self) if user_agent end def outside_referer? referer.present? && Addressable::URI.parse(referer).host != host end def any_utm_data? tracked_param_keys.map { |p| downcased_params[p].present? }.any? end def tracked_params Hash[downcased_params.slice(*tracked_param_keys).delete_if { |_, v| v.blank? }.sort] end def browser_data return @browser_data if @browser_data b = browser.try(:send, :browser) || ::Browser.new(user_agent: user_agent) @browser_data = { name: b.name, version: b.version, platform: b.platform, bot: b.bot?, known: b.known? } end private def downcased_params params.each_with_object({}) { |(k, v), h| h[k.to_s.downcase] = v } end def tracked_param_keys Sojourn.config.campaign_params.map(&:to_s).map(&:downcase) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sojourn-1.0.0.pre | lib/sojourn/request.rb |