mallet 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,8 +2,7 @@ class CreateMalletTables < ActiveRecord::Migration
2
2
  def self.change
3
3
 
4
4
  create_table "mallet_mails", :force => true do |t|
5
- t.string "mailer_class"
6
- t.string "mailer_method"
5
+ t.string "definition"
7
6
  t.string "malletable_type"
8
7
  t.string "malletable_id"
9
8
  t.string "workflow_state"
@@ -12,8 +12,7 @@ module Mallet
12
12
  scope :failed, where(workflow_state: 'failed')
13
13
  scope :for, lambda {|malletable| where(malletable_type: malletable.class.name, malletable_id: malletable.id)}
14
14
 
15
- validates_presence_of :mailer_class
16
- validates_presence_of :mailer_method
15
+ validates_presence_of :definition
17
16
  validates_presence_of :malletable
18
17
 
19
18
  before_save :validate
@@ -34,6 +33,7 @@ module Mallet
34
33
  end
35
34
 
36
35
  def validate
36
+ raise Exception unless DEFINITIONS.has_key?(definition)
37
37
  raise Exception unless mailer_class.constantize.ancestors.include? ActionMailer::Base
38
38
  end
39
39
 
@@ -42,6 +42,7 @@ module Mallet
42
42
  end
43
43
 
44
44
  def deliver
45
+ validate
45
46
  mailer_class.constantize.send mailer_method.to_sym, malletable
46
47
  end
47
48
 
@@ -49,6 +50,16 @@ module Mallet
49
50
  pending.each(&:delayed_delivery)
50
51
  end
51
52
 
53
+ protected
54
+
55
+ def mailer_class
56
+ DEFINITIONS[definition]['mailer']
57
+ end
58
+
59
+ def mailer_method
60
+ DEFINITIONS[definition]['method']
61
+ end
62
+
52
63
  end
53
64
 
54
65
  end
@@ -13,25 +13,13 @@ module Mallet
13
13
  mail.malletable_id = malletable.id
14
14
  end
15
15
 
16
- def mailer(mailer)
17
- mail.mailer_class = mailer
18
- end
19
-
20
- def method(method)
21
- mail.mailer_method = method
16
+ def definition(name)
17
+ mail.definition = name
22
18
  end
23
19
 
24
20
  def persist!
25
21
  mail.save!
26
22
  end
27
-
28
- def definition(name)
29
- (DEFINITIONS[name] || {}).each do |key, value|
30
- if respond_to?(key.to_sym)
31
- send key.to_sym, value
32
- end
33
- end
34
- end
35
23
 
36
24
  end
37
25
 
@@ -1,3 +1,3 @@
1
1
  module Mallet
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -1,8 +1,7 @@
1
1
  ActiveRecord::Schema.define do
2
2
 
3
3
  create_table "mallet_mails", :force => true do |t|
4
- t.string "mailer_class"
5
- t.string "mailer_method"
4
+ t.string "definition"
6
5
  t.string "malletable_type"
7
6
  t.string "malletable_id"
8
7
  t.string "workflow_state"
@@ -4,6 +4,11 @@ describe Mallet::Mail do
4
4
 
5
5
  before(:each) do
6
6
  @job = Delayed::Job.create!
7
+
8
+ Mallet::DEFINITIONS['welcome'] = {
9
+ 'mailer' => 'ActionMailer::Base',
10
+ 'method' => 'welcome'
11
+ }
7
12
  end
8
13
 
9
14
  context "on creation" do
@@ -13,8 +18,7 @@ describe Mallet::Mail do
13
18
 
14
19
  @mail = Mallet::mail do
15
20
  to job
16
- mailer ActionMailer::Base.name
17
- method 'welcome'
21
+ definition 'welcome'
18
22
  end
19
23
  end
20
24
 
@@ -26,6 +30,14 @@ describe Mallet::Mail do
26
30
  @mail.malletable.should == @job
27
31
  end
28
32
 
33
+ it "should identify the mailer class" do
34
+ @mail.send(:mailer_class).should == "ActionMailer::Base"
35
+ end
36
+
37
+ it "should identify the mailer method" do
38
+ @mail.send(:mailer_method).should == "welcome"
39
+ end
40
+
29
41
  it "should trigger sending the mail via delayed job" do
30
42
  Delayed::Job.count.should == 2
31
43
  ActionMailer::Base.should_receive(:welcome).with(@job)
@@ -33,29 +45,13 @@ describe Mallet::Mail do
33
45
  end
34
46
 
35
47
  it "should raise an exception if the mailer does not inherit from ActionMailer" do
36
- @mail.mailer_class = String.name
37
- expect { @mail.save! }.to raise_error
38
- end
39
-
40
- end
41
-
42
- context "creating a mallet mail" do
43
-
44
- it "should allow a definition to be specified" do
45
- Mallet::DEFINITIONS['audit'] = {
46
- 'mailer' => 'ActionMailer::Base',
48
+ Mallet::DEFINITIONS['bad_definition'] = {
49
+ 'mailer' => 'ActionMailer::Base2',
47
50
  'method' => 'welcome'
48
51
  }
49
52
 
50
- job = @job
51
-
52
- @mail = Mallet::mail do
53
- to job
54
- definition 'audit'
55
- end
56
-
57
- @mail.mailer_class.should == 'ActionMailer::Base'
58
- @mail.mailer_method.should == 'welcome'
53
+ @mail.definition = 'bad_definition'
54
+ expect { @mail.save! }.to raise_error
59
55
  end
60
56
 
61
57
  end
@@ -67,8 +63,7 @@ describe Mallet::Mail do
67
63
 
68
64
  @mail = Mallet::mail do
69
65
  to job
70
- mailer ActionMailer::Base.name
71
- method 'welcome'
66
+ definition 'welcome'
72
67
  end
73
68
 
74
69
  @job = job
@@ -91,8 +86,7 @@ describe Mallet::Mail do
91
86
  expect {
92
87
  Mallet::mail do
93
88
  to job
94
- mailer ActionMailer::Base.name
95
- method 'welcome'
89
+ definition 'welcome'
96
90
  end
97
91
  }.to change{ Mallet::Mail.pending.count }.by(1)
98
92
  end
@@ -102,8 +96,7 @@ describe Mallet::Mail do
102
96
 
103
97
  mail = Mallet::mail do
104
98
  to job
105
- mailer ActionMailer::Base.name
106
- method 'welcome'
99
+ definition 'welcome'
107
100
  end
108
101
 
109
102
  expect {mail.error!}.to change{ Mallet::Mail.failed.count }.by(1)
@@ -114,8 +107,7 @@ describe Mallet::Mail do
114
107
 
115
108
  mail = Mallet::mail do
116
109
  to job
117
- mailer ActionMailer::Base.name
118
- method 'welcome'
110
+ definition 'welcome'
119
111
  end
120
112
 
121
113
  mail.should_receive(:deliver)
@@ -128,8 +120,7 @@ describe Mallet::Mail do
128
120
  expect{
129
121
  mail = Mallet::mail do
130
122
  to job
131
- mailer ActionMailer::Base.name
132
- method 'welcome'
123
+ definition 'welcome'
133
124
  end
134
125
  }.to change{ Mallet::Mail.for(job).count }.by(1)
135
126
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mallet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: