newsly 0.4.0 → 0.5.0

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.
@@ -15,6 +15,11 @@ module Newsly
15
15
  if Resque.size(:newsletter) > 0 || Resque.size(:mail) > 0
16
16
  @queues_working = true
17
17
  end
18
+ @recipient_groups = []
19
+ for group in Newsly.recipient_groups
20
+ group[2] ||= group[1].call(@newsletter.id).count
21
+ @recipient_groups.push(group)
22
+ end
18
23
  end
19
24
 
20
25
  def new
@@ -0,0 +1,62 @@
1
+ module Newsly
2
+ class LiquidModel < ActiveRecord::Base
3
+
4
+ validates_presence_of :body
5
+ #
6
+ # Puts the parse error from Liquid on the error list if parsing failed
7
+ #
8
+ def after_validation
9
+ errors.add :internal_template, @syntax_error unless @syntax_error.nil?
10
+ end
11
+
12
+
13
+ ### Attributes
14
+ attr_protected :internal_template
15
+
16
+
17
+ #
18
+ # body contains the raw internal_template. When updating this attribute, the
19
+ # template parses the internal_template and stores the serialized object
20
+ # for quicker rendering.
21
+ #
22
+ def body=(text)
23
+ self[:body] = text
24
+ begin
25
+ @internal_template = Liquid::Template.parse(text)
26
+ self[:internal_template] = [Marshal.dump(@internal_template)].pack('m*')
27
+ rescue Liquid::SyntaxError => error
28
+ @syntax_error = error.message
29
+ end
30
+ end
31
+
32
+ ### Methods
33
+ #
34
+ # Renders body as Liquid Markup template
35
+ #
36
+ def render(options = {})
37
+ internal_template.render options
38
+ end
39
+
40
+
41
+ private
42
+ #
43
+ # Returns a usable Liquid:Template instance
44
+ #
45
+ def internal_template
46
+ return @internal_template unless @internal_template.nil?
47
+
48
+ if self[:internal_template].blank?
49
+ @internal_template = Liquid::Template.parse body
50
+ self[:internal_template] = [Marshal.dump(@internal_template)].pack('m*')
51
+ save
52
+ else
53
+ @internal_template = Marshal.load(self[:internal_template].unpack("m")[0])
54
+ end
55
+
56
+ @internal_template
57
+ end
58
+
59
+
60
+
61
+ end
62
+ end
@@ -1,23 +1,28 @@
1
1
  # encoding: UTF-8
2
2
  module Newsly
3
- class Newsletter < ActiveRecord::Base
3
+ class Newsletter < Newsly::LiquidModel
4
+ set_table_name 'newsly_newsletters'
4
5
  liquid_methods :title, :body
5
6
 
7
+ validates_presence_of :title
6
8
 
7
- def render(options={})
8
- Liquid::Template.parse(self.body).render options
9
- end
9
+ ### Methods
10
10
 
11
- def draft?
12
- self.sent? || self.batch_sent? ? false : true
13
- end
11
+ #
12
+ # return true if never sent or batch_sent
13
+ #
14
+ def draft?
15
+ self.sent? || self.batch_sent? ? false : true
16
+ end
17
+
18
+ #
19
+ # Returns the status a string. TODO, make nicer!
20
+ #
21
+ def status
22
+ return "draft" if self.draft?
23
+ return "sent" if self.sent?
24
+ return "batch" if self.batch_sent?
25
+ end
14
26
 
15
- #TODO, make nicer!
16
- def status
17
- return "draft" if self.draft?
18
- return "sent" if self.sent?
19
- return "batch" if self.batch_sent?
20
- end
21
-
22
27
  end
23
28
  end
@@ -1,24 +1,27 @@
1
1
  # encoding: UTF-8
2
+
2
3
  module Newsly
3
- class Template < ActiveRecord::Base
4
+ class Template < Newsly::LiquidModel
5
+ set_table_name 'newsly_templates'
6
+ liquid_methods :subject, :body
4
7
 
5
- liquid_methods :subject, :body
8
+ validates_presence_of :subject
9
+ #validates_presence_of :parent_id, :if => :original
10
+ #validates original is never draft and
6
11
 
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
12
+
13
+ ### Methods
11
14
 
12
- def render(options={})
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
15
+ #
16
+ # Takes a draft and copies information to the original
17
+ #
18
+ def publish
19
+ original = Newsly::Template.find(self.parent_id)
20
+ original.subject= self.subject
21
+ original.body= self.body
20
22
  original.save
21
- end
22
-
23
- end
23
+ original
24
+ end
25
+
26
+ end
24
27
  end
@@ -8,18 +8,17 @@
8
8
  <div class="notice">Some workers are still working, delivering disabled for now! Please reload later!</div>
9
9
 
10
10
  <% elsif !@newsletter.sent? and @newsletter.persisted?%>
11
- <% if Newsly.recipient_groups.count > 0 %>
11
+ <% if @recipient_groups.count > 0 %>
12
12
  <li class="groups">
13
13
  <form id="groupform" class="groupform">
14
14
  <h3>Recipient Groups</h3>
15
15
  <ul>
16
16
  <% @max_batch_size = 0 %>
