Implements targets and campaigns for conference
This commit is contained in:
parent
678fe38a25
commit
857ac43e74
40 changed files with 1086 additions and 44 deletions
77
app/models/campaign.rb
Normal file
77
app/models/campaign.rb
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
class Campaign < ActiveRecord::Base
|
||||
attr_accessible :name, :utm_source, :utm_medium, :utm_term,
|
||||
:utm_content, :utm_campaign, :target_ids
|
||||
|
||||
validates :name, :utm_campaign, presence: true
|
||||
|
||||
has_many :targets
|
||||
belongs_to :conference
|
||||
|
||||
##
|
||||
# Returns the utm parameters formatted as url.
|
||||
#
|
||||
# ====Returns
|
||||
# * +String+ -> url parameters e.g. ?utm_source=facebook
|
||||
def url_parameters
|
||||
kv = []
|
||||
get_parameters.each_pair do |k, v|
|
||||
kv += ["#{k}=#{v}"]
|
||||
end
|
||||
'?' + kv.join('&') unless kv.empty?
|
||||
end
|
||||
|
||||
##
|
||||
# Returns the counted visits generated by this campaign.
|
||||
#
|
||||
# ====Returns
|
||||
# * +Fixnum+ -> visits
|
||||
def visits_count
|
||||
Visit.where(get_parameters).where('started_at > ?', created_at).count
|
||||
end
|
||||
|
||||
##
|
||||
# Returns the counted registrations generated by this campaign.
|
||||
#
|
||||
# ====Returns
|
||||
# * +Fixnum+ -> visits
|
||||
def registrations_count
|
||||
events_by_name('Registered')
|
||||
end
|
||||
|
||||
##
|
||||
# Returns the counted event submissions generated by this campaign.
|
||||
#
|
||||
# ====Returns
|
||||
# * +Fixnum+ -> visits
|
||||
def submissions_count
|
||||
events_by_name('Event submission')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
##
|
||||
# Helper method for submissions and registrations.
|
||||
#
|
||||
# ====Returns
|
||||
# * +Fixnum+ -> registrations / submissions
|
||||
def events_by_name(event_name)
|
||||
parameters = get_parameters
|
||||
parameters['ahoy_events.name'] = event_name
|
||||
Visit.joins(:ahoy_events).where(parameters).where('started_at > ?', created_at).count
|
||||
end
|
||||
|
||||
##
|
||||
# Helper method to get the parameters for queries.
|
||||
#
|
||||
# ====Returns
|
||||
# * +Hash+ -> parameter => value
|
||||
def get_parameters
|
||||
conditions = {}
|
||||
conditions[:utm_source] = self[:utm_source] unless self[:utm_source].blank?
|
||||
conditions[:utm_medium] = self[:utm_medium] unless self[:utm_medium].blank?
|
||||
conditions[:utm_term] = self[:utm_term] unless self[:utm_term].blank?
|
||||
conditions[:utm_content] = self[:utm_content] unless self[:utm_content].blank?
|
||||
conditions[:utm_campaign] = self[:utm_campaign] unless self[:utm_campaign].blank?
|
||||
conditions
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue