newsly 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,6 +12,9 @@ module Newsly
12
12
  end
13
13
 
14
14
  def show
15
+ if Resque.size(:newsletter) > 0 || Resque.size(:mail) > 0
16
+ @queues_working = true
17
+ end
15
18
  end
16
19
 
17
20
  def new
@@ -0,0 +1,4 @@
1
+ module Newsly
2
+ class Recipient < ActiveRecord::Base
3
+ end
4
+ end
@@ -4,7 +4,10 @@
4
4
  <li class="button">
5
5
  <%= link_to "<em>❖</em>Send test".html_safe, send_test_newsletter_path(@newsletter), :id => "send_test"%>
6
6
  </li>
7
- <% if !@newsletter.sent? and @newsletter.persisted?%>
7
+ <% if @queues_working %>
8
+ <div class="notice">Some workers are still working, delivering disabled for now! Please reload later!</div>
9
+
10
+ <% elsif !@newsletter.sent? and @newsletter.persisted?%>
8
11
  <% if Newsly.recipient_groups.count > 0 %>
9
12
  <li class="groups">
10
13
  <form id="groupform" class="groupform">
@@ -12,7 +15,7 @@
12
15
  <ul>
13
16
  <% @max_batch_size = 0 %>
14
17
  <% for group in Newsly.recipient_groups %>
15
- <% @group_count = group[1].call.count %>
18
+ <% @group_count = group[1].call(@newsletter.id).count %>
16
19
  <% @max_batch_size = @max_batch_size + @group_count %>
17
20
  <li>
18
21
  <input type="checkbox" name="<%=group[0].to_s%>" value="<%=group[0].to_s%>" id="group_<%=group[0].to_s%>" data-max="<%= @group_count %>"/>
@@ -23,8 +26,7 @@
23
26
  </form>
24
27
  </li>
25
28
  <li class="button range deliverbutton">
26
- <span id="batch_size_preview"></span>
27
- <input type="range" min="0" value="0" max="<%= @max_batch_size %>" id="batch_size" />
29
+ <input type="text" data-max="<%= @max_batch_size %>" id="batch_size" />
28
30
  <%= link_to "<em>✈</em>Deliver Batch!".html_safe, deliver_batch_newsletter_path(@newsletter), :id => "deliver_batch"%>
29
31
  </li>
30
32
  <li class="button deliverbutton">
@@ -2,7 +2,7 @@ module Newsly
2
2
  class NewsletterBatchSender
3
3
  @queue = :newsletter
4
4
  def self.perform(newsletter_id, recipient_group, batch_size)
5
- Newsly.get_newsletter_receipient_group(recipient_group.to_sym).call.limit(batch_size).each do |resource|
5
+ Newsly.get_newsletter_receipient_group(recipient_group.to_sym).call(newsletter_id).limit(batch_size).each do |resource|
6
6
  Newsly::Mailer.async_deliver.build_newsletter(newsletter_id, resource.send(Newsly.resource_email_column), resource.to_liquid)
7
7
  end
8
8
  end
@@ -3,7 +3,7 @@ module Newsly
3
3
  @queue = :newsletter
4
4
  def self.perform(newsletter_id, recipient_groups)
5
5
  for group in recipient_groups
6
- Newsly.get_newsletter_receipient_group(group.to_sym).call.find_each(:batch_size => 1000) do |resource|
6
+ Newsly.get_newsletter_receipient_group(group.to_sym).call(newsletter_id).find_each(:batch_size => 1000) do |resource|
7
7
  Newsly::Mailer.async_deliver.build_newsletter(newsletter_id, resource.send(Newsly.resource_email_column), resource.to_liquid)
8
8
  end
9
9
  end
