banana_peels 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1256b534deb0dc6e3c0d9b47361b3d6cfb42347c
4
- data.tar.gz: 95efea6d6d804b85d7a384f89cf2bba48a2586e4
3
+ metadata.gz: e808ac0025039ccf838899d253d539202a65d774
4
+ data.tar.gz: f5179fcc94851d3a16ba944e5e02ce7212dc98ee
5
5
  SHA512:
6
- metadata.gz: 28b9e17db54a9722bff8c19beababc247683763c519677d03d24b8eb05b71db149c6f76a520966c5f70ed7d0bfa3740ff479db874d4a992325e80599093d09ac
7
- data.tar.gz: 8176ca9afdf3bb786866d412cf7ab448cbf75bfcd4f8348feea7147a21b8f641dc4542fa811650ee5ede92e3ea5b2eff7471dcb8a71a81147a7fde7098b43dec
6
+ metadata.gz: 4b9980108bd56b187debbe09d3eb537226f88bcf353b024aa365725cf3a74d6a46747d9ba54d8b1f27c3ae5b80b23bed13c024839ca993239ef45e01a595e44c
7
+ data.tar.gz: 9590126f26b371232de2d9c63cbaeae028b0fe873303d7207e2872fcd57554b49ccfd4b52e8d4243aea86711968341435aeb9ff2b15c6b0bd7f74c3d26ac93ef
data/README.md CHANGED
@@ -26,11 +26,11 @@ app/controllers/campaigns_controller.rb:
26
26
  class CampaignsController < ApplicationController
27
27
 
28
28
  def index
29
- @campaigns = Chimp.campaigns(ENV['MAILCHIMP_API_KEY'])
30
- @env_vars = {}
31
- by_id = @campaigns.index_by{ |c| c['id'] }
29
+ @campaigns = BananaPeels.campaigns(ENV['MAILCHIMP_API_KEY'])
30
+ @env_vars = Hash.new{|h,k| h[k] = [] }
31
+ by_id = @campaigns.index_by(&:id)
32
32
  ENV.each do |k,v|
33
- @env_vars[v] = k if by_id[v]
33
+ @env_vars[v].push(k) if by_id[v]
34
34
  end
35
35
  end
36
36
 
@@ -38,21 +38,39 @@ end
38
38
 
39
39
  ```
40
40
 
41
- app/views/campaigns/index.html.slim:
41
+ app/views/campaigns/index.html.slim (http://slim-lang.com/, similar to haml):
42
42
  ```slim
43
43
  h1 MailChimp Campaigns
44
44
  table
45
45
  thead
46
46
  tr
47
47
  th Campaign Title
48
- th Mailchimp ID
49
- th ENV
48
+ th MailChimp ID
49
+ td
50
+ strong ENV Keys
51
+ | | Merge Tags
50
52
  tbody
51
53
  - @campaigns.each do |c|
52
54
  tr
53
- td = c['title']
54
- td = c['id']
55
- td = @env_vars[c['id']]
55
+ th = c.title
56
+ td = c.id
57
+ td
58
+ strong = @env_vars[c.id].join(', ')
59
+ | |
60
+ = c.merge_tags_in_content.keys.join(', ')
61
+ tr
62
+ td rowspan="4"
63
+ th Subject
64
+ td = c.mailchimp_meta['subject']
65
+ tr
66
+ th From
67
+ td = c.from
68
+ tr
69
+ th Text Content
70
+ td = CGI.escapeHTML(c.text_content_unmerged).gsub("\n","\n<br>").html_safe
71
+ tr
72
+ th HTML Content
73
+ td = c.html_content_unmerged
56
74
  ```
57
75
 
58
76
  ### Sending transactional emails using a MailChimp Campaign as a template
@@ -60,6 +78,7 @@ table
60
78
  app/mailers/user_mailer.rb:
61
79
  ```ruby
62
80
  class UserMailer < ActionMailer::Base
81
+ include BananaPeels::MailerHelper
63
82
 
64
83
  def reset_password_instructions(record, token, opts={})
65
84
  user = User.find(record.id)
@@ -71,7 +90,7 @@ class UserMailer < ActionMailer::Base
71
90
  'LAST_NAME' => user.last_name,
72
91
  'RESET_PASSWORD_URL' => edit_user_password_url(reset_password_token: token),
73
92
  }
74
- BananaPeels.mail(self, ENV['RESET_PASSWORD_CAMPAIGN_ID'], mail_options, merge_tags, ENV['MAILCHIMP_API_KEY'])
93
+ banana_mail(ENV['RESET_PASSWORD_CAMPAIGN_ID'], mail_options, merge_tags, ENV['MAILCHIMP_API_KEY'])
75
94
  end
76
95
 
77
96
  end
@@ -7,6 +7,17 @@ module BananaPeels
7
7
  end
8
8
 
9
9
  def campaigns(api_key)
