chimpmunk 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 +4 -4
- data/README.md +56 -2
- data/chimpmunk.gemspec +1 -0
- data/db/migrate/1_chimpmunk_migration.rb +30 -0
- data/lib/chimpmunk.rb +3 -0
- data/lib/chimpmunk/email_campaign.rb +50 -61
- data/lib/chimpmunk/email_campaign_header.rb +19 -0
- data/lib/chimpmunk/email_campaign_image.rb +15 -0
- data/lib/chimpmunk/email_campaign_text.rb +17 -0
- data/lib/chimpmunk/engine.rb +1 -0
- data/lib/chimpmunk/version.rb +1 -1
- data/lib/generators/chimpmunk/install_generator.rb +3 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d386eba35aefc48e80041d30e14d09a76405b46
|
4
|
+
data.tar.gz: 4666331e2c9a3af08a8dad237f88795ca8004359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9af58d721920b15da3585335185bff6ba724eb2c99ded5204b7d7d55ffaec316cdac28c7957b91c00629c16b692e46f4788fceb0f205db78a042ddf530251645
|
7
|
+
data.tar.gz: 333c516acc181af90045ef63d2a054eb9e64b2cf8037b10eeebaf4d61a122cedcbaaf39162e548e39b2bfb71dcaf491895afb9d36fda92360709f122325a10f4
|
data/README.md
CHANGED
@@ -32,8 +32,62 @@ Set your mailchimp api key:
|
|
32
32
|
|
33
33
|
## Usage
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
1. create a new model for your campaign `app/models/test_email_campaign.rb` that extends `Chimpmunk::EmailCampaign`
|
36
|
+
|
37
|
+
2. create headers, texts and images definitions for any strings, text or images needed in the campaign.
|
38
|
+
|
39
|
+
3. If you need assocations with the email campaign, generate the association models and add the `associated` definition in the email campaign subclass.
|
40
|
+
|
41
|
+
4. override the content method, details coming soon
|
42
|
+
|
43
|
+
|
44
|
+
example:
|
45
|
+
|
46
|
+
|
47
|
+
```
|
48
|
+
rails g model EmailCampaignPost email_campaign:references post:references
|
49
|
+
rails g model EmailCampaignComment email_campaign:references post:references
|
50
|
+
```
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
```
|
55
|
+
class TestEmailCampaign < Chimpmunk::EmailCampaign
|
56
|
+
headers :hero_header, :bottom_header
|
57
|
+
texts :top_body, :info_body
|
58
|
+
images :hero_image, :logo, :test_image
|
59
|
+
associated :many, :posts # will have many :email_campaign_posts
|
60
|
+
associated :one, :comment # will have one :email_campaign_comment
|
61
|
+
|
62
|
+
#
|
63
|
+
# must have a content method
|
64
|
+
#
|
65
|
+
def content
|
66
|
+
sections = {}
|
67
|
+
{sections: sections}
|
68
|
+
end
|
69
|
+
|
70
|
+
rails_admin down
|
71
|
+
edit do
|
72
|
+
field :title
|
73
|
+
field :email_list
|
74
|
+
field :email_list_group
|
75
|
+
field :email_template
|
76
|
+
field :subject
|
77
|
+
field :from_name
|
78
|
+
field :from_email
|
79
|
+
field :send_date
|
80
|
+
field :hero_header
|
81
|
+
field :bottom_header
|
82
|
+
field :top_body
|
83
|
+
field :info_body
|
84
|
+
field :hero_image
|
85
|
+
field :logo
|
86
|
+
field :test_image
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
```
|
37
91
|
## Contributing
|
38
92
|
|
39
93
|
1. Fork it ( https://github.com/[my-github-username]/chimpmunk/fork )
|
data/chimpmunk.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'activerecord', ['>= 3.2', '< 5']
|
22
22
|
spec.add_dependency 'gibbon', '>= 1.1'
|
23
|
+
spec.add_dependency 'paperclip', '>= 4.1'
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.6"
|
25
26
|
spec.add_development_dependency "rake"
|
@@ -90,6 +90,31 @@ class ChimpmunkMigration < ActiveRecord::Migration
|
|
90
90
|
t.integer :email_list_group_id
|
91
91
|
t.integer :email_subscriber_id
|
92
92
|
end
|
93
|
+
|
94
|
+
create_table :email_campaign_headers do |t|
|
95
|
+
t.references :email_campaign, index: true
|
96
|
+
t.string :text
|
97
|
+
t.string :name
|
98
|
+
|
99
|
+
t.timestamps
|
100
|
+
end
|
101
|
+
|
102
|
+
create_table :email_campaign_texts do |t|
|
103
|
+
t.references :email_campaign, index: true
|
104
|
+
t.text :text
|
105
|
+
t.string :name
|
106
|
+
|
107
|
+
t.timestamps
|
108
|
+
end
|
109
|
+
|
110
|
+
create_table :email_campaign_images do |t|
|
111
|
+
t.references :email_campaign, index: true
|
112
|
+
t.string :name
|
113
|
+
|
114
|
+
t.timestamps
|
115
|
+
end
|
116
|
+
|
117
|
+
add_attachment :email_campaign_images, :image
|
93
118
|
end
|
94
119
|
|
95
120
|
def self.down
|
@@ -98,5 +123,10 @@ class ChimpmunkMigration < ActiveRecord::Migration
|
|
98
123
|
drop_table :email_list_groups
|
99
124
|
drop_table :email_templates
|
100
125
|
drop_table :email_list_groupings
|
126
|
+
drop_table :email_subscribers
|
127
|
+
drop_table :email_list_groups_subscribers
|
128
|
+
drop_table :email_campaign_headers
|
129
|
+
drop_table :email_campaign_texts
|
130
|
+
drop_table :email_campaign_images
|
101
131
|
end
|
102
132
|
end
|
data/lib/chimpmunk.rb
CHANGED
@@ -28,18 +28,51 @@ module Chimpmunk
|
|
28
28
|
before_update :update_content, if: Proc.new{|campaign| campaign.email_template_id_changed? && !campaign.skip_update_callbacks }
|
29
29
|
before_destroy :destroy_mailchimp_campaign
|
30
30
|
|
31
|
-
# TODO: figure out attachments, example below
|
32
|
-
# has_attached_file :intro_image
|
33
|
-
# validates_attachment_content_type :intro_image, :content_type => /\Aimage\/.*\Z/
|
34
|
-
|
35
|
-
# TODO: figure out association, example below
|
36
|
-
# has_many :email_campaign_trending_posts, dependent: :destroy
|
37
|
-
# has_many :trending_posts, source: :post, through: :email_campaign_trending_posts
|
38
|
-
|
39
31
|
##
|
40
32
|
# CLASS METHODS
|
41
33
|
##
|
42
34
|
|
35
|
+
#
|
36
|
+
# create header associations
|
37
|
+
#
|
38
|
+
def self.headers(*headers)
|
39
|
+
headers.each do |header|
|
40
|
+
has_one header.to_sym, -> { where(name: header.to_s) }, class_name: 'Chimpmunk::EmailCampaignHeader', foreign_key: :email_campaign_id
|
41
|
+
accepts_nested_attributes_for header.to_sym, allow_destroy: true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# create text associations
|
47
|
+
#
|
48
|
+
def self.texts(*texts)
|
49
|
+
texts.each do |text|
|
50
|
+
has_one text.to_sym, -> { where(name: text.to_s) }, class_name: 'Chimpmunk::EmailCampaignText', foreign_key: :email_campaign_id
|
51
|
+
accepts_nested_attributes_for text.to_sym, allow_destroy: true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# create image associations
|
57
|
+
#
|
58
|
+
def self.images(*images)
|
59
|
+
images.each do |image|
|
60
|
+
has_one image.to_sym, -> { where(name: image.to_s) }, class_name: 'Chimpmunk::EmailCampaignImage', foreign_key: :email_campaign_id
|
61
|
+
accepts_nested_attributes_for image.to_sym, allow_destroy: true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# create has_many associations
|
67
|
+
#
|
68
|
+
def self.associated(association_type = :many, *associations)
|
69
|
+
associations.each do |association|
|
70
|
+
association_name = "email_campaign_#{association}".to_sym
|
71
|
+
send("has_#{association_type}", association_name, foreign_key: 'email_campaign_id')
|
72
|
+
accepts_nested_attributes_for association_name, allow_destroy: true
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
43
76
|
##
|
44
77
|
# Refreshes the list of email campaigns
|
45
78
|
def self.refresh_email_campaigns
|
@@ -136,6 +169,13 @@ module Chimpmunk
|
|
136
169
|
end
|
137
170
|
end
|
138
171
|
|
172
|
+
##
|
173
|
+
# TODO: figure out how to do this
|
174
|
+
# returns the html content for the new campaign
|
175
|
+
def content
|
176
|
+
raise "Content must be overriden"
|
177
|
+
end
|
178
|
+
|
139
179
|
private
|
140
180
|
|
141
181
|
def action_view
|
@@ -168,7 +208,7 @@ module Chimpmunk
|
|
168
208
|
response = Chimpmunk.mailchimp.campaigns.update(
|
169
209
|
cid: self.mailchimp_campaign_id,
|
170
210
|
name: "content",
|
171
|
-
value:
|
211
|
+
value: content
|
172
212
|
)
|
173
213
|
|
174
214
|
!response['errors'].any?
|
@@ -225,7 +265,7 @@ module Chimpmunk
|
|
225
265
|
template_id: self.email_template.try(:mailchimp_id),
|
226
266
|
inline_css: true
|
227
267
|
},
|
228
|
-
content:
|
268
|
+
content: content
|
229
269
|
}
|
230
270
|
|
231
271
|
# list or segment(group)
|
@@ -254,61 +294,10 @@ module Chimpmunk
|
|
254
294
|
end
|
255
295
|
end
|
256
296
|
|
257
|
-
##
|
258
|
-
# TODO: figure out how to do this
|
259
|
-
# returns the html content for the new campaign
|
260
|
-
def get_content
|
261
|
-
content = {sections: {}}
|
262
|
-
|
263
|
-
# insert intro section if it exists
|
264
|
-
unless intro_section_blank?
|
265
|
-
content[:sections][:intro_section] = action_view.render 'eflyers/newsletter/intro', email_campaign: self
|
266
|
-
end
|
267
|
-
|
268
|
-
# insert divider if both intro sections and featured post exist
|
269
|
-
unless intro_section_blank? || featured_post.nil?
|
270
|
-
content[:sections][:divider] = action_view.render 'eflyers/newsletter/divider'
|
271
|
-
end
|
272
|
-
|
273
|
-
# insert featured post if it exists
|
274
|
-
unless featured_post.nil?
|
275
|
-
content[:sections][:featured_article] = action_view.render 'eflyers/newsletter/featured_article', email_campaign: self
|
276
|
-
end
|
277
|
-
|
278
|
-
# insert tending posts
|
279
|
-
content[:sections][:trending_section] = ''
|
280
|
-
trending_posts.in_groups_of(2) do |first_post, second_post|
|
281
|
-
content[:sections][:trending_section] += action_view.render 'eflyers/newsletter/trending', first_post: first_post, second_post: second_post
|
282
|
-
end
|
283
|
-
|
284
|
-
# insert sponsored section if it exsists
|
285
|
-
unless sponsored_section_blank?
|
286
|
-
content[:sections][:sponsored_section] = action_view.render 'eflyers/newsletter/sponsored', email_campaign: self
|
287
|
-
end
|
288
|
-
|
289
|
-
content[:sections][:directory_section] = action_view.render 'eflyers/newsletter/directory',
|
290
|
-
teacher_1: self.directory_teachers.first,
|
291
|
-
teacher_2: self.directory_teachers.second,
|
292
|
-
event_1: self.directory_events.first,
|
293
|
-
event_2: self.directory_events.second,
|
294
|
-
studio_1: self.directory_studios.first,
|
295
|
-
studio_2: self.directory_studios.second
|
296
|
-
|
297
|
-
unless teacher_tip_post.nil?
|
298
|
-
content[:sections][:teacher_tip] = action_view.render 'eflyers/newsletter/teacher_tip', email_campaign: self
|
299
|
-
end
|
300
|
-
|
301
|
-
content
|
302
|
-
end
|
303
|
-
|
304
297
|
if defined?(RailsAdmin)
|
305
298
|
|
306
299
|
rails_admin do
|
307
300
|
navigation_label 'Mailchimp'
|
308
|
-
|
309
|
-
configure :background_color, :color
|
310
|
-
configure :foreground_color, :color
|
311
|
-
configure :send_date, :datetime
|
312
301
|
|
313
302
|
list do
|
314
303
|
field :title
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Chimpmunk
|
3
|
+
class EmailCampaignHeader < ::ActiveRecord::Base
|
4
|
+
belongs_to :email_campaign
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
rails_admin do
|
9
|
+
visible false
|
10
|
+
edit do
|
11
|
+
field :text do
|
12
|
+
label do
|
13
|
+
bindings[:object].name
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Chimpmunk
|
3
|
+
class EmailCampaignImage < ::ActiveRecord::Base
|
4
|
+
belongs_to :email_campaign
|
5
|
+
has_attached_file :image, styles: {original: '1000x1000>'}
|
6
|
+
validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
|
7
|
+
|
8
|
+
rails_admin do
|
9
|
+
visible false
|
10
|
+
edit do
|
11
|
+
field :image
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Chimpmunk
|
3
|
+
class EmailCampaignText < ::ActiveRecord::Base
|
4
|
+
belongs_to :email_campaign
|
5
|
+
|
6
|
+
rails_admin do
|
7
|
+
visible false
|
8
|
+
edit do
|
9
|
+
field :text do
|
10
|
+
label do
|
11
|
+
bindings[:object].name
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/chimpmunk/engine.rb
CHANGED
data/lib/chimpmunk/version.rb
CHANGED
@@ -11,7 +11,9 @@ module Chimpmunk
|
|
11
11
|
Dir["#{Rails.root}/lib/rails_admin/*.rb"].each {|file| require file }
|
12
12
|
|
13
13
|
# include all existing models and Chimpmunk models
|
14
|
-
config.included_models = Dir.glob("#{Rails.root}/app/models/*.rb").map{|x| File.basename(x, ".rb").camelize} +
|
14
|
+
config.included_models = Dir.glob("#{Rails.root}/app/models/*.rb").map{|x| File.basename(x, ".rb").camelize} +
|
15
|
+
['Chimpmunk::EmailCampaign', 'Chimpmunk::EmailList', 'Chimpmunk::EmailListGroup', 'Chimpmunk::EmailListGrouping',
|
16
|
+
'Chimpmunk::EmailSubscriber', 'Chimpmunk::EmailTemplate', 'Chimpmunk::EmailCampaignHeader', 'Chimpmunk::EmailCampaignText', 'Chimpmunk::EmailCampaignImage']
|
15
17
|
|
16
18
|
TEMPLATE
|
17
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chimpmunk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Franken
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '1.1'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: paperclip
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '4.1'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '4.1'
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: bundler
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,6 +103,9 @@ files:
|
|
89
103
|
- db/migrate/1_chimpmunk_migration.rb
|
90
104
|
- lib/chimpmunk.rb
|
91
105
|
- lib/chimpmunk/email_campaign.rb
|
106
|
+
- lib/chimpmunk/email_campaign_header.rb
|
107
|
+
- lib/chimpmunk/email_campaign_image.rb
|
108
|
+
- lib/chimpmunk/email_campaign_text.rb
|
92
109
|
- lib/chimpmunk/email_list.rb
|
93
110
|
- lib/chimpmunk/email_list_group.rb
|
94
111
|
- lib/chimpmunk/email_list_grouping.rb
|