@@ -0,0 +1,9 @@
1
+ class CreateNewslyRecipients < ActiveRecord::Migration
2
+ def change
3
+ create_table :newsly_recipients do |t|
4
+ t.newsletter_id :integer
5
+ t.email :string
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Newsly
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -19,9 +19,11 @@ jQuery(document).ready(function($) {
19
19
  $('a#deliver_batch').click(function(e){
20
20
  e.preventDefault();
21
21
  top.Mercury.trigger('action', {action: 'save'});
22
+
22
23
  var url = $(this).attr('href');
23
24
  var recipient_groups = get_recipient_groups();
24
25
  if($('#batch_size').val() <= 0){ alert('Batch size cant be 0!'); return false;}
26
+ if($('#batch_size').val() > parseInt($('#batch_size').attr('data-max'))){ alert('Batch size cant be over group count!'); return false;}
25
27
  if(recipient_groups.length == 1){
26
28
  var newsletter_id = $("#newsletter").attr('data-id');
27
29
  var answer = prompt('Are you sure? Type "BATCH"');
@@ -33,7 +35,8 @@ jQuery(document).ready(function($) {
33
35
  data: {'_method': 'PUT', 'answer': answer, 'recipient_group': recipient_groups[0], 'batch_size': batch_size},
34
36
  success: function(data){
35
37
  $("#flash").html(data).show().hide("fade", {}, 1000);
36
- calculate_group_count(recipient_groups[0], batch_size);
38
+ $(".deliverbutton").remove();
39
+ $('.groups').remove();
37
40
  }
38
41
  });
39
42
  }
@@ -84,19 +87,17 @@ jQuery(document).ready(function($) {
84
87
  });
85
88
 
86
89
  $('#groupform input[type=checkbox]').change(function(){
87
- if(get_recipient_groups().length > 0){
90
+ group_length = get_recipient_groups().length;
91
+ if(group_length > 0){
88
92
  $('.deliverbutton').show();
93
+ if(group_length > 1){
94
+ $('li.range').hide();
95
+ }
89
96
  set_batch_size();
90
97
  } else {
91
98
  $('.deliverbutton').hide();
92
99
  }
93
100
  });
94
-
95
- $('#batch_size').change(function(e){
96
- $('#batch_size_preview').html($(this).val());
97
- });
98
-
99
- set_batch_size();
100
101
  };
101
102
 
102
103
  });
@@ -105,10 +106,7 @@ jQuery(document).ready(function($) {
105
106
  var set_batch_size = function(){
106
107
  max_batch_size = get_maximum_batch_size();
107
108
  $('#batch_size').val(0);
108
- $('#batch_size_preview').html($('#batch_size').val());
109
- $('#batch_size').attr('max', max_batch_size);
110
- $('#batch_size').attr('min', 0);
111
- $('#batch_size').val(0);
109
+ $('#batch_size').attr('data-max', max_batch_size);
112
110
  }
113
111
 
114
112
  var get_recipient_groups = function(){
@@ -131,11 +129,4 @@ var get_maximum_batch_size = function(){
131
129
  });
132
130
  console.log('MAXIMUM SIZE '+ max_size);
133
131
  return max_size;
134
- }
135
-
136
- var calculate_group_count = function(groupname, batch_size){
137
- new_max_size = parseInt($('#group_'+groupname).attr('data-max')) - batch_size;
138
- $('#group_'+groupname).attr('data-max', new_max_size);
139
- $('label[for=group_'+groupname+'] .count').html(new_max_size);
140
- set_batch_size();
141
132
  }
@@ -248,7 +248,7 @@ form{
248
248
  .aloha-sidebar-handle, .aloha-sidebar-bar{
249
249
  display: none;
250
250
  }
251
- #flash{
251
+ #flash, .flash{
252
252
  float: left;
253
253
  width: 100%;
254
254
  background: #feb;
@@ -256,22 +256,17 @@ form{
256
256
  padding: 10px 0;
257
257
  display: none;
258
258
  }
259
-
260
- #batch_size_preview{
259
+ .notice{
260
+ background: #c00;
261
+ color: #fff;
262
+ font-size: 0.9em;
261
263
  float: left;
262
- background: #feb;
263
- padding: 1px 5px;
264
- border-radius: 5px;
265
- font-size: 0.85em;
266
- margin-bottom: 10px;
267
- width: 20%;
268
- text-align: center;
264
+ padding: 10px;
265
+ margin: 10px 0;
269
266
  }
270
267
  #batch_size{
271
- float: right;
272
- width: 70%;
273
268
  padding: 0;
274
- margin-top: 5px;
269
+ margin: 5px 0;
275
270
  }
276
271
  li.deliverbutton{
277
272
  display: none;
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.3.0
4
+ version: 0.3.1
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-04 00:00:00.000000000Z
13
+ date: 2011-10-06 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2153344680 !ruby/object:Gem::Requirement
17
+ requirement: &2165539980 !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: *2153344680
25
+ version_requirements: *2165539980
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: resque
28
- requirement: &2153344200 !ruby/object:Gem::Requirement
28
+ requirement: &2165539440 !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: *2153344200
36
+ version_requirements: *2165539440
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: liquid
39
- requirement: &2153343700 !ruby/object:Gem::Requirement
39
+ requirement: &2165538860 !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: *2153343700
47
+ version_requirements: *2165538860
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: jquery-rails
50
- requirement: &2153343260 !ruby/object:Gem::Requirement
50
+ requirement: &2165538360 !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: *2153343260
58
+ version_requirements: *2165538360
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: resque-async_deliver
61
- requirement: &2153342800 !ruby/object:Gem::Requirement
61
+ requirement: &2165537860 !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: *2153342800
69
+ version_requirements: *2165537860
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: sqlite3
72
- requirement: &2153342360 !ruby/object:Gem::Requirement
72
+ requirement: &2165537320 !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: *2153342360
80
+ version_requirements: *2165537320
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: letter_opener
83
- requirement: &2153341920 !ruby/object:Gem::Requirement
83
+ requirement: &2165536780 !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: *2153341920
91
+ version_requirements: *2165536780
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: unicorn
94
- requirement: &2153341460 !ruby/object:Gem::Requirement
94
+ requirement: &2165536280 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,7 +99,7 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2153341460
102
+ version_requirements: *2165536280
103
103
  description: Manage mailer templates via wysiwyg and liquid. Uses mercury editor for
104
104
  now. And send out newsletters.
105
105
  email:
@@ -115,6 +115,7 @@ files:
115
115
  - app/helpers/newsly/application_helper.rb
116
116
  - app/mailers/newsly/mailer.rb
117
117
  - app/models/newsly/newsletter.rb
118
+ - app/models/newsly/recipient.rb
118
119
  - app/models/newsly/template.rb
119
120
  - app/views/layouts/newsly/application.html.erb
120
121
  - app/views/layouts/newsly/mailer.html.erb
@@ -135,6 +136,7 @@ files:
135
136
  - db/migrate/20110927120903_add_text_body_fields.rb
136
137
  - db/migrate/20110929142039_remove_text_body_fields.rb
137
138
  - db/migrate/20111004085523_add_fields_to_newsletter.rb
139
+ - db/migrate/20111006122345_create_newsly_recipients.rb
138
140
  - lib/newsly/engine.rb
139
141
  - lib/newsly/version.rb
140
142
  - lib/newsly.rb