10
+ meta_list = campaigns_list(api_key)
11
+ campaigns = []
12
+ meta_list.each do |c_meta|
13
+ c = campaign(c_meta['id'], nil, api_key)
14
+ c.mailchimp_meta = c_meta
15
+ campaigns.push(c)
16
+ end
17
+ campaigns
18
+ end
19
+
20
+ def campaigns_list(api_key)
10
21
  api_data = api(api_key).campaigns.list([], 0, 1000) # TODO: presumes <= 1000 campaigns
11
22
  api_data['data']
12
23
  end
@@ -21,6 +21,9 @@ class BananaPeels::Campaign
21
21
  # TODO: Cache campaigns from mailchimp.
22
22
  @mailchimp_meta ||= @api.campaigns.list({ campaign_id: @campaign_id })['data'].first
23
23
  end
24
+ def mailchimp_meta=(mailchimp_meta)
25
+ @mailchimp_meta = mailchimp_meta
26
+ end
24
27
 
25
28
  def mailchimp_content
26
29
  # TODO: Cache.
@@ -34,6 +37,14 @@ class BananaPeels::Campaign
34
37
  }
35
38
  end
36
39
 
40
+ def id
41
+ mailchimp_meta['id']
42
+ end
43
+
44
+ def title
45
+ mailchimp_meta['title']
46
+ end
47
+
37
48
  def from
38
49
  BananaPeels.email_with_name(from_name, from_email)
39
50
  end
@@ -54,22 +65,49 @@ class BananaPeels::Campaign
54
65
  replace_merge_tags(mailchimp_meta['to_name'])
55
66
  end
56
67
 
57
- def text_content
68
+ def merge_tags_in_content
69
+ merge_tags = Hash.new{|h,k| h[k] = [] }
70
+ {
71
+ to: mailchimp_meta['to_name'],
72
+ subject: mailchimp_meta['subject'],
73
+ html: html_content_unmerged,
74
+ text: text_content_unmerged,
75
+ }.each do |location, content|
76
+ find_merge_tags_in(content).each do |tag|
77
+ merge_tags[tag].push(location)
78
+ end
79
+ end
80
+ merge_tags
81
+ end
82
+
83
+ def find_merge_tags_in(string)
84
+ string.scan(/\*\|(\w+)\|\*/).flatten.uniq
85
+ end
86
+
87
+ def text_content_unmerged
58
88
  content = mailchimp_content['text'].to_s
59
89
  content = content.sub(/=*\s*Unsubscribe\s\*\|HTML:EMAIL\|\*.*\z/m,'') # Auto-replaced if deleted.
60
90
  content = content.sub(/=*\s*This\semail\swas\ssent\sto\s\*\|EMAIL\|\*.*\z/m,'') # When generated from HTML version.
61
91
  content = content.sub(/=*\s*[^\n]*\*\|UNSUB\|\*.*\z/m,'') # Original generation.
62
- replace_merge_tags(content)
92
+ content
63
93
  end
64
94
 
65
- def html_content
95
+ def text_content
96
+ replace_merge_tags(text_content_unmerged)
97
+ end
98
+
99
+ def html_content_unmerged
66
100
  content = mailchimp_content['html'].to_s
67
101
  content = content.sub(/(.*)<center>.*?canspamBarWrapper.*?<\/center>/m,'\1')
102
+ content
103
+ end
104
+
105
+ def html_content
68
106
  merge_tags = @merge_tags.dup
69
107
  merge_tags.each do |k,v|
70
108
  merge_tags[k] = CGI.escapeHTML(v.to_s).gsub("\n","\n<br>")
71
109
  end
72
- replace_merge_tags(content, merge_tags)
110
+ replace_merge_tags(html_content_unmerged, merge_tags)
73
111
  end
74
112
 
75
113
  def replace_merge_tags(string, merge_tags=nil)
@@ -0,0 +1,9 @@
1
+ module BananaPeels::MailerHelper
2
+
3
+ # Do "include BananaPeels::MailerHelper" in an ActionMailer.
4
+
5
+ def banana_mail(campaign_id, mail_options, merge_tags, api_key)
6
+ BananaPeels.mail(self, campaign_id, mail_options, merge_tags, api_key)
7
+ end
8
+
9
+ end
@@ -1,3 +1,3 @@
1
1
  module BananaPeels
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/lib/banana_peels.rb CHANGED
@@ -3,3 +3,4 @@ require 'mailchimp'
3
3
  require 'banana_peels/version'
4
4
  require 'banana_peels/api'
5
5
  require 'banana_peels/campaign'
6
+ require 'banana_peels/mailer_helper'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: banana_peels
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Bull
@@ -56,6 +56,7 @@ files:
56
56
  - lib/banana_peels.rb
57
57
  - lib/banana_peels/api.rb
58
58
  - lib/banana_peels/campaign.rb
59
+ - lib/banana_peels/mailer_helper.rb
59
60
  - lib/banana_peels/version.rb
60
61
  homepage: https://github.com/sbull/banana_peels
61
62
  licenses: