actionmailer-callbacks 0.0.2 → 1.0.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.
- data/.rspec +2 -0
- data/Gemfile +1 -1
- data/Guardfile +17 -0
- data/LICENSE +22 -0
- data/README.md +43 -43
- data/Rakefile +5 -4
- data/actionmailer-callbacks.gemspec +20 -21
- data/features/around_create_callback.feature +84 -0
- data/features/before_create_callback.feature +76 -0
- data/features/step_definitions/before_create_callback_steps.rb +25 -0
- data/features/support/env.rb +4 -0
- data/features/support/hooks.rb +3 -0
- data/features/support/world_extensions.rb +9 -0
- data/lib/actionmailer-callbacks.rb +6 -11
- data/lib/actionmailer-callbacks/callback.rb +25 -0
- data/lib/actionmailer-callbacks/callbackable.rb +44 -0
- data/lib/actionmailer-callbacks/extensions.rb +24 -0
- data/lib/{actionmailer/callbacks → actionmailer-callbacks}/version.rb +1 -1
- data/spec/lib/actionmailer-callbacks/callback_spec.rb +49 -0
- data/spec/lib/actionmailer-callbacks/callbackable_spec.rb +103 -0
- data/spec/lib/actionmailer-callbacks/extensions_spec.rb +35 -0
- data/spec/spec_helper.rb +2 -8
- data/spec/support/custom_matchers.rb +5 -0
- metadata +95 -29
- data/lib/actionmailer/callbacks/callback.rb +0 -22
- data/lib/actionmailer/callbacks/methods.rb +0 -116
- data/spec/callback_spec.rb +0 -53
- data/spec/fixtures/mailer_with_callbacks.rb +0 -49
- data/spec/fixtures/mailer_without_callbacks.rb +0 -8
- data/spec/integration/action_mailer_integration_spec.rb +0 -135
- data/spec/methods_spec.rb +0 -82
- data/spec/support/flag.rb +0 -21
@@ -1,14 +1,9 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'active_support'
|
3
1
|
require 'action_mailer'
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
lib_dir = File.expand_path('..', __FILE__)
|
4
|
+
require File.join(lib_dir, 'actionmailer-callbacks/version')
|
5
|
+
require File.join(lib_dir, 'actionmailer-callbacks/callback')
|
6
|
+
require File.join(lib_dir, 'actionmailer-callbacks/callbackable')
|
7
|
+
require File.join(lib_dir, 'actionmailer-callbacks/extensions')
|
9
8
|
|
10
|
-
|
11
|
-
require 'actionmailer/callbacks/callback'
|
12
|
-
require 'actionmailer/callbacks/methods'
|
13
|
-
|
14
|
-
ActionMailer::Base.send :include, ActionMailer::Callbacks::Methods
|
9
|
+
ActionMailer::Base.extend ActionMailer::Callbacks::Extensions
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ActionMailer
|
2
|
+
module Callbacks
|
3
|
+
class Callback
|
4
|
+
attr_reader :name, :only, :except
|
5
|
+
|
6
|
+
def initialize(name, opts={})
|
7
|
+
@name = name
|
8
|
+
@only = Array.wrap(opts[:only])
|
9
|
+
@except = Array.wrap(opts[:except])
|
10
|
+
end
|
11
|
+
|
12
|
+
def run?(callback_method)
|
13
|
+
if only.include?(callback_method)
|
14
|
+
true
|
15
|
+
else
|
16
|
+
if except.include?(callback_method)
|
17
|
+
false
|
18
|
+
else
|
19
|
+
only.empty? ? true : false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module ActionMailer
|
2
|
+
module Callbacks
|
3
|
+
module Callbackable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def before_create_callbacks
|
8
|
+
@before_create_callbacks ||= Set.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_before_create_callback(callback)
|
12
|
+
@before_create_callbacks << callback
|
13
|
+
end
|
14
|
+
|
15
|
+
def around_create_callback
|
16
|
+
@around_create_callback
|
17
|
+
end
|
18
|
+
|
19
|
+
def reset_callbacks
|
20
|
+
@before_create_callbacks = Set.new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(method, *args)
|
25
|
+
result = nil
|
26
|
+
around_create_callback = self.class.around_create_callback
|
27
|
+
if around_create_callback and around_create_callback.run?(method)
|
28
|
+
send self.class.around_create_callback.name, *args do
|
29
|
+
self.class.before_create_callbacks.each do |callback|
|
30
|
+
send callback.name, *args if callback.run?(method)
|
31
|
+
end
|
32
|
+
result = super
|
33
|
+
end
|
34
|
+
result
|
35
|
+
else
|
36
|
+
self.class.before_create_callbacks.each do |callback|
|
37
|
+
send callback.name, *args if callback.run?(method)
|
38
|
+
end
|
39
|
+
super
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ActionMailer
|
2
|
+
module Callbacks
|
3
|
+
module Extensions
|
4
|
+
def before_create(*args)
|
5
|
+
include_callbackable
|
6
|
+
before_create_callbacks << Callback.new(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
def around_create(*args)
|
10
|
+
include_callbackable
|
11
|
+
@around_create_callback = Callback.new(*args)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def include_callbackable
|
17
|
+
callbackable = ActionMailer::Callbacks::Callbackable
|
18
|
+
unless ancestors.include?(callbackable)
|
19
|
+
include callbackable
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ActionMailer
|
4
|
+
module Callbacks
|
5
|
+
describe Callback do
|
6
|
+
context 'creating an instance' do
|
7
|
+
it 'requires name' do
|
8
|
+
expect {Callback.new}.to raise_error(ArgumentError)
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'when name but no option is passed' do
|
12
|
+
subject {Callback.new(:name)}
|
13
|
+
|
14
|
+
it 'runs all callback methods' do
|
15
|
+
subject.should run(:any_method)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when name and all options are passed' do
|
20
|
+
subject {Callback.new(:name, :only => :only_method, :except => [:except_method])}
|
21
|
+
|
22
|
+
it 'sets "name" attribute' do
|
23
|
+
subject.name.should == :name
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'sets "only" reader' do
|
27
|
+
subject.only.should == [:only_method]
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'sets "except" reader' do
|
31
|
+
subject.except.should == [:except_method]
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'runs the methods included in the "only" list' do
|
35
|
+
subject.should run(:only_method)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'skips the methods not included in the "only" list' do
|
39
|
+
subject.should_not run(:other_method)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'skips the methods included in the "except" list' do
|
43
|
+
subject.should_not run(:except_method)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ActionMailer
|
4
|
+
module Callbacks
|
5
|
+
describe Callbackable do
|
6
|
+
let(:sample_class) {Class.new {include Callbackable}}
|
7
|
+
let(:callback) {double(name: :callback_method)}
|
8
|
+
|
9
|
+
subject {sample_class}
|
10
|
+
|
11
|
+
before {subject.reset_callbacks}
|
12
|
+
|
13
|
+
context '#initialize' do
|
14
|
+
it 'checks for the around_create callback' do
|
15
|
+
sample_class.should_receive(:around_create_callback)
|
16
|
+
sample_class.new(:mailer_method)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'does not run the around_create callback if present but should not run' do
|
20
|
+
callback.stub(run?: false)
|
21
|
+
sample_class.stub(around_create_callback: callback)
|
22
|
+
sample_class.any_instance.should_not_receive(:callback_method)
|
23
|
+
sample_class.new(:mailer_method)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'runs the around_create callback if present and should run' do
|
27
|
+
callback.stub(run?: true)
|
28
|
+
sample_class.stub(around_create_callback: callback)
|
29
|
+
sample_class.any_instance.should_receive(:callback_method)
|
30
|
+
sample_class.new(:mailer_method)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'cycles on before_create_callbacks' do
|
34
|
+
sample_class.should_receive(:before_create_callbacks).and_return([])
|
35
|
+
sample_class.new(:mailer_method)
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'when the callback should run' do
|
39
|
+
before {callback.stub run?: true}
|
40
|
+
|
41
|
+
it 'runs the callback included in the list' do
|
42
|
+
sample_class.stub(before_create_callbacks: [callback])
|
43
|
+
sample_class.any_instance.should_receive(:callback_method)
|
44
|
+
sample_class.new(:mailer_method)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'pass all the params to the callback' do
|
48
|
+
sample_class.stub(before_create_callbacks: [callback])
|
49
|
+
sample_class.any_instance.should_receive(:callback_method).with(:params)
|
50
|
+
sample_class.new(:mailer_method, :params)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when the callback should not run' do
|
55
|
+
before {callback.stub run?: false}
|
56
|
+
|
57
|
+
it 'does not run the callback included in the list' do
|
58
|
+
sample_class.stub(before_create_callbacks: [callback])
|
59
|
+
sample_class.any_instance.should_not_receive(:callback_method)
|
60
|
+
sample_class.new(:mailer_method)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'class methods' do
|
66
|
+
describe 'before_create_callbacks' do
|
67
|
+
it 'responds to before_create_callbacks' do
|
68
|
+
subject.should respond_to(:before_create_callbacks)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'before_create_callbacks should be empty at start' do
|
72
|
+
subject.before_create_callbacks.should be_empty
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe 'add_before_create_callback' do
|
77
|
+
it 'responds to add_before_create_callback' do
|
78
|
+
subject.should respond_to(:add_before_create_callback)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'adds a callback to the before_create_callbacks list' do
|
82
|
+
subject.add_before_create_callback callback
|
83
|
+
subject.before_create_callbacks.should include(callback)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'does not add the same callback twice' do
|
87
|
+
2.times {subject.add_before_create_callback callback}
|
88
|
+
subject.before_create_callbacks.should have(1).callback
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'reset_callbacks' do
|
93
|
+
it 'empties the before_create_callbacks list' do
|
94
|
+
subject.add_before_create_callback callback
|
95
|
+
lambda do
|
96
|
+
subject.reset_callbacks
|
97
|
+
end.should change(subject, :before_create_callbacks).to(Set.new)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ActionMailer
|
4
|
+
module Callbacks
|
5
|
+
describe Extensions do
|
6
|
+
subject {Class.new {extend Extensions}}
|
7
|
+
|
8
|
+
context 'class methods' do
|
9
|
+
it 'responds to before_create' do
|
10
|
+
subject.should respond_to(:before_create)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'responds to around_create' do
|
14
|
+
subject.should respond_to(:around_create)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'before_create' do
|
18
|
+
it 'adds Callbackable to the ancestors' do
|
19
|
+
Callback.stub(:new)
|
20
|
+
subject.before_create
|
21
|
+
subject.ancestors.should include(ActionMailer::Callbacks::Callbackable)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'around_create' do
|
26
|
+
it 'adds Callbackable to the ancestors' do
|
27
|
+
Callback.stub(:new)
|
28
|
+
subject.around_create
|
29
|
+
subject.ancestors.should include(ActionMailer::Callbacks::Callbackable)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.join(current_dir, '../lib/actionmailer-callbacks')
|
4
|
-
Dir[File.expand_path(File.join(current_dir, 'support', '**', '*.rb'))].each {|f| require f}
|
5
|
-
Dir[File.expand_path(File.join(current_dir, 'fixtures', '**', '*.rb'))].each {|f| require f}
|
6
|
-
|
7
|
-
# don't raise email sending erros
|
8
|
-
ActionMailer::Base.raise_delivery_errors = false
|
1
|
+
require 'support/custom_matchers'
|
2
|
+
require File.expand_path('../../lib/actionmailer-callbacks', __FILE__)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionmailer-callbacks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,14 +12,30 @@ cert_chain: []
|
|
12
12
|
date: 2012-05-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: actionmailer
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activesupport
|
16
32
|
requirement: !ruby/object:Gem::Requirement
|
17
33
|
none: false
|
18
34
|
requirements:
|
19
35
|
- - ! '>='
|
20
36
|
- !ruby/object:Gem::Version
|
21
37
|
version: '0'
|
22
|
-
type: :
|
38
|
+
type: :runtime
|
23
39
|
prerelease: false
|
24
40
|
version_requirements: !ruby/object:Gem::Requirement
|
25
41
|
none: false
|
@@ -44,38 +60,70 @@ dependencies:
|
|
44
60
|
- !ruby/object:Gem::Version
|
45
61
|
version: '0'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
63
|
+
name: rspec
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
49
65
|
none: false
|
50
66
|
requirements:
|
51
67
|
- - ~>
|
52
68
|
- !ruby/object:Gem::Version
|
53
|
-
version: 2.
|
54
|
-
type: :
|
69
|
+
version: '2.0'
|
70
|
+
type: :development
|
55
71
|
prerelease: false
|
56
72
|
version_requirements: !ruby/object:Gem::Requirement
|
57
73
|
none: false
|
58
74
|
requirements:
|
59
75
|
- - ~>
|
60
76
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
77
|
+
version: '2.0'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
79
|
+
name: cucumber
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
65
81
|
none: false
|
66
82
|
requirements:
|
67
83
|
- - ~>
|
68
84
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
70
|
-
type: :
|
85
|
+
version: '1.0'
|
86
|
+
type: :development
|
71
87
|
prerelease: false
|
72
88
|
version_requirements: !ruby/object:Gem::Requirement
|
73
89
|
none: false
|
74
90
|
requirements:
|
75
91
|
- - ~>
|
76
92
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
|
93
|
+
version: '1.0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: guard-rspec
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: guard-cucumber
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: adds before_create, around_create callbacks to action mailer 3
|
79
127
|
email:
|
80
128
|
- andrea@spaghetticode.it
|
81
129
|
executables: []
|
@@ -83,23 +131,31 @@ extensions: []
|
|
83
131
|
extra_rdoc_files: []
|
84
132
|
files:
|
85
133
|
- .gitignore
|
134
|
+
- .rspec
|
86
135
|
- .travis
|
87
136
|
- Gemfile
|
137
|
+
- Guardfile
|
138
|
+
- LICENSE
|
88
139
|
- README.md
|
89
140
|
- Rakefile
|
90
141
|
- actionmailer-callbacks.gemspec
|
142
|
+
- features/around_create_callback.feature
|
143
|
+
- features/before_create_callback.feature
|
144
|
+
- features/step_definitions/before_create_callback_steps.rb
|
145
|
+
- features/support/env.rb
|
146
|
+
- features/support/hooks.rb
|
147
|
+
- features/support/world_extensions.rb
|
91
148
|
- lib/actionmailer-callbacks.rb
|
92
|
-
- lib/actionmailer
|
93
|
-
- lib/actionmailer
|
94
|
-
- lib/actionmailer
|
95
|
-
-
|
96
|
-
- spec/
|
97
|
-
- spec/
|
98
|
-
- spec/
|
99
|
-
- spec/methods_spec.rb
|
149
|
+
- lib/actionmailer-callbacks/callback.rb
|
150
|
+
- lib/actionmailer-callbacks/callbackable.rb
|
151
|
+
- lib/actionmailer-callbacks/extensions.rb
|
152
|
+
- lib/actionmailer-callbacks/version.rb
|
153
|
+
- spec/lib/actionmailer-callbacks/callback_spec.rb
|
154
|
+
- spec/lib/actionmailer-callbacks/callbackable_spec.rb
|
155
|
+
- spec/lib/actionmailer-callbacks/extensions_spec.rb
|
100
156
|
- spec/spec_helper.rb
|
101
|
-
- spec/support/
|
102
|
-
homepage:
|
157
|
+
- spec/support/custom_matchers.rb
|
158
|
+
homepage: http://github.com/spaghetticode/actionmailer-callbacks
|
103
159
|
licenses: []
|
104
160
|
post_install_message:
|
105
161
|
rdoc_options: []
|
@@ -111,23 +167,33 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
167
|
- - ! '>='
|
112
168
|
- !ruby/object:Gem::Version
|
113
169
|
version: '0'
|
170
|
+
segments:
|
171
|
+
- 0
|
172
|
+
hash: 1517825137690287905
|
114
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
174
|
none: false
|
116
175
|
requirements:
|
117
176
|
- - ! '>='
|
118
177
|
- !ruby/object:Gem::Version
|
119
178
|
version: '0'
|
179
|
+
segments:
|
180
|
+
- 0
|
181
|
+
hash: 1517825137690287905
|
120
182
|
requirements: []
|
121
183
|
rubyforge_project:
|
122
184
|
rubygems_version: 1.8.24
|
123
185
|
signing_key:
|
124
186
|
specification_version: 3
|
125
|
-
summary:
|
187
|
+
summary: adds before_create, around_create callbacks to action mailer 3
|
126
188
|
test_files:
|
127
|
-
-
|
128
|
-
-
|
129
|
-
-
|
130
|
-
-
|
131
|
-
-
|
189
|
+
- features/around_create_callback.feature
|
190
|
+
- features/before_create_callback.feature
|
191
|
+
- features/step_definitions/before_create_callback_steps.rb
|
192
|
+
- features/support/env.rb
|
193
|
+
- features/support/hooks.rb
|
194
|
+
- features/support/world_extensions.rb
|
195
|
+
- spec/lib/actionmailer-callbacks/callback_spec.rb
|
196
|
+
- spec/lib/actionmailer-callbacks/callbackable_spec.rb
|
197
|
+
- spec/lib/actionmailer-callbacks/extensions_spec.rb
|
132
198
|
- spec/spec_helper.rb
|
133
|
-
- spec/support/
|
199
|
+
- spec/support/custom_matchers.rb
|