class BananaPeels::Campaign

Constants

MERGE_TAG_REGEX

Public Class Methods

new(campaign_id, merge_tags, api_key) click to toggle source

merge_tags: optional, nil for default

# File lib/banana_peels/campaign.rb, line 17
def initialize(campaign_id, merge_tags, api_key)
  @campaign_id = campaign_id
  @raw_merge_tags = merge_tags
  @api_key = api_key
  @api = BananaPeels.api(api_key)
end
replace_merge_tags(string, merge_tags) click to toggle source
# File lib/banana_peels/campaign.rb, line 8
def replace_merge_tags(string, merge_tags)
  string.gsub(MERGE_TAG_REGEX) do
    merge_tags[$1.upcase]
  end
end

Public Instance Methods

default_mail_options() click to toggle source
# File lib/banana_peels/campaign.rb, line 51
def default_mail_options
  {
    from: from,
    subject: subject,
  }
end
find_merge_tags_in(string) click to toggle source
# File lib/banana_peels/campaign.rb, line 107
def find_merge_tags_in(string)
  string.scan(MERGE_TAG_REGEX).flatten.uniq
end
from() click to toggle source
# File lib/banana_peels/campaign.rb, line 66
def from
  BananaPeels.email_with_name(from_name, from_email)
end
from_email() click to toggle source
# File lib/banana_peels/campaign.rb, line 74
def from_email
  replace_merge_tags(mailchimp_meta['from_email'])
end
from_name() click to toggle source
# File lib/banana_peels/campaign.rb, line 70
def from_name
  replace_merge_tags(mailchimp_meta['from_name'])
end
html_content() click to toggle source
# File lib/banana_peels/campaign.rb, line 129
def html_content
  merge_tags = self.merge_tags.dup
  merge_tags.each do |k,v|
    merge_tags[k] = CGI.escapeHTML(v.to_s).gsub("\n","\n<br>")
  end
  replace_merge_tags(html_content_unmerged, merge_tags)
end
html_content_unmerged() click to toggle source
# File lib/banana_peels/campaign.rb, line 123
def html_content_unmerged
  content = mailchimp_content['html'].to_s
  content = content.sub(/(.*)<center>.*?canspamBarWrapper.*?<\/center>/m,'\1')
  content
end
id() click to toggle source
# File lib/banana_peels/campaign.rb, line 58
def id
  mailchimp_meta['id']
end
mailchimp_content() click to toggle source
# File lib/banana_peels/campaign.rb, line 46
def mailchimp_content
  # TODO: Cache.
  @mailchimp_content ||= @api.campaigns.content(@campaign_id, { view: 'raw' })
end
mailchimp_meta() click to toggle source
# File lib/banana_peels/campaign.rb, line 28
def mailchimp_meta
  @mailchimp_meta ||=
    begin
      meta = nil
      if BananaPeels::API.cache?
        campaigns_list_data = BananaPeels.campaigns_list(@api_key)
        meta = campaigns_list_data.find{|camp| camp['id'] == @campaign_id }
      end
      unless meta
        meta = @api.campaigns.list({ campaign_id: @campaign_id })['data'].first
      end
      meta
    end
end
mailchimp_meta=(mailchimp_meta) click to toggle source
# File lib/banana_peels/campaign.rb, line 42
def mailchimp_meta=(mailchimp_meta)
  @mailchimp_meta = mailchimp_meta
end
merge_tags() click to toggle source
# File lib/banana_peels/campaign.rb, line 24
def merge_tags
  @normalized_merge_tags ||= normalize_merge_tags(@raw_merge_tags || {})
end
merge_tags_in_content(options=nil) click to toggle source
# File lib/banana_peels/campaign.rb, line 86
def merge_tags_in_content(options=nil)
  options ||= {}
  excludes = options[:exclude] || []
  merge_tags = Hash.new{|h,k| h[k] = [] }
  contents = {
    to_name: mailchimp_meta['to_name'],
    subject: mailchimp_meta['subject'],
    html: html_content_unmerged,
    text: text_content_unmerged,
  }
  excludes.each do |ex|
    contents.delete(ex)
  end
  contents.each do |location, content|
    find_merge_tags_in(content).each do |tag|
      merge_tags[tag].push(location)
    end
  end
  merge_tags
end
normalize_merge_tags(merge_tags) click to toggle source
# File lib/banana_peels/campaign.rb, line 141
def normalize_merge_tags(merge_tags)
  normalized = {}
  if merge_tags
    merge_tags.each do |k,v|
      normalized[k.to_s.upcase] = v
    end
  end
  normalized['FNAME'] ||= normalized['FIRST_NAME']
  normalized['LNAME'] ||= normalized['LAST_NAME']
  normalized['MC:SUBJECT'] ||= subject(normalized)
  normalized['URL:MC_SUBJECT'] ||= CGI.escape(normalized['MC:SUBJECT'])
  normalized
end
replace_merge_tags(string, merge_tags=nil) click to toggle source
# File lib/banana_peels/campaign.rb, line 137
def replace_merge_tags(string, merge_tags=nil)
  self.class.replace_merge_tags(string, merge_tags || self.merge_tags)
end
subject(merge_tags=nil) click to toggle source
# File lib/banana_peels/campaign.rb, line 78
def subject(merge_tags=nil)
  replace_merge_tags(mailchimp_meta['subject'], merge_tags)
end
text_content() click to toggle source
# File lib/banana_peels/campaign.rb, line 119
def text_content
  replace_merge_tags(text_content_unmerged)
end
text_content_unmerged() click to toggle source
# File lib/banana_peels/campaign.rb, line 111
def text_content_unmerged
  content = mailchimp_content['text'].to_s
  content = content.sub(/=*\s*Unsubscribe\s\*\|HTML:EMAIL\|\*.*\z/m,'') # Auto-replaced if deleted.
  content = content.sub(/=*\s*This\semail\swas\ssent\sto\s\*\|EMAIL\|\*.*\z/m,'') # When generated from HTML version.
  content = content.sub(/=*\s*[^\n]*\*\|UNSUB\|\*.*\z/m,'') # Original generation.
  content
end
title() click to toggle source
# File lib/banana_peels/campaign.rb, line 62
def title
  mailchimp_meta['title']
end
to_name() click to toggle source
# File lib/banana_peels/campaign.rb, line 82
def to_name
  replace_merge_tags(mailchimp_meta['to_name'])
end