actionmailer-callbacks 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in actionmailer-callbacks.gemspec
4
+ gemspec
@@ -0,0 +1,81 @@
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 the following methods to ActionMailer, similar to ActionController
6
+ before/after filters:
7
+
8
+ ```ruby
9
+ before_create :log_params, :except => :test_email
10
+ after_create :alert_police, :only => :robbery_alert
11
+ before_deliver :apply_stamp, :except => [:postage_prepaid, :test_email]
12
+ after_deliver :log_success
13
+ around_create :benchmark
14
+ around_deliver :benckmark
15
+ ```
16
+
17
+ ## Requirements
18
+
19
+ This gem is tested only with ActionMailer 2.3.x, gem version dependencies are
20
+ strict because I needed it to work only on those specific versions. Probably it
21
+ will work with other versions too, as long as the creation/delivery interface of
22
+ ActionMailer::Base class is still the same.
23
+
24
+ ## Notes
25
+
26
+ *before_create* is executed even if the mail instantiation process fails due to
27
+ some error.
28
+ Since no mail has been created at this point, you can't do that much here,
29
+ basically it's useful to inspect or log params. You can access the params
30
+ anywhere via *@params* instance variable.
31
+
32
+ *around_create* and *around_deliver* wrap the mail method execution (and all
33
+ callbacks). You can use them for rescuing from errors or for benchmarking, for
34
+ example.
35
+ There can be only 1 around_create or around_deliver method for each email method,
36
+ if there are more than 1 only the first will be executed.
37
+
38
+ ## Example
39
+
40
+ ```ruby
41
+ class UserMailer < ActionMailer::Base
42
+ before_create :log_params
43
+ after_deliver :log_success
44
+ around_create :rescue_from_errors
45
+
46
+ def user_registration(user)
47
+ # this is a regular ActionMailer email method
48
+ end
49
+
50
+ private
51
+
52
+ def log_params
53
+ MailerLogger.info "[CREATE] #{params_inspector}"
54
+ end
55
+
56
+ def log_success
57
+ MailerLogger.info "[DELIVERED] #{params_inspector}"
58
+ end
59
+
60
+ def rescue_from_errors
61
+ begin
62
+ yield
63
+ rescue
64
+ puts 'An error occured!'
65
+ end
66
+ end
67
+
68
+ def params_inspector
69
+ @params.present? && @params.inject([]) do |lines, param|
70
+ message = begin
71
+ if param.is_a?(ActiveRecord::Base)
72
+ "#{param.class.name.downcase}.id = #{param.id}"
73
+ else
74
+ param
75
+ end
76
+ end
77
+ lines << message
78
+ end.join(', ')
79
+ end
80
+ end
81
+ ```
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ desc "Run those specs"
5
+ task :spec do
6
+ RSpec::Core::RakeTask.new(:spec) do |t|
7
+ t.rspec_opts = %w{--colour --format progress}
8
+ t.pattern = 'spec/**/*_spec.rb'
9
+ t.rspec_path = 'bundle exec rspec'
10
+ end
11
+ end
12
+
13
+ task :default => :spec
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'actionmailer/callbacks/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "actionmailer-callbacks"
7
+ s.version = Actionmailer::Callbacks::VERSION
8
+ s.authors = ["andrea longhi"]
9
+ s.email = ["andrea@spaghetticode.it"]
10
+ s.homepage = ""
11
+ s.summary = %q{add callbacks to actionmailer 2.3.11}
12
+ s.description = %q{add callbacks to actionmailer 2.3.11}
13
+
14
+ # s.rubyforge_project = 'actionmailer-callbacks'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ['lib']
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency 'rspec'
23
+ s.add_development_dependency 'rake'
24
+ s.add_runtime_dependency 'activesupport', '~> 2.3.11'
25
+ s.add_runtime_dependency 'actionmailer', '~> 2.3.11'
26
+ end
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'action_mailer'
4
+
5
+ module ActionMailer
6
+ module Callbacks
7
+ end
8
+ end
9
+
10
+ require 'actionmailer/callbacks/version'
11
+ require 'actionmailer/callbacks/callback'
12
+ require 'actionmailer/callbacks/methods'
13
+
14
+ ActionMailer::Base.send :include, ActionMailer::Callbacks::Methods
@@ -0,0 +1,22 @@
1
+ module ActionMailer
2
+ module Callbacks
3
+ # this object stores the callback data
4
+ class Callback
5
+ attr_accessor :name, :except, :only
6
+
7
+ def initialize(callback_name, opts={})
8
+ @name = callback_name
9
+ @only = Array.wrap(opts[:only]).map(&:to_s)
10
+ @except = Array.wrap(opts[:except]).map(&:to_s)
11
+ end
12
+
13
+ def should_run?(mailer_method)
14
+ if @only.present?
15
+ @only.include?(mailer_method.to_s)
16
+ else
17
+ !@except.include?(mailer_method.to_s)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,116 @@
1
+ # this implements those class methods to be used in your mailer model:
2
+ # after_create :do_something
3
+ # before_deliver :log_data
4
+ # after_deliver :log_data, :only => :notify_customer
5
+ # after_deliver :log_data, :except => [:notify_customer, :send_xmas_regards]
6
+
7
+ module ActionMailer
8
+ module Callbacks
9
+ module Methods
10
+ CALLBACK_TYPES = %w[before_create after_create before_deliver after_deliver]
11
+ AROUND_METHODS = %w[around_create around_deliver]
12
+
13
+ def self.included(base)
14
+ base.extend ClassMethods
15
+ base.alias_method_chain :create!, :create_callbacks
16
+ base.alias_method_chain :deliver!, :deliver_callbacks
17
+ end
18
+
19
+ module ClassMethods
20
+ # this creates a series of methods like these:
21
+ # def after_create(*args)
22
+ # after_create_callbacks << Callback.new(*args)
23
+ # end
24
+
25
+ # def after_create_callbacks
26
+ # @after_create_callbacks ||= []
27
+ # end
28
+ CALLBACK_TYPES.each do |type|
29
+ define_method type do |*args|
30
+ send("#{type}_callbacks") << Callback.new(*args)
31
+ end
32
+
33
+ name = "#{type}_callbacks"
34
+ define_method name do
35
+ instance_variable_get("@#{name}") || instance_variable_set("@#{name}", [])
36
+ end
37
+ end
38
+
39
+ def clear_callbacks
40
+ CALLBACK_TYPES.each do |type|
41
+ instance_variable_set "@#{type}_callbacks", []
42
+ end
43
+ end
44
+
45
+ def around_create(*args)
46
+ around_create_methods << Callback.new(*args)
47
+ end
48
+
49
+ def around_create_methods
50
+ @around_create_methods ||= []
51
+ end
52
+
53
+ def around_deliver(*args)
54
+ around_deliver_methods << Callback.new(*args)
55
+ end
56
+
57
+ def around_deliver_methods
58
+ @around_deliver_methods ||= []
59
+ end
60
+ end
61
+
62
+ def create_with_create_callbacks!(*args)
63
+ @params = args
64
+ run_around_create_method do
65
+ run_before_create_callbacks
66
+ create_without_create_callbacks!(*args)
67
+ run_after_create_callbacks
68
+ @mail
69
+ end
70
+ end
71
+
72
+ def deliver_with_deliver_callbacks!(*args)
73
+ run_around_deliver_method do
74
+ run_before_deliver_callbacks
75
+ deliver_without_deliver_callbacks!(*args)
76
+ run_after_deliver_callbacks
77
+ @mail
78
+ end
79
+ end
80
+
81
+ # this creates a series of methods similar to this:
82
+ # def run_after_create_callbacks
83
+ # self.class.send('after_create_callbacks').each do |callback|
84
+ # send callback.name if callback.should_run?(@params.first)
85
+ # end
86
+ # end
87
+ CALLBACK_TYPES.each do |type|
88
+ define_method "run_#{type}_callbacks" do
89
+ self.class.send("#{type}_callbacks").each do |callback|
90
+ send callback.name if callback.should_run?(@params.first)
91
+ end
92
+ end
93
+ end
94
+
95
+ def run_around_create_method(&block)
96
+ self.class.send('around_create_methods').each do |callback|
97
+ if callback.should_run?(@params.first)
98
+ send callback.name, &block
99
+ return
100
+ end
101
+ end
102
+ block.call
103
+ end
104
+
105
+ def run_around_deliver_method(&block)
106
+ self.class.send('around_deliver_methods').each do |callback|
107
+ if callback.should_run?(@params.first)
108
+ send callback.name, &block
109
+ return
110
+ end
111
+ end
112
+ block.call
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,5 @@
1
+ module Actionmailer
2
+ module Callbacks
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActionMailer::Callbacks::Callback do
4
+ describe 'a new callback' do
5
+ let(:callback) { ActionMailer::Callbacks::Callback.new('name', :except => ['except', :notthis], :only => :yesthis) }
6
+
7
+ it 'should have "name", "except", "only" accessors' do
8
+ %w[name except only].each do |attribute|
9
+ callback.send "#{attribute}=", 'asd'
10
+ callback.send(attribute).should == 'asd'
11
+ end
12
+ end
13
+
14
+ it 'should stringify symbols in "except" and "only" arrays' do
15
+ callback.instance_eval do
16
+ @except.should == ['except', 'notthis']
17
+ end
18
+ end
19
+ end
20
+
21
+ describe 'should_run?' do
22
+ context 'when "except" is set' do
23
+ let(:callback) { ActionMailer::Callbacks::Callback.new('name', :except => ['except']) }
24
+ it 'should be false for except' do
25
+ callback.should_run?('except').should be_false
26
+ end
27
+
28
+ it 'be true for anything else' do
29
+ callback.should_run?('other').should be_true
30
+ end
31
+ end
32
+
33
+ context 'when "only" is set' do
34
+ let(:callback) { ActionMailer::Callbacks::Callback.new('name', :only => :this_method_name)}
35
+
36
+ it 'should be be true for this_method_name' do
37
+ callback.should_run?('this_method_name').should be_true
38
+ end
39
+
40
+ it 'should be be false for anything else' do
41
+ callback.should_run?('another_method_name').should be_false
42
+ end
43
+ end
44
+
45
+ context 'when neither "except" or "only" are set' do
46
+ let(:callback) { ActionMailer::Callbacks::Callback.new('name') }
47
+
48
+ it 'should be true for any method' do
49
+ callback.should_run?('any_method_name').should be_true
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,49 @@
1
+ class MailerWithCallbacks < ActionMailer::Base
2
+ before_create :set_before_create_flag, :except => :no_callback
3
+ after_create :set_after_create_flag, :except => [:no_callback]
4
+ before_deliver :set_before_deliver_flag, :only => :test_email
5
+ after_deliver :set_after_deliver_flag
6
+ around_create :create_wrapper_flag
7
+ around_deliver :deliver_wrapper_flag
8
+
9
+ def test_email(recipient)
10
+ recipients recipient
11
+ from 'test@test.com'
12
+ subject 'test email'
13
+ body 'a test email'
14
+ end
15
+
16
+ def no_callback(recipient)
17
+ test_email(recipient)
18
+ end
19
+
20
+ private
21
+
22
+ def create_wrapper_flag
23
+ Flag.create_before_block_call = true
24
+ yield
25
+ Flag.create_after_block_call = true
26
+ end
27
+
28
+ def deliver_wrapper_flag
29
+ Flag.deliver_before_block_call = true
30
+ yield
31
+ Flag.deliver_after_block_call = true
32
+ end
33
+
34
+ def set_before_create_flag
35
+ Flag.before_create = true
36
+ end
37
+
38
+ def set_after_create_flag
39
+ Flag.after_create = true
40
+ end
41
+
42
+ def set_before_deliver_flag
43
+ Flag.before_deliver = true
44
+ end
45
+
46
+ def set_after_deliver_flag
47
+ Flag.after_deliver = true
48
+ end
49
+ end
@@ -0,0 +1,8 @@
1
+ class MailerWithoutCallbacks < ActionMailer::Base
2
+ def test_email(recipient)
3
+ recipients recipient
4
+ from 'test@test.com'
5
+ subject 'test email'
6
+ body 'a test email'
7
+ end
8
+ end
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+
3
+ describe MailerWithCallbacks do
4
+ before { Flag.reset }
5
+
6
+ context 'when delivering a mail via deliver_* class method' do
7
+ context 'when the mailer method has callbacks' do
8
+ before { MailerWithCallbacks.deliver_test_email('asd@asd.it') }
9
+
10
+ it 'should run before_create callback' do
11
+ Flag.before_create.should be_true
12
+ end
13
+
14
+ it 'should run after_create callback' do
15
+ Flag.after_create.should be_true
16
+ end
17
+
18
+ it 'should run before_deliver callback' do
19
+ Flag.before_deliver.should be_true
20
+ end
21
+
22
+ it 'should run after_deliver callback' do
23
+ Flag.after_deliver.should be_true
24
+ end
25
+
26
+ it 'should run around_create method' do
27
+ Flag.create_before_block_call.should be_true
28
+ Flag.create_after_block_call.should be_true
29
+ end
30
+
31
+ it 'should run around_deliver method' do
32
+ Flag.deliver_before_block_call.should be_true
33
+ Flag.deliver_after_block_call.should be_true
34
+ end
35
+ end
36
+
37
+ context 'when the mailer method is included in only/except options' do
38
+ before { MailerWithCallbacks.deliver_no_callback('asd@asd.it') }
39
+
40
+ it 'should not run the callback when in except' do
41
+ Flag.after_create.should_not be_true
42
+ end
43
+
44
+ it 'should not run the callback when not in only' do
45
+ Flag.before_deliver.should_not be_true
46
+ end
47
+ end
48
+
49
+ context 'when the mailer method is not included in any restricting options' do
50
+ before { MailerWithCallbacks.deliver_test_email('asd@asd.it') }
51
+
52
+ it 'should run after_deliver callback' do
53
+ Flag.after_deliver.should be_true
54
+ end
55
+ end
56
+
57
+ context 'when error is raised on delivery' do
58
+ before do
59
+ MailerWithCallbacks.any_instance.should_receive(:deliver_without_deliver_callbacks!).and_raise(ArgumentError)
60
+ MailerWithCallbacks.deliver_test_email('asd@asd.it') rescue nil
61
+ end
62
+
63
+ it 'should run before_create callback' do
64
+ Flag.before_create.should be_true
65
+ end
66
+
67
+ it 'should run after_create callback' do
68
+ Flag.after_create.should be_true
69
+ end
70
+
71
+ it 'should run before_deliver callback' do
72
+ Flag.before_deliver.should be_true
73
+ end
74
+
75
+ it 'should not run after_deliver callback' do
76
+ Flag.after_deliver.should_not be_true
77
+ end
78
+ end
79
+
80
+ context 'when error is raised on creation' do
81
+ context 'when error is raised on delivery' do
82
+ before do
83
+ MailerWithCallbacks.any_instance.should_receive(:create_without_create_callbacks!).and_raise(ArgumentError)
84
+ MailerWithCallbacks.create_test_email('asd@asd.it') rescue nil
85
+ end
86
+
87
+ it 'should run before_create callback' do
88
+ Flag.before_create.should be_true
89
+ end
90
+
91
+ it 'should not run after_create callback' do
92
+ Flag.after_create.should_not be_true
93
+ end
94
+
95
+ it 'should not run before_deliver callback' do
96
+ Flag.before_deliver.should_not be_true
97
+ end
98
+
99
+ it 'should not run after_deliver callback' do
100
+ Flag.after_deliver.should_not be_true
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ context 'when creating a mail via create_* class method' do
107
+ before { MailerWithCallbacks.create_test_email('asd@asd.it') }
108
+
109
+ it 'should run before_create callback' do
110
+ Flag.before_create.should be_true
111
+ end
112
+
113
+ it 'should run after_create callback' do
114
+ Flag.after_create.should be_true
115
+ end
116
+
117
+ it 'should not run before_deliver callback' do
118
+ Flag.before_deliver.should_not be_true
119
+ end
120
+
121
+ it 'should not run after_deliver callback' do
122
+ Flag.after_deliver.should_not be_true
123
+ end
124
+
125
+ it 'should run around_create method' do
126
+ Flag.create_before_block_call.should be_true
127
+ Flag.create_after_block_call.should be_true
128
+ end
129
+
130
+ it 'should not run around_deliver method' do
131
+ Flag.deliver_before_block_call.should_not be_true
132
+ Flag.deliver_after_block_call.should_not be_true
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActionMailer::Callbacks::Methods do
4
+ def callback_lists
5
+ %w[before_create_callbacks after_create_callbacks before_deliver_callbacks after_deliver_callbacks]
6
+ end
7
+
8
+ before { MailerWithoutCallbacks.clear_callbacks }
9
+
10
+ it 'callbacks lists should be empty' do
11
+ callback_lists.each do |list|
12
+ MailerWithoutCallbacks.send(list).should be_empty
13
+ end
14
+ end
15
+
16
+ context 'when adding a after create callback' do
17
+ before do
18
+ MailerWithoutCallbacks.before_create('name')
19
+ MailerWithoutCallbacks.after_create('name')
20
+ MailerWithoutCallbacks.before_deliver('name')
21
+ MailerWithoutCallbacks.after_deliver('name')
22
+ end
23
+
24
+ it 'should add the callbacks to the list' do
25
+ callback_lists.each do |list|
26
+ MailerWithoutCallbacks.send(list).should have(1).item
27
+ end
28
+ end
29
+
30
+ it 'clear_callbacks should clear all lists' do
31
+ MailerWithoutCallbacks.clear_callbacks
32
+ callback_lists.each do |list|
33
+ MailerWithoutCallbacks.send(list).should be_empty
34
+ end
35
+ end
36
+ end
37
+
38
+ describe 'when delivering a mail via method missing' do
39
+ it 'should call before_create callback handing method' do
40
+ MailerWithoutCallbacks.any_instance.should_receive(:run_before_create_callbacks)
41
+ MailerWithoutCallbacks.deliver_test_email('asd@asd.it')
42
+ end
43
+
44
+ it 'should call after_create callback handing method' do
45
+ MailerWithoutCallbacks.any_instance.should_receive(:run_after_create_callbacks)
46
+ MailerWithoutCallbacks.deliver_test_email('asd@asd.it')
47
+ end
48
+
49
+ it 'should call before_deliver callback handing method' do
50
+ MailerWithoutCallbacks.any_instance.should_receive(:run_before_deliver_callbacks)
51
+ MailerWithoutCallbacks.deliver_test_email('asd@asd.it')
52
+ end
53
+
54
+ it 'should call after_deliver callback handing method' do
55
+ MailerWithoutCallbacks.any_instance.should_receive(:run_after_deliver_callbacks)
56
+ MailerWithoutCallbacks.deliver_test_email('asd@asd.it')
57
+ end
58
+
59
+ end
60
+
61
+ describe 'when creating a mail via method_missing' do
62
+ it 'should call before_create callback handing method' do
63
+ MailerWithoutCallbacks.any_instance.should_receive(:run_before_create_callbacks)
64
+ MailerWithoutCallbacks.create_test_email('asd@asd.it')
65
+ end
66
+
67
+ it 'should call after_create callback handing method' do
68
+ MailerWithoutCallbacks.any_instance.should_receive(:run_after_create_callbacks)
69
+ MailerWithoutCallbacks.create_test_email('asd@asd.it')
70
+ end
71
+
72
+ it 'should not call before_deliver callback handing method' do
73
+ MailerWithoutCallbacks.any_instance.should_not_receive(:run_before_deliver_callbacks)
74
+ MailerWithoutCallbacks.create_test_email('asd@asd.it')
75
+ end
76
+
77
+ it 'should not call after_deliver callback handing method' do
78
+ MailerWithoutCallbacks.any_instance.should_not_receive(:run_after_deliver_callbacks)
79
+ MailerWithoutCallbacks.create_test_email('asd@asd.it')
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,8 @@
1
+ # load required files
2
+ current_dir = File.dirname(__FILE__)
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
@@ -0,0 +1,21 @@
1
+ module Flag
2
+ ACCESSORS = :before_create, :after_create, :before_deliver, :after_deliver,
3
+ :create_before_block_call, :create_after_block_call,
4
+ :deliver_before_block_call, :deliver_after_block_call
5
+
6
+ mattr_accessor *ACCESSORS
7
+
8
+ def self.reset
9
+ ACCESSORS.each do |accessor|
10
+ send "#{accessor}=", nil
11
+ end
12
+ end
13
+
14
+ def self.included
15
+ raise 'Not to be included anywhere!'
16
+ end
17
+
18
+ def self.extended
19
+ included
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: actionmailer-callbacks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - andrea longhi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: activesupport
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.3.11
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.3.11
62
+ - !ruby/object:Gem::Dependency
63
+ name: actionmailer
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.3.11
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.3.11
78
+ description: add callbacks to actionmailer 2.3.11
79
+ email:
80
+ - andrea@spaghetticode.it
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - .gitignore
86
+ - Gemfile
87
+ - README.md
88
+ - Rakefile
89
+ - actionmailer-callbacks.gemspec
90
+ - lib/actionmailer-callbacks.rb
91
+ - lib/actionmailer/callbacks/callback.rb
92
+ - lib/actionmailer/callbacks/methods.rb
93
+ - lib/actionmailer/callbacks/version.rb
94
+ - spec/callback_spec.rb
95
+ - spec/fixtures/mailer_with_callbacks.rb
96
+ - spec/fixtures/mailer_without_callbacks.rb
97
+ - spec/integration/action_mailer_integration_spec.rb
98
+ - spec/methods_spec.rb
99
+ - spec/spec_helper.rb
100
+ - spec/support/flag.rb
101
+ homepage: ''
102
+ licenses: []
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ requirements: []
120
+ rubyforge_project:
121
+ rubygems_version: 1.8.24
122
+ signing_key:
123
+ specification_version: 3
124
+ summary: add callbacks to actionmailer 2.3.11
125
+ test_files:
126
+ - spec/callback_spec.rb
127
+ - spec/fixtures/mailer_with_callbacks.rb
128
+ - spec/fixtures/mailer_without_callbacks.rb
129
+ - spec/integration/action_mailer_integration_spec.rb
130
+ - spec/methods_spec.rb
131
+ - spec/spec_helper.rb
132
+ - spec/support/flag.rb