17
- <% for group in Newsly.recipient_groups %>
18
- <% @group_count = group[1].call(@newsletter.id).count %>
19
- <% @max_batch_size = @max_batch_size + @group_count %>
17
+ <% for group in @recipient_groups %>
18
+ <% @max_batch_size = @max_batch_size + group[2] %>
20
19
  <li>
21
- <input type="checkbox" name="<%=group[0].to_s%>" value="<%=group[0].to_s%>" id="group_<%=group[0].to_s%>" data-max="<%= @group_count %>"/>
22
- <label for="group_<%=group[0].to_s%>"><%= group[0].to_s.humanize %> (<span class="count"><%= @group_count %></span>)</label>
20
+ <input type="checkbox" name="<%=group[0].to_s%>" value="<%=group[0].to_s%>" id="group_<%=group[0].to_s%>" data-max="<%= group[2] %>"/>
21
+ <label for="group_<%=group[0].to_s%>"><%= group[0].to_s.humanize %> (<span class="count"><%= group[2] %></span>)</label>
23
22
  </li>
24
23
  <% end %>
25
24
  </ul>
@@ -0,0 +1,6 @@
1
+ class AddTemplateColumn < ActiveRecord::Migration
2
+ def change
3
+ add_column :newsly_templates, :internal_template, :text
4
+ add_column :newsly_newsletters, :internal_template, :text
5
+ end
6
+ end
@@ -1,3 +1,3 @@
1
1
  module Newsly
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
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.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,22 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-25 00:00:00.000000000Z
13
+ date: 2012-01-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2158529960 !ruby/object:Gem::Requirement
17
+ requirement: &70207372671160 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
- - - ! '>='
20
+ - - ~>
21
21
  - !ruby/object:Gem::Version
22
22
  version: 3.1.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2158529960
25
+ version_requirements: *70207372671160
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: resque
28
- requirement: &2158529540 !ruby/object:Gem::Requirement
28
+ requirement: &70207372670040 !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: *2158529540
36
+ version_requirements: *70207372670040
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: liquid
39
- requirement: &2158529080 !ruby/object:Gem::Requirement
39
+ requirement: &70207372669120 !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: *2158529080
47
+ version_requirements: *70207372669120
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: jquery-rails
50
- requirement: &2158528660 !ruby/object:Gem::Requirement
50
+ requirement: &70207372667520 !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: *2158528660
58
+ version_requirements: *70207372667520
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: resque-async_deliver
61
- requirement: &2158528240 !ruby/object:Gem::Requirement
61
+ requirement: &70207372666040 !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: *2158528240
69
+ version_requirements: *70207372666040
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: sqlite3
72
- requirement: &2158527820 !ruby/object:Gem::Requirement
72
+ requirement: &70207372664380 !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: *2158527820
80
+ version_requirements: *70207372664380
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: letter_opener
83
- requirement: &2158527400 !ruby/object:Gem::Requirement
83
+ requirement: &70207372663200 !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: *2158527400
91
+ version_requirements: *70207372663200
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: unicorn
94
- requirement: &2158526980 !ruby/object:Gem::Requirement
94
+ requirement: &70207372661620 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2158526980
102
+ version_requirements: *70207372661620
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rspec-rails
105
- requirement: &2158553180 !ruby/object:Gem::Requirement
105
+ requirement: &70207372660420 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2158553180
113
+ version_requirements: *70207372660420
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: capybara
116
- requirement: &2158552760 !ruby/object:Gem::Requirement
116
+ requirement: &70207372659000 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2158552760
124
+ version_requirements: *70207372659000
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: capybara-webkit
127
- requirement: &2158552340 !ruby/object:Gem::Requirement
127
+ requirement: &70207372657720 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *2158552340
135
+ version_requirements: *70207372657720
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: database_cleaner
138
- requirement: &2158551920 !ruby/object:Gem::Requirement
138
+ requirement: &70207372655580 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,7 +143,7 @@ dependencies:
143
143
  version: '0'
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *2158551920
146
+ version_requirements: *70207372655580
147
147
  description: Manage mailer templates via wysiwyg and liquid. Uses mercury editor for
148
148
  now. And send out newsletters.
149
149
  email:
@@ -158,6 +158,7 @@ files:
158
158
  - app/controllers/newsly/templates_controller.rb
159
159
  - app/helpers/newsly/application_helper.rb
160
160
  - app/mailers/newsly/mailer.rb
161
+ - app/models/newsly/liquid_model.rb
161
162
  - app/models/newsly/newsletter.rb
162
163
  - app/models/newsly/template.rb
163
164
  - app/views/layouts/newsly/application.html.erb
@@ -180,6 +181,7 @@ files:
180
181
  - db/migrate/20110929142039_remove_text_body_fields.rb
181
182
  - db/migrate/20111004085523_add_fields_to_newsletter.rb
182
183
  - db/migrate/20111025072740_add_friendly_fields_to_templates.rb
184
+ - db/migrate/20111025132457_add_template_column.rb
183
185
  - lib/newsly/engine.rb
184
186
  - lib/newsly/version.rb
185
187
  - lib/newsly.rb
@@ -216,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
218
  version: '0'
217
219
  requirements: []
218
220
  rubyforge_project:
219
- rubygems_version: 1.8.8
221
+ rubygems_version: 1.8.15
220
222
  signing_key:
221
223
  specification_version: 3
222
224
  summary: Manage mailer templates via wysiwyg and liquid. And send out newsletters.