actionmailer-callbacks 1.0.0 → 1.1.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.
@@ -1,3 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
1
4
  branches:
2
5
  only:
3
6
  - master
data/README.md CHANGED
@@ -2,22 +2,24 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/spaghetticode/actionmailer-callbacks.png)](http://travis-ci.org/spaghetticode/actionmailer-callbacks)
4
4
 
5
- This gem adds before_create and around_create to ActionMailer::Base to make it
6
- work similarly to ActionController before/around filters and ActiveRecord::Base
7
- callbacks:
5
+ This gem adds ```before_create``` and ```around_create``` to ActionMailer::Base
6
+ to make it work similarly to ActionController before/around filters and
7
+ ActiveRecord::Base callbacks:
8
8
 
9
9
  ```ruby
10
- before_create :log_params, except: :test_email
11
- around_create :benchmark, only: :test_email
10
+ before_create :log_params, except: :test_email
11
+ around_create :benchmark, only: :test_email
12
12
  ```
13
13
 
14
- *except* and *only* options are optional and has same functionality as in
14
+ ```except``` and ```only``` options are optional and has same functionality as in
15
15
  ActionController.
16
16
 
17
+ Callbacks functionality is implemented using the ActiveSupport::Callbacks module.
18
+
17
19
 
18
20
  ## Requirements
19
21
 
20
- The master branch now works only with Actionmailer 3.x, if you need to add
22
+ The master branch now works only with ActionMailer 3.x, if you need to add
21
23
  callbacks to older versions please refer to the 0.x release.
22
24
 
23
25
 
@@ -31,24 +33,29 @@ Add the gem to the Gemfile:
31
33
 
32
34
  And then run ```bundle```
33
35
 
34
- >>>>>>> actionmailer3
36
+
37
+ ## Documentation
38
+
39
+ You can find some more documentation on the workings of the gem on relish:
40
+ https://www.relishapp.com/spaghetticode/actionmailer-callbacks/docs
41
+
35
42
 
36
43
  ## Notes
37
44
 
38
45
  If you need something like before/after deliver callbacks ActionMailer 3.x comes
39
- ready for that: you can use an *observer* or an *instrumentation* for that.
46
+ ready for that: you can use an **observer** or an **instrumentation** for that.
40
47
 
41
- *around_create* wrap the mail method execution (and all before_create callbacks).
42
- You can use them for rescuing from errors or for benchmarking, for example.
43
- There can be only one *around_create* method for each email method, if you
44
- register more than one only the first will be executed.
48
+ The **around_create** callback wraps the entire mail method execution. You can
49
+ use them for rescuing from errors or for benchmarking, for example.
45
50
 
51
+ The gem adds the ```args``` attribute accessor to the mail object in order to
52
+ be able to access the arguments used for its initialization.
46
53
 
47
54
  ## Example
48
55
 
49
56
  ```ruby
50
57
  class UserMailer < ActionMailer::Base
51
- before_create :log_params
58
+ before_create :log_args
52
59
  around_create :rescue_from_errors
53
60
 
54
61
  def user_registration(user)
@@ -57,7 +64,7 @@ register more than one only the first will be executed.
57
64
 
58
65
  private
59
66
 
60
- def log_params(args)
67
+ def log_args
61
68
  MailerLogger.info "[CREATE] #{args.inspect}"
62
69
  end
63
70
 
data/Rakefile CHANGED
@@ -11,4 +11,27 @@ task :spec do
11
11
  end
12
12
  end
13
13
 
14
- task :default => :spec
14
+ desc 'Run cucumber features'
15
+ task :cucumber do
16
+ require 'cucumber/rake/task'
17
+
18
+ Cucumber::Rake::Task.new do |t|
19
+ t.rcov = false
20
+ end
21
+ end
22
+
23
+ desc 'Runs tests on Travis CI'
24
+ task :travis do
25
+ ["rspec spec", "rake cucumber"].each do |cmd|
26
+ puts "Starting to run #{cmd}..."
27
+ system("export DISPLAY=:99.0 && bundle exec #{cmd}")
28
+ raise "#{cmd} failed!" unless $?.exitstatus == 0
29
+ end
30
+ end
31
+
32
+ if ENV['TRAVIS']
33
+ task :default => :travis
34
+ else
35
+ task :default => [:spec, :cucumber]
36
+ end
37
+
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = 'actionmailer-callbacks'
15
15
  gem.require_paths = ["lib"]
16
- gem.version = Actionmailer::Callbacks::VERSION
16
+ gem.version = ActionMailer::Callbacks::VERSION
17
17
 
18
18
  gem.add_dependency 'actionmailer', '~> 3.0'
19
19
  gem.add_dependency 'activesupport'
@@ -1,19 +1,22 @@
1
1
  Feature: around_create callback
2
2
  As an actionmailer gem user
3
- I want to be able to use the around_create callback
4
- So that I can wrap the email creation process with my callback
3
+ I want to be able to use the *around_create* callback
4
+ so that I can wrap the email creation process with my callback.
5
5
 
6
- The "around_create" callback allows to wrap the email creation
6
+ The *around_create* callback allows to wrap the email creation
7
7
  process around another method definition.
8
+
8
9
  The macro accepts the callback name as first arguments and an
9
- optional hash with "only" and/or "except" keys that are
10
- functionally equivalent to the ones of ActionController
10
+ optional hash with *only* and/or *except* keys that are
11
+ functionally equivalent to the ones of ApplicationController
11
12
  before/after/around create filters: for example in order
12
13
  to run a callback only for the "test" action you should
13
14
  specify one of the following:
15
+
14
16
  around_create :test_callback, only: :test
15
17
  around_create :test_callback, only: [:test]
16
- @focus
18
+
19
+
17
20
  Scenario: successful around_create calling
18
21
  Given the following mailer class with an around_create callback:
19
22
  """
@@ -34,8 +37,9 @@ Scenario: successful around_create calling
34
37
 
35
38
  private
36
39
 
37
- def log_args(*args)
38
- self.class.logger << "Test email now being called with #{args.flatten.inspect}"
40
+ def log_args
41
+ params = args.flatten.to_sentence
42
+ self.class.logger << "Test email now being called with #{params}"
39
43
  yield
40
44
  self.class.logger << "Test email was successfully created"
41
45
  end
@@ -45,13 +49,14 @@ Scenario: successful around_create calling
45
49
  Then an email should have been created
46
50
  And the logger for the class "TestMailer" should contain:
47
51
  """
48
- Test email now being called with ["recipient@test.com"]
52
+ Test email now being called with test and recipient@test.com
49
53
  """
50
54
  And the logger for the class "TestMailer" should contain:
51
55
  """
52
56
  Test email was successfully created
53
57
  """
54
58
 
59
+
55
60
  Scenario: around_create callback skipped because not included in "only" directive
56
61
  Given the following mailer class with an around_create callback:
57
62
  """
@@ -82,3 +87,35 @@ Scenario: successful around_create calling
82
87
  When I run the code "TestMailer.test('recipient@test.com')"
83
88
  Then an email should have been created
84
89
  And the logger for the class "TestMailer" should be empty
90
+
91
+
92
+ Scenario: around_create callback skipped because included in "except" directive
93
+ Given the following mailer class with an around_create callback:
94
+ """
95
+ class TestMailer < ::ActionMailer::Base
96
+ around_create :log_args, except: :test
97
+
98
+ def self.logger
99
+ @logger ||= Array.new
100
+ end
101
+
102
+ def test(recipient)
103
+ mail(
104
+ to: recipient,
105
+ from: 'sender@test.com',
106
+ subject: 'Test Email'
107
+ )
108
+ end
109
+
110
+ private
111
+
112
+ def log_args(*args)
113
+ self.class.logger << "Test email now being called"
114
+ yield
115
+ self.class.logger << "Test email was successfully created"
116
+ end
117
+ end
118
+ """
119
+ When I run the code "TestMailer.test('recipient@test.com')"
120
+ Then an email should have been created
121
+ And the logger for the class "TestMailer" should be empty
@@ -1,19 +1,21 @@
1
1
  Feature: before_create callback
2
2
  As an actionmailer gem user
3
3
  I want to be able to use the before_create callback
4
- So that I can to execute code before creating an email
4
+ so that I can to execute code before creating an email
5
5
 
6
- The "before_create" callback allows to execute a callback
6
+ The *before_create* callback allows to execute a callback
7
7
  before the email creation process. The macro accepts
8
8
  the callback name as first arguments and an
9
- optional hash with "only" and/or "except" keys that are
10
- functionally equivalent to the ones of ActionController
9
+ optional hash with *only* and/or *except* keys that are
10
+ functionally equivalent to the ones of ApplicationController
11
11
  before/after/around create filters: for example in order
12
- to run a callback only for the "test" action you should
12
+ to run a callback only for the *test* action you should
13
13
  specify one of the following:
14
+
14
15
  before_create :test_callback, only: :test
15
16
  before_create :test_callback, only: [:test]
16
17
 
18
+
17
19
  Scenario: successful before_create callback calling
18
20
  Given the following mailer class with a before_create callback:
19
21
  """
@@ -34,8 +36,8 @@ Scenario: successful before_create callback calling
34
36
 
35
37
  private
36
38
 
37
- def log_args(args)
38
- self.class.logger << "Test was called with #{args.inspect}"
39
+ def log_args
40
+ self.class.logger << "Test was called with #{args.to_sentence}"
39
41
  end
40
42
  end
41
43
  """
@@ -43,9 +45,10 @@ Scenario: successful before_create callback calling
43
45
  Then an email should have been sent
44
46
  And the logger for the class "TestMailer" should contain:
45
47
  """
46
- Test was called with "recipient@test.com"
48
+ Test was called with test and recipient@test.com
47
49
  """
48
50
 
51
+
49
52
  Scenario: before_create callback skipped because not included in "only" directive
50
53
  Given the following mailer class with a before_create callback:
51
54
  """
@@ -66,8 +69,38 @@ Scenario: successful before_create callback calling
66
69
 
67
70
  private
68
71
 
69
- def log_args(*args)
70
- self.class.logger << "Test was called with #{args.inspect}"
72
+ def log_args
73
+ self.class.logger << "Test was called with #{args.to_sentence}"
74
+ end
75
+ end
76
+ """
77
+ When I run the code "TestMailer.test('recipient@test.com').deliver"
78
+ Then an email should have been sent
79
+ And the logger for the class "TestMailer" should be empty
80
+
81
+
82
+ Scenario: before_create callback skipped because included in "except" directive
83
+ Given the following mailer class with a before_create callback:
84
+ """
85
+ class TestMailer < ::ActionMailer::Base
86
+ before_create :log_args, except: :test
87
+
88
+ def self.logger
89
+ @logger ||= Array.new
90
+ end
91
+
92
+ def test(recipient)
93
+ mail(
94
+ to: recipient,
95
+ from: 'sender@test.com',
96
+ subject: 'Test Email'
97
+ )
98
+ end
99
+
100
+ private
101
+
102
+ def log_args
103
+ self.class.logger << "Test was called with #{args.to_sentence}"
71
104
  end
72
105
  end
73
106
  """
@@ -0,0 +1,89 @@
1
+ # ActionMailer Callbacks
2
+
3
+ [![Build Status](https://secure.travis-ci.org/spaghetticode/actionmailer-callbacks.png)](http://travis-ci.org/spaghetticode/actionmailer-callbacks)
4
+
5
+ This gem adds ```before_create``` and ```around_create``` to ActionMailer::Base
6
+ to make it work similarly to ActionController before/around filters and
7
+ ActiveRecord::Base callbacks:
8
+
9
+ ```ruby
10
+ before_create :log_params, except: :test_email
11
+ around_create :benchmark, only: :test_email
12
+ ```
13
+
14
+ ```except``` and ```only``` options are optional and has same functionality as in
15
+ ActionController.
16
+
17
+ Callbacks functionality is implemented using the ActiveSupport::Callbacks module.
18
+
19
+
20
+ ## Requirements
21
+
22
+ The master branch now works only with ActionMailer 3.x, if you need to add
23
+ callbacks to older versions please refer to the 0.x release.
24
+
25
+
26
+ ## Installation
27
+
28
+ Add the gem to the Gemfile:
29
+
30
+ ```ruby
31
+ gem 'actionmailer-callbacks'
32
+ ```
33
+
34
+ And then run ```bundle```
35
+
36
+
37
+ ## Documentation
38
+
39
+ You can find some more documentation on the workings of the gem on relish:
40
+ https://www.relishapp.com/spaghetticode/actionmailer-callbacks/docs
41
+
42
+
43
+ ## Notes
44
+
45
+ If you need something like before/after deliver callbacks ActionMailer 3.x comes
46
+ ready for that: you can use an **observer** or an **instrumentation** for that.
47
+
48
+ The **around_create** callback wraps the entire mail method execution. You can
49
+ use them for rescuing from errors or for benchmarking, for example.
50
+
51
+ The gem adds the ```args``` attribute accessor to the mail object in order to
52
+ be able to access the arguments used for its initialization.
53
+
54
+ ## Example
55
+
56
+ ```ruby
57
+ class UserMailer < ActionMailer::Base
58
+ before_create :log_args
59
+ around_create :rescue_from_errors
60
+
61
+ def user_registration(user)
62
+ # this is a regular ActionMailer email method
63
+ end
64
+
65
+ private
66
+
67
+ def log_args
68
+ MailerLogger.info "[CREATE] #{args.inspect}"
69
+ end
70
+
71
+ def rescue_from_errors
72
+ begin
73
+ yield
74
+ rescue
75
+ puts 'An error occured!'
76
+ end
77
+ end
78
+ end
79
+ ```
80
+
81
+
82
+ ## Contributing
83
+
84
+ 1. Fork it
85
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
86
+ 3. Add your feature tests to the rspec/cucumber test suite
87
+ 4. Commit your changes (`git commit -am 'Added some feature'`)
88
+ 5. Push to the branch (`git push origin my-new-feature`)
89
+ 6. Create new Pull Request
@@ -1,9 +1,13 @@
1
1
  require 'action_mailer'
2
2
 
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')
3
+ module ActionMailer
4
+ module Callbacks
5
+ autoload :Callbackable, 'actionmailer-callbacks/callbackable'
6
+ autoload :Extensions, 'actionmailer-callbacks/extensions'
7
+ end
8
+ end
9
+
10
+ require File.join(File.expand_path('..', __FILE__), 'actionmailer-callbacks/version')
11
+
8
12
 
9
13
  ActionMailer::Base.extend ActionMailer::Callbacks::Extensions
@@ -1,41 +1,20 @@
1
+ require 'active_support/concern'
2
+ require 'active_support/callbacks'
3
+
1
4
  module ActionMailer
2
5
  module Callbacks
3
6
  module Callbackable
4
7
  extend ActiveSupport::Concern
8
+ include ActiveSupport::Callbacks
5
9
 
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
10
+ included do
11
+ attr_internal_accessor :args
12
+ define_callbacks :initialize
22
13
  end
23
14
 
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
15
+ def initialize(*args)
16
+ self.args = args
17
+ run_callbacks :initialize do
39
18
  super
40
19
  end
41
20
  end
@@ -1,23 +1,32 @@
1
1
  module ActionMailer
2
2
  module Callbacks
3
3
  module Extensions
4
- def before_create(*args)
5
- include_callbackable
6
- before_create_callbacks << Callback.new(*args)
4
+ %w[before around].each do |method|
5
+ define_method "#{method}_create" do |*args| # def before_create(*args)
6
+ include_callbackable # include_callbackable
7
+ opts = args.extract_options! # opts = args.extract_options!
8
+ args.each do |arg| # args.each do |arg|
9
+ set_callback :initialize, method.to_sym, arg, _conditions(opts) # set_callback :initialize, :before, arg, _conditions(opts)
10
+ end # end
11
+ end # end
7
12
  end
8
13
 
9
- def around_create(*args)
10
- include_callbackable
11
- @around_create_callback = Callback.new(*args)
14
+ def _conditions(opts)
15
+ _condition(:if, opts[:only]) or _condition(:unless, opts[:except]) or {}
12
16
  end
13
17
 
14
18
  private
15
19
 
20
+ def _condition(type, actions)
21
+ if actions.present?
22
+ actions = Array.wrap(actions)
23
+ {type => Proc.new {|mail_obj| actions.include? mail_obj.args.first }}
24
+ end
25
+ end
26
+
16
27
  def include_callbackable
17
28
  callbackable = ActionMailer::Callbacks::Callbackable
18
- unless ancestors.include?(callbackable)
19
- include callbackable
20
- end
29
+ include callbackable unless ancestors.include?(callbackable)
21
30
  end
22
31
  end
23
32
  end
@@ -1,5 +1,5 @@
1
- module Actionmailer
1
+ module ActionMailer
2
2
  module Callbacks
3
- VERSION = '1.0.0'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
@@ -4,98 +4,18 @@ module ActionMailer
4
4
  module Callbacks
5
5
  describe Callbackable do
6
6
  let(:sample_class) {Class.new {include Callbackable}}
7
- let(:callback) {double(name: :callback_method)}
8
7
 
9
- subject {sample_class}
8
+ subject {sample_class.new}
10
9
 
11
- before {subject.reset_callbacks}
10
+ describe 'args accessor' do
11
+ let(:args) {[:some, :args]}
12
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
13
+ before {subject.args = args}
53
14
 
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
15
+ it {subject.args.should == args}
91
16
 
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
17
+ it 'is an internal accessor' do
18
+ subject.instance_eval {@_args}.should == args
99
19
  end
100
20
  end
101
21
  end
@@ -15,20 +15,35 @@ module ActionMailer
15
15
  end
16
16
 
17
17
  describe 'before_create' do
18
- it 'adds Callbackable to the ancestors' do
19
- Callback.stub(:new)
18
+ it 'adds ActionMailer::Callbacks::Callbackable to the ancestors' do
20
19
  subject.before_create
21
20
  subject.ancestors.should include(ActionMailer::Callbacks::Callbackable)
22
21
  end
23
22
  end
24
23
 
25
24
  describe 'around_create' do
26
- it 'adds Callbackable to the ancestors' do
27
- Callback.stub(:new)
25
+ it 'adds ActionMailer::Callbacks::Callbackable to the ancestors' do
28
26
  subject.around_create
29
27
  subject.ancestors.should include(ActionMailer::Callbacks::Callbackable)
30
28
  end
31
29
  end
30
+
31
+ describe '_conditions' do
32
+ it 'returns empty hash when no "except" or "only" options are provided' do
33
+ opts = {}
34
+ subject._conditions(opts).should == {}
35
+ end
36
+
37
+ it 'returns a hash with :if key when "only" option is provided' do
38
+ opts = {:only => :index}
39
+ subject._conditions(opts).keys.should == [:if]
40
+ end
41
+
42
+ it 'returns a hash with :unless key when "except" option is provided' do
43
+ opts = {:except => :index}
44
+ subject._conditions(opts).keys.should == [:unless]
45
+ end
46
+ end
32
47
  end
33
48
  end
34
49
  end
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: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-16 00:00:00.000000000 Z
12
+ date: 2012-08-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionmailer
@@ -132,7 +132,7 @@ extra_rdoc_files: []
132
132
  files:
133
133
  - .gitignore
134
134
  - .rspec
135
- - .travis
135
+ - .travis.yml
136
136
  - Gemfile
137
137
  - Guardfile
138
138
  - LICENSE
@@ -141,16 +141,15 @@ files:
141
141
  - actionmailer-callbacks.gemspec
142
142
  - features/around_create_callback.feature
143
143
  - features/before_create_callback.feature
144
+ - features/readme.md
144
145
  - features/step_definitions/before_create_callback_steps.rb
145
146
  - features/support/env.rb
146
147
  - features/support/hooks.rb
147
148
  - features/support/world_extensions.rb
148
149
  - lib/actionmailer-callbacks.rb
149
- - lib/actionmailer-callbacks/callback.rb
150
150
  - lib/actionmailer-callbacks/callbackable.rb
151
151
  - lib/actionmailer-callbacks/extensions.rb
152
152
  - lib/actionmailer-callbacks/version.rb
153
- - spec/lib/actionmailer-callbacks/callback_spec.rb
154
153
  - spec/lib/actionmailer-callbacks/callbackable_spec.rb
155
154
  - spec/lib/actionmailer-callbacks/extensions_spec.rb
156
155
  - spec/spec_helper.rb
@@ -167,18 +166,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
166
  - - ! '>='
168
167
  - !ruby/object:Gem::Version
169
168
  version: '0'
170
- segments:
171
- - 0
172
- hash: 1517825137690287905
173
169
  required_rubygems_version: !ruby/object:Gem::Requirement
174
170
  none: false
175
171
  requirements:
176
172
  - - ! '>='
177
173
  - !ruby/object:Gem::Version
178
174
  version: '0'
179
- segments:
180
- - 0
181
- hash: 1517825137690287905
182
175
  requirements: []
183
176
  rubyforge_project:
184
177
  rubygems_version: 1.8.24
@@ -188,12 +181,13 @@ summary: adds before_create, around_create callbacks to action mailer 3
188
181
  test_files:
189
182
  - features/around_create_callback.feature
190
183
  - features/before_create_callback.feature
184
+ - features/readme.md
191
185
  - features/step_definitions/before_create_callback_steps.rb
192
186
  - features/support/env.rb
193
187
  - features/support/hooks.rb
194
188
  - features/support/world_extensions.rb
195
- - spec/lib/actionmailer-callbacks/callback_spec.rb
196
189
  - spec/lib/actionmailer-callbacks/callbackable_spec.rb
197
190
  - spec/lib/actionmailer-callbacks/extensions_spec.rb
198
191
  - spec/spec_helper.rb
199
192
  - spec/support/custom_matchers.rb
193
+ has_rdoc:
@@ -1,25 +0,0 @@
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
@@ -1,49 +0,0 @@
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