Class: Chaskiq::Campaign
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Chaskiq::Campaign
- Defined in:
- app/models/chaskiq/campaign.rb
Instance Attribute Summary collapse
-
#step ⇒ Object
accepts_nested_attributes_for :template, :campaign_template.
Instance Method Summary collapse
- #apply_premailer(opts = {}) ⇒ Object
- #attributes_for_mailer(subscriber) ⇒ Object
- #campaign_url ⇒ Object
-
#clean_inline_css(url) ⇒ Object
will remove content blocks text.
- #clone_newsletter ⇒ Object
- #compiled_template_for(subscriber) ⇒ Object
- #copy_template ⇒ Object
- #delivery_progress ⇒ Object
- #detect_changed_template ⇒ Object
- #host ⇒ Object
- #mustache_template_for(subscriber) ⇒ Object
- #prepare_mail_to(subscription) ⇒ Object
- #purge_metrics ⇒ Object
-
#push_notification(subscription) ⇒ Object
deliver email + create metric.
- #send_newsletter ⇒ Object
-
#sparklines_by_day(opts = {}) ⇒ Object
CHART STUFF.
- #step_1? ⇒ Boolean
- #subscriber_status_for(subscriber) ⇒ Object
- #template_step? ⇒ Boolean
- #test_newsletter ⇒ Object
Instance Attribute Details
#step ⇒ Object
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.[: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_url ⇒ Object
83 84 85 86 |
# File 'app/models/chaskiq/campaign.rb', line 83 def campaign_url host = Rails.application.routes.[: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_newsletter ⇒ Object
57 58 59 60 61 |
# File 'app/models/chaskiq/campaign.rb', line 57 def 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_template ⇒ Object
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_progress ⇒ Object
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_template ⇒ Object
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 |
#host ⇒ Object
127 128 129 |
# File 'app/models/chaskiq/campaign.rb', line 127 def host Rails.application.routes.[: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.(self, subscription) end |
#purge_metrics ⇒ Object
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_newsletter ⇒ Object
49 50 51 |
# File 'app/models/chaskiq/campaign.rb', line 49 def 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
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
41 42 43 |
# File 'app/models/chaskiq/campaign.rb', line 41 def template_step? self.step == "template" end |
#test_newsletter ⇒ Object
53 54 55 |
# File 'app/models/chaskiq/campaign.rb', line 53 def Chaskiq::CampaignMailer.test(self).deliver_later end |