class Referrer::MarkupGenerator
Constants
- ORGANICS
- REFERRALS
- UTM_KEYS
Attributes
array_params_joiner[RW]
organics[RW]
referrals[RW]
utm_synonyms[RW]
Public Class Methods
new()
click to toggle source
# File lib/other/markup_generator.rb, line 33 def initialize @organics = ORGANICS @referrals = REFERRALS @utm_synonyms = UTM_KEYS.inject({}){|r, key| r.merge({key => []})} @array_params_joiner = ', ' end
Public Instance Methods
generate(referrer, entry_point)
click to toggle source
# File lib/other/markup_generator.rb, line 40 def generate(referrer, entry_point) referrer_uri, entry_point_uri = *[referrer, entry_point].map{|url| URI(URI::encode(url || ''))} referrer_params, entry_point_params = *[referrer_uri, entry_point_uri].map{|uri| uri_params(uri)} prepare_result(utm(entry_point_params) || organic(referrer_uri, referrer_params) || referral(referrer_uri) || direct) end
Private Instance Methods
base_result()
click to toggle source
# File lib/other/markup_generator.rb, line 53 def base_result UTM_KEYS.inject({}){|r, key| r.merge!(key => '(none)')} end
check_host(option, value)
click to toggle source
# File lib/other/markup_generator.rb, line 57 def check_host(option, value) case option when String option == value when Regexp option =~ value else false end end
direct()
click to toggle source
# File lib/other/markup_generator.rb, line 108 def direct base_result.merge!('utm_source' => '(direct)', 'kind' => 'direct') end
organic(referrer_uri, referrer_params)
click to toggle source
# File lib/other/markup_generator.rb, line 87 def organic(referrer_uri, referrer_params) if referrer_uri.to_s.present? current_organic = organics.detect{|organic| check_host(organic[:host], referrer_uri.host)} base_result.merge!({'utm_source' => current_organic[:display] || current_organic[:host].split('.')[-2], 'utm_medium' => 'organic', 'utm_term' => referrer_params[current_organic[:param]] || '(none)', 'kind' => 'organic'}) if current_organic.present? end end
prepare_result(markup)
click to toggle source
# File lib/other/markup_generator.rb, line 68 def prepare_result(markup) Hash[markup.map{|k, v| [k, v.is_a?(Array) ? v.join(array_params_joiner) : v]}].symbolize_keys end
referral(referrer_uri)
click to toggle source
# File lib/other/markup_generator.rb, line 97 def referral(referrer_uri) if referrer_uri.to_s.present? custom_referral = referrals.detect{|referral| check_host(referral[:host], referrer_uri.host)} base_result.merge!( 'utm_source' => custom_referral ? custom_referral[:display] : referrer_uri.host.gsub('www.', ''), 'utm_medium' => 'referral', 'utm_content' => URI::decode(referrer_uri.request_uri) || '(none)', 'kind' => 'referral') end end
uri_params(uri)
click to toggle source
# File lib/other/markup_generator.rb, line 49 def uri_params(uri) Rack::Utils.parse_query(uri.try(:query)) end
utm(entry_point_params)
click to toggle source
# File lib/other/markup_generator.rb, line 72 def utm(entry_point_params) if (entry_point_params.keys & (UTM_KEYS + utm_synonyms.values.flatten)).present? UTM_KEYS.inject(base_result) do |r, key| values = if utm_synonyms[key.to_sym].present? [].push(entry_point_params[key]).push([utm_synonyms[key.to_sym]].flatten.map do |synonym_key| entry_point_params[synonym_key] end) else [entry_point_params[key]] end.flatten.compact.map{|value| URI::decode(value)} values.present? ? r.merge!({key => values}) : r end.merge('kind' => 'utm') end end