newsly 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/newsly/newsletters_controller.rb +5 -4
- data/app/controllers/newsly/templates_controller.rb +3 -5
- data/app/mailers/newsly/mailer.rb +2 -2
- data/app/models/newsly/newsletter.rb +4 -3
- data/app/models/newsly/template.rb +17 -4
- data/app/views/newsly/templates/index.html.erb +23 -4
- data/db/migrate/20111025072740_add_friendly_fields_to_templates.rb +6 -0
- data/lib/newsly/version.rb +1 -1
- data/public/javascripts/newsletters.js +21 -22
- data/public/javascripts/templates.js +13 -0
- data/public/mercury/javascripts/mercury.min.js +2 -1
- data/public/stylesheets/application.css +56 -11
- metadata +63 -20
- data/app/models/newsly/recipient.rb +0 -4
- data/db/migrate/20111006122345_create_newsly_recipients.rb +0 -9
@@ -5,10 +5,10 @@ module Newsly
|
|
5
5
|
respond_to :text, :only => :preview
|
6
6
|
|
7
7
|
|
8
|
-
before_filter :get_newsletter, :except => [:index]
|
8
|
+
before_filter :get_newsletter, :except => [:new, :index]
|
9
9
|
|
10
10
|
def index
|
11
|
-
@newsletters = Newsletter.all
|
11
|
+
@newsletters = Newsletter.order('created_at desc').all
|
12
12
|
end
|
13
13
|
|
14
14
|
def show
|
@@ -18,7 +18,8 @@ module Newsly
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def new
|
21
|
-
|
21
|
+
@newsletter = Newsly::Newsletter.create(:title => "Nyhetsbrevs rubrik", :body => "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.", :sent => false)
|
22
|
+
redirect_to newsletter_url(@newsletter)
|
22
23
|
end
|
23
24
|
|
24
25
|
def update
|
@@ -64,7 +65,7 @@ module Newsly
|
|
64
65
|
|
65
66
|
protected
|
66
67
|
def get_newsletter
|
67
|
-
@newsletter =
|
68
|
+
@newsletter = Newsly::Newsletter.find(params[:id])
|
68
69
|
end
|
69
70
|
end
|
70
71
|
end
|
@@ -3,7 +3,8 @@ module Newsly
|
|
3
3
|
class TemplatesController < ApplicationController
|
4
4
|
|
5
5
|
def index
|
6
|
-
@templates = Newsly::Template.where(:draft => false)
|
6
|
+
@templates = Newsly::Template.where(:draft => false).order('friendly_name')
|
7
|
+
@template_types = Newsly::Template.all.map(&:template_type).uniq
|
7
8
|
end
|
8
9
|
|
9
10
|
def show
|
@@ -36,10 +37,7 @@ module Newsly
|
|
36
37
|
|
37
38
|
def publish
|
38
39
|
@draft = Newsly::Template.find(params[:id])
|
39
|
-
@
|
40
|
-
@original.subject = @draft.subject
|
41
|
-
@original.body = @draft.body
|
42
|
-
@original.save
|
40
|
+
@draft.publish
|
43
41
|
render :text => "Published"
|
44
42
|
end
|
45
43
|
|
@@ -12,7 +12,7 @@ module Newsly
|
|
12
12
|
self.build_mail(@template.id, to, @template_data, @extra_headers)
|
13
13
|
end
|
14
14
|
|
15
|
-
def build_mail(template_id, to, template_data = {}, extra_headers = {})
|
15
|
+
def build_mail(template_id, to, template_data = {}, extra_headers = {}, layout = "newsly/mailer")
|
16
16
|
headers = {}
|
17
17
|
tmpl = Newsly::Template.find(template_id)
|
18
18
|
headers[:to] = to
|
@@ -20,7 +20,7 @@ module Newsly
|
|
20
20
|
body = tmpl.render(template_data)
|
21
21
|
headers = headers.merge(extra_headers)
|
22
22
|
mail(headers) do |format|
|
23
|
-
format.html { render :inline => body, :layout =>
|
23
|
+
format.html { render :inline => body, :layout => layout }
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -3,9 +3,10 @@ module Newsly
|
|
3
3
|
class Newsletter < ActiveRecord::Base
|
4
4
|
liquid_methods :title, :body
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
|
7
|
+
def render(options={})
|
8
|
+
Liquid::Template.parse(self.body).render options
|
9
|
+
end
|
9
10
|
|
10
11
|
def draft?
|
11
12
|
self.sent? || self.batch_sent? ? false : true
|
@@ -1,11 +1,24 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
module Newsly
|
3
3
|
class Template < ActiveRecord::Base
|
4
|
-
|
4
|
+
|
5
|
+
liquid_methods :subject, :body
|
6
|
+
|
7
|
+
validates_presence_of :subject
|
8
|
+
validates_presence_of :body
|
9
|
+
#validates_presence_of :parent_id, :if => :original
|
10
|
+
#validates original is never draft and
|
5
11
|
|
6
12
|
def render(options={})
|
7
|
-
|
13
|
+
Liquid::Template.parse(self.body).render options
|
14
|
+
end
|
15
|
+
|
16
|
+
def publish
|
17
|
+
original = Newsly::Template.find(self.parent_id)
|
18
|
+
original.subject = self.subject
|
19
|
+
original.body = self.body
|
20
|
+
original.save
|
8
21
|
end
|
9
|
-
|
10
|
-
|
22
|
+
|
23
|
+
end
|
11
24
|
end
|
@@ -1,15 +1,34 @@
|
|
1
1
|
<%= render :partial => "/newsly/navigation" %>
|
2
2
|
<div id="content">
|
3
3
|
<h2><%= t("Templates")%></h2>
|
4
|
-
<
|
4
|
+
<ul class="type_tabs">
|
5
|
+
<li class="title">Show type:</li>
|
6
|
+
<li class="active"><%= link_to "All", templates_url %></li>
|
7
|
+
<% @template_types.each do |type| %>
|
8
|
+
<li class="<%=type.nil? ? "notype" : type %>">
|
9
|
+
<% if type.nil? %>
|
10
|
+
<%= link_to "No Type", "#", :data => {:type => "notype"} %>
|
11
|
+
<% else %>
|
12
|
+
<%= link_to type, "#", :data => {:type => type}%>
|
13
|
+
<% end %>
|
14
|
+
</li>
|
15
|
+
<% end %>
|
16
|
+
</ul>
|
17
|
+
<table cellspacing="0" cellpadding="0" id="templates">
|
5
18
|
<tbody>
|
6
19
|
<% @templates.each do |template| %>
|
7
|
-
<tr>
|
8
|
-
<td class="title"
|
20
|
+
<tr class="<%= template.template_type.nil? ? "notype" : template.template_type%>">
|
21
|
+
<td class="title">
|
22
|
+
<%= link_to template.friendly_name || template.name, template, :class => "friendly_name" %>
|
23
|
+
<span class="type"><%=t(template.template_type)%></span>
|
24
|
+
<span class="desc">Lorem ipsum dolor sit amet conseqteur dolor amet.</span>
|
25
|
+
</td>
|
9
26
|
</tr>
|
10
27
|
<% end %>
|
11
28
|
</tbody>
|
12
29
|
</table>
|
13
30
|
</div>
|
14
31
|
<div id="sidebar">
|
15
|
-
</div>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<%= javascript_include_tag "templates" %>
|
data/lib/newsly/version.rb
CHANGED
@@ -14,7 +14,6 @@ jQuery(document).ready(function($) {
|
|
14
14
|
}
|
15
15
|
});
|
16
16
|
}
|
17
|
-
|
18
17
|
|
19
18
|
$('a#deliver_batch').click(function(e){
|
20
19
|
e.preventDefault();
|
@@ -30,7 +29,7 @@ jQuery(document).ready(function($) {
|
|
30
29
|
var batch_size = parseInt($('#batch_size').val());
|
31
30
|
if(answer == "BATCH"){
|
32
31
|
$.ajax({
|
33
|
-
url: url,
|
32
|
+
url: url,
|
34
33
|
type: 'POST',
|
35
34
|
data: {'_method': 'PUT', 'answer': answer, 'recipient_group': recipient_groups[0], 'batch_size': batch_size},
|
36
35
|
success: function(data){
|
@@ -39,23 +38,23 @@ jQuery(document).ready(function($) {
|
|
39
38
|
$('.groups').remove();
|
40
39
|
}
|
41
40
|
});
|
42
|
-
}
|
41
|
+
}
|
43
42
|
} else{
|
44
43
|
alert('You have to select 1 (one) group to send to!');
|
45
44
|
}
|
46
45
|
});
|
47
46
|
|
48
47
|
$('a#deliver').click(function(e){
|
49
|
-
|
48
|
+
e.preventDefault();
|
50
49
|
top.Mercury.trigger('action', {action: 'save'});
|
51
|
-
var url = $(this).attr('href');
|
50
|
+
var url = $(this).attr('href');
|
52
51
|
var recipient_groups = get_recipient_groups();
|
53
52
|
if(recipient_groups.length > 0){
|
54
53
|
var newsletter_id = $("#newsletter").attr('data-id');
|
55
54
|
var answer = prompt('Are you sure? Type "DELIVER"');
|
56
55
|
if(answer == "DELIVER"){
|
57
56
|
$.ajax({
|
58
|
-
url: url,
|
57
|
+
url: url,
|
59
58
|
type: 'POST',
|
60
59
|
data: {'_method': 'PUT', 'answer': answer, 'recipient_groups[]': recipient_groups},
|
61
60
|
success: function(data){
|
@@ -64,26 +63,26 @@ jQuery(document).ready(function($) {
|
|
64
63
|
$('.groups').remove();
|
65
64
|
}
|
66
65
|
});
|
67
|
-
}
|
66
|
+
}
|
68
67
|
} else{
|
69
68
|
alert('You have to select atleast one group to send to!');
|
70
69
|
}
|
71
70
|
});
|
72
71
|
|
73
72
|
$('a#send_test').click(function(e){
|
74
|
-
|
75
|
-
top.Mercury.trigger('action', {action: 'save'});
|
76
|
-
|
77
|
-
var url = $(this).attr('href');
|
73
|
+
e.preventDefault();
|
74
|
+
top.Mercury.trigger('action', {action: 'save'});
|
75
|
+
var newsletter_id = $("#newsletter").attr('data-id');
|
76
|
+
var url = $(this).attr('href');
|
78
77
|
var to = prompt('to what email?');
|
79
|
-
|
78
|
+
$.ajax({
|
80
79
|
url: url,
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
80
|
+
type: 'POST',
|
81
|
+
data: {'_method': "PUT", 'to': to},
|
82
|
+
success: function(data){
|
83
|
+
$("#flash").html(data).show().hide("fade", {}, 1000);
|
84
|
+
}
|
85
|
+
});
|
87
86
|
});
|
88
87
|
|
89
88
|
$('#groupform input[type=checkbox]').change(function(){
|
@@ -95,10 +94,10 @@ jQuery(document).ready(function($) {
|
|
95
94
|
}
|
96
95
|
set_batch_size();
|
97
96
|
} else {
|
98
|
-
$('.deliverbutton').hide();
|
97
|
+
$('.deliverbutton').hide();
|
99
98
|
}
|
100
99
|
});
|
101
|
-
};
|
100
|
+
};
|
102
101
|
|
103
102
|
});
|
104
103
|
|
@@ -127,6 +126,6 @@ var get_maximum_batch_size = function(){
|
|
127
126
|
max_size = max_size + parseInt($(this).attr('data-max'));
|
128
127
|
}
|
129
128
|
});
|
130
|
-
console.log('MAXIMUM SIZE '+ max_size);
|
131
|
-
return max_size;
|
129
|
+
console.log('MAXIMUM SIZE '+ max_size);
|
130
|
+
return max_size;
|
132
131
|
}
|
@@ -38,4 +38,17 @@ jQuery(document).ready(function($) {
|
|
38
38
|
});
|
39
39
|
});
|
40
40
|
|
41
|
+
$('.type_tabs a').click(function(e){
|
42
|
+
e.preventDefault();
|
43
|
+
template_type = ''+$(this).attr('data-type')+'';
|
44
|
+
$('.type_tabs li').removeClass('active');
|
45
|
+
$('table#templates tr').hide();
|
46
|
+
$(this).parent('li').addClass('active');
|
47
|
+
if(template_type != "undefined"){
|
48
|
+
$('table#templates tr.'+template_type+'').show();
|
49
|
+
} else {
|
50
|
+
$('table#templates tr').show();
|
51
|
+
}
|
52
|
+
});
|
53
|
+
|
41
54
|
});
|
@@ -146,7 +146,7 @@ window.MercurySetup = {
|
|
146
146
|
primary: {
|
147
147
|
save: ['Save', 'Save this page'],
|
148
148
|
//send_test: ['Send Test', 'Send Test Email'],
|
149
|
-
//publish: ['Publish', 'Publish'],
|
149
|
+
//publish: ['Publish', 'Publish'],
|
150
150
|
sep1: ' ',
|
151
151
|
undoredo: {
|
152
152
|
undo: ['Undo', 'Undo your last action'],
|
@@ -8761,6 +8761,7 @@ function defaultDisplay( nodeName ) {
|
|
8761
8761
|
iframe.frameBorder = iframe.width = iframe.height = 0;
|
8762
8762
|
}
|
8763
8763
|
|
8764
|
+
|
8764
8765
|
document.body.appendChild( iframe );
|
8765
8766
|
|
8766
8767
|
// Create a cacheable copy of the iframe document on first call.
|
@@ -69,17 +69,17 @@ a:hover {
|
|
69
69
|
}
|
70
70
|
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
72
|
+
table{
|
73
|
+
width: 100%;
|
74
|
+
}
|
75
|
+
td.draft, td.sent, td.batch{
|
76
|
+
width: 20px;
|
77
|
+
}
|
78
|
+
td.action{
|
79
|
+
width: 20px;
|
80
|
+
padding: 5px;
|
81
|
+
font-size: 11px;
|
82
|
+
}
|
83
83
|
td {
|
84
84
|
padding: 5px 10px;
|
85
85
|
text-align: left;
|
@@ -103,6 +103,22 @@ td.batch{
|
|
103
103
|
table tr:nth-child(2n+2){
|
104
104
|
background: #eee;
|
105
105
|
}
|
106
|
+
td.title span.desc{
|
107
|
+
float: left;
|
108
|
+
width: 100%;
|
109
|
+
font-size: 0.8em;
|
110
|
+
color: #555;
|
111
|
+
text-indent: 100px;
|
112
|
+
}
|
113
|
+
td.title span.type{
|
114
|
+
float: left;
|
115
|
+
font-size: 0.8em;
|
116
|
+
width: 100px;
|
117
|
+
}
|
118
|
+
td a.friendly_name{
|
119
|
+
font-weight: bold;
|
120
|
+
text-transform: capitalize;
|
121
|
+
}
|
106
122
|
#sidebar ul {
|
107
123
|
margin: 0;
|
108
124
|
padding: 0;
|
@@ -270,4 +286,33 @@ form{
|
|
270
286
|
}
|
271
287
|
li.deliverbutton{
|
272
288
|
display: none;
|
289
|
+
}
|
290
|
+
|
291
|
+
.type_tabs{
|
292
|
+
float: right;
|
293
|
+
margin-top: -40px;
|
294
|
+
font-size: 0.8em;
|
295
|
+
list-style: none;
|
296
|
+
}
|
297
|
+
.type_tabs li{
|
298
|
+
float: left;
|
299
|
+
}
|
300
|
+
.type_tabs li.title{
|
301
|
+
padding: 3px 5px;
|
302
|
+
}
|
303
|
+
.type_tabs li a {
|
304
|
+
padding: 3px 10px;
|
305
|
+
color: #000;
|
306
|
+
border-left: 1px solid #ccc;
|
307
|
+
float: left;
|
308
|
+
text-decoration: none;
|
309
|
+
}
|
310
|
+
.type_tabs li a:hover{
|
311
|
+
text-indent: 0px;
|
312
|
+
background: #eee;
|
313
|
+
color: #000;
|
314
|
+
}
|
315
|
+
.type_tabs li.active a{
|
316
|
+
font-weight: bold;
|
317
|
+
background: #ccc;
|
273
318
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newsly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-25 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &2158529960 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 3.1.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2158529960
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: resque
|
28
|
-
requirement: &
|
28
|
+
requirement: &2158529540 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2158529540
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: liquid
|
39
|
-
requirement: &
|
39
|
+
requirement: &2158529080 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2158529080
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: jquery-rails
|
50
|
-
requirement: &
|
50
|
+
requirement: &2158528660 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2158528660
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: resque-async_deliver
|
61
|
-
requirement: &
|
61
|
+
requirement: &2158528240 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2158528240
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: sqlite3
|
72
|
-
requirement: &
|
72
|
+
requirement: &2158527820 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *2158527820
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: letter_opener
|
83
|
-
requirement: &
|
83
|
+
requirement: &2158527400 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *2158527400
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: unicorn
|
94
|
-
requirement: &
|
94
|
+
requirement: &2158526980 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,7 +99,51 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *2158526980
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rspec-rails
|
105
|
+
requirement: &2158553180 !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *2158553180
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: capybara
|
116
|
+
requirement: &2158552760 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: *2158552760
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: capybara-webkit
|
127
|
+
requirement: &2158552340 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: *2158552340
|
136
|
+
- !ruby/object:Gem::Dependency
|
137
|
+
name: database_cleaner
|
138
|
+
requirement: &2158551920 !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: *2158551920
|
103
147
|
description: Manage mailer templates via wysiwyg and liquid. Uses mercury editor for
|
104
148
|
now. And send out newsletters.
|
105
149
|
email:
|
@@ -115,7 +159,6 @@ files:
|
|
115
159
|
- app/helpers/newsly/application_helper.rb
|
116
160
|
- app/mailers/newsly/mailer.rb
|
117
161
|
- app/models/newsly/newsletter.rb
|
118
|
-
- app/models/newsly/recipient.rb
|
119
162
|
- app/models/newsly/template.rb
|
120
163
|
- app/views/layouts/newsly/application.html.erb
|
121
164
|
- app/views/layouts/newsly/mailer.html.erb
|
@@ -136,7 +179,7 @@ files:
|
|
136
179
|
- db/migrate/20110927120903_add_text_body_fields.rb
|
137
180
|
- db/migrate/20110929142039_remove_text_body_fields.rb
|
138
181
|
- db/migrate/20111004085523_add_fields_to_newsletter.rb
|
139
|
-
- db/migrate/
|
182
|
+
- db/migrate/20111025072740_add_friendly_fields_to_templates.rb
|
140
183
|
- lib/newsly/engine.rb
|
141
184
|
- lib/newsly/version.rb
|
142
185
|
- lib/newsly.rb
|