Class: Chaskiq::Campaign

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/chaskiq/campaign.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#stepObject

accepts_nested_attributes_for :template, :campaign_template



15
16
17
# File 'app/models/chaskiq/campaign.rb', line 15

def step
  @step
end

Instance Method Details

#apply_premailer(opts = {}) ⇒ Object



88
89
90
91
92
93
94
# File 'app/models/chaskiq/campaign.rb', line 88

def apply_premailer(opts={})
  host = Rails.application.routes.default_url_options[:host]
  skip_track_image = opts[:exclude_gif] ? "exclude_gif=true" : nil
  premailer_url = ["#{host}/manage/campaigns/#{self.id}/premailer_preview", skip_track_image].join("?")
  url = URI.parse(premailer_url)
  self.update_column(:premailer, clean_inline_css(url))
end

#attributes_for_mailer(subscriber) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
# File 'app/models/chaskiq/campaign.rb', line 102

def attributes_for_mailer(subscriber)

  subscriber_url = "#{campaign_url}/subscribers/#{subscriber.encoded_id}"
  track_image    = "#{campaign_url}/tracks/#{subscriber.encoded_id}/open.gif"

  { campaign_url: campaign_url,
    campaign_unsubscribe: "#{subscriber_url}/delete",
    campaign_subscribe: "#{campaign_url}/subscribers/new",
    campaign_description: "#{self.description}",
    track_image_url: track_image
  }
end

#campaign_urlObject



83
84
85
86
# File 'app/models/chaskiq/campaign.rb', line 83

def campaign_url
  host = Rails.application.routes.default_url_options[:host]
  campaign_url = "#{host}/campaigns/#{self.id}"
end

#clean_inline_css(url) ⇒ Object

will remove content blocks text



97
98
99
100
# File 'app/models/chaskiq/campaign.rb', line 97

def clean_inline_css(url)
  premailer = Premailer.new(url, :adapter => :nokogiri, :escape_url_attributes => false)
  premailer.to_inline_css.gsub("Drop Content Blocks Here", "")
end

#clone_newsletterObject



57
58
59
60
61
# File 'app/models/chaskiq/campaign.rb', line 57

def clone_newsletter
  cloned_record = self.deep_clone #(:include => :subscribers)
  cloned_record.name = self.name + "-copy"
  cloned_record
end

#compiled_template_for(subscriber) ⇒ Object



123
124
125
# File 'app/models/chaskiq/campaign.rb', line 123

def compiled_template_for(subscriber)
  html = mustache_template_for(subscriber)
end

#copy_templateObject



78
79
80
81
# File 'app/models/chaskiq/campaign.rb', line 78

def copy_template
  self.html_content = self.template.body
  self.css = self.template.css
end

#delivery_progressObject



28
29
30
31
# File 'app/models/chaskiq/campaign.rb', line 28

def delivery_progress
  return 0 if metrics.deliveries.size.zero?
  subscriptions.availables.size.to_f / metrics.deliveries.size.to_f * 100.0
end

#detect_changed_templateObject



63
64
65
66
67
# File 'app/models/chaskiq/campaign.rb', line 63

def detect_changed_template
  if self.changes.include?("template_id")
    copy_template
  end
end

#hostObject



127
128
129
# File 'app/models/chaskiq/campaign.rb', line 127

def host
  Rails.application.routes.default_url_options[:host] || "http://localhost:3000"
end

#mustache_template_for(subscriber) ⇒ Object



115
116
117
118
119
120
121
# File 'app/models/chaskiq/campaign.rb', line 115

def mustache_template_for(subscriber)

  link_prefix = host + "/campaigns/#{self.id}/tracks/#{subscriber.encoded_id}/click?r="
  html = Chaskiq::LinkRenamer.convert(premailer, link_prefix)

  Mustache.render(html, subscriber.attributes.merge(attributes_for_mailer(subscriber)) )
end

#prepare_mail_to(subscription) ⇒ Object



74
75
76
# File 'app/models/chaskiq/campaign.rb', line 74

def prepare_mail_to(subscription)
  Chaskiq::CampaignMailer.newsletter(self, subscription)
end

#purge_metricsObject



45
46
47
# File 'app/models/chaskiq/campaign.rb', line 45

def purge_metrics
  self.metrics.delete_all
end

#push_notification(subscription) ⇒ Object

deliver email + create metric



70
71
72
# File 'app/models/chaskiq/campaign.rb', line 70

def push_notification(subscription)
  Chaskiq::SesSenderJob.perform_later(self, subscription)
end

#send_newsletterObject



49
50
51
# File 'app/models/chaskiq/campaign.rb', line 49

def send_newsletter
  Chaskiq::MailSenderJob.perform_later(self)
end

#sparklines_by_day(opts = {}) ⇒ Object

CHART STUFF



132
133
134
135
# File 'app/models/chaskiq/campaign.rb', line 132

def sparklines_by_day(opts={})
  range = opts[:range] ||= 2.weeks.ago.midnight..Time.now
  self.metrics.group_by_day(:created_at, range: range ).count.map{|o| o.to_a.last}
end

#step_1?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'app/models/chaskiq/campaign.rb', line 37

def step_1?
  self.step == 1
end

#subscriber_status_for(subscriber) ⇒ Object



33
34
35
# File 'app/models/chaskiq/campaign.rb', line 33

def subscriber_status_for(subscriber)
  #binding.pry
end

#template_step?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'app/models/chaskiq/campaign.rb', line 41

def template_step?
  self.step == "template"
end

#test_newsletterObject



53
54
55
# File 'app/models/chaskiq/campaign.rb', line 53

def test_newsletter
  Chaskiq::CampaignMailer.test(self).deliver_later
end