active_mailer 0.0.6 → 0.0.7

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/ChangeLog.md CHANGED
@@ -1,3 +1,9 @@
1
+ = 0.0.7
2
+ * support for setting custom email headers. Give us the hassssh.
3
+
4
+ = 0.0.6
5
+ * support for setting layouts
6
+
1
7
  = 0.0.5
2
8
  * Fixed bug where the subject was not being set correctly.
3
9
  * The ActionMailer object used behind the scenese is now available through #mailer
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_mailer (0.0.5)
4
+ active_mailer (0.0.7)
5
5
  activesupport (~> 3.2)
6
6
  rails (~> 3.2)
7
7
 
@@ -7,16 +7,16 @@ Gem::Specification.new do |s|
7
7
  s.authors = ["Matt Gordon"]
8
8
  s.email = 'support@expectedbehavior.com'
9
9
  s.files = Dir["{app,lib,config}/**/*"] + ["MIT-LICENSE", "Rakefile", "Gemfile", "README.rdoc"]
10
- s.version = "0.0.6"
10
+ s.version = "0.0.7"
11
11
  s.homepage =
12
12
  'https://github.com/expectedbehavior/active_mailer'
13
-
14
-
13
+
14
+
15
15
  s.required_rubygems_version = "> 1.3.6"
16
-
16
+
17
17
  s.add_dependency "activesupport" , "~> 3.2"
18
18
  s.add_dependency "rails" , "~> 3.2"
19
-
19
+
20
20
  s.files = `git ls-files`.split("\n")
21
21
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
22
22
  s.require_path = 'lib'
@@ -6,24 +6,24 @@
6
6
  module ActiveMailer #:nodoc:
7
7
  class Base < ActiveRecord::Base
8
8
  self.abstract_class = true
9
-
9
+
10
10
  has_many :email_user_associations, :as => :emailable
11
11
  has_many :recipients, :through => :email_user_associations, :source => "email_user"
12
12
  belongs_to :sender, :class_name => "ActiveMailer::EmailUser", :foreign_key => "sender_id"
13
13
  attr_accessor :body # leave this as an accessor for now since it's complicated
14
14
  attr_accessor :rendered_contents # contains the actual sent email after `send!` is called
15
-
15
+
16
16
  validates_presence_of :sender
17
17
  validates_length_of :subject, :minimum => 1
18
-
18
+
19
19
  validate :must_have_at_least_one_recipient_of_some_kind
20
-
20
+
21
21
  def must_have_at_least_one_recipient_of_some_kind
22
22
  if self.recipients.blank? and self.cc.blank? and self.bcc.blank?
23
23
  self.errors[:base] << "You have to have at least one recipient in the to, cc, or bcc fields"
24
24
  end
25
25
  end
26
-
26
+
27
27
  cattr_accessor :before_send_actions
28
28
  cattr_accessor :after_send_actions
29
29
 
@@ -35,7 +35,7 @@ module ActiveMailer #:nodoc:
35
35
  self.ar_sender = EmailUser.find_or_create_by_email_address(email)
36
36
  else
37
37
  self.ar_sender = email
38
- end
38
+ end
39
39
  end
40
40
 
41
41
  alias :ar_recipients= :recipients=
@@ -48,17 +48,16 @@ module ActiveMailer #:nodoc:
48
48
  else
49
49
  email
50
50
  end
51
- end
51
+ end
52
52
  end
53
-
53
+
54
54
  def render(*args)
55
55
  ActionMailer::Base.send(:new).send(:render, *args)
56
56
  end
57
57
 
58
-
59
58
  before_save :do_before_send
60
59
  after_save :do_after_send
61
-
60
+
62
61
  def do_before_send
63
62
  self.before_send_actions.each do |m|
64
63
  self.send(m)
@@ -70,7 +69,7 @@ module ActiveMailer #:nodoc:
70
69
  self.send(m)
71
70
  end unless self.after_send_actions.blank?
72
71
  end
73
-
72
+
74
73
  def self.before_send(action)
75
74
  self.before_send_actions ||= []
76
75
  self.before_send_actions << action
@@ -88,8 +87,8 @@ module ActiveMailer #:nodoc:
88
87
  # self.delegate_to_action_mailer.flatten!
89
88
  # create_delegator
90
89
  # end
91
-
92
-
90
+
91
+
93
92
  # cattr_accessor :template_variables
94
93
  # def self.template_variable(variable_name)
95
94
  # self.template_variables ||= []
@@ -97,23 +96,23 @@ module ActiveMailer #:nodoc:
97
96
  # self.template_variables.flatten!
98
97
  # attr_accessor variable_name
99
98
  # end
100
-
99
+
101
100
  def mailer_variables
102
101
  mvars = {}
103
102
 
104
103
  vars_to_include = self.class.mailer_variables + self.class.content_columns.map(&:name) + self.class.reflect_on_all_associations.map(&:name)
105
-
104
+
106
105
  vars_to_include.each do |var|
107
106
  mvars[var] = self.send(var.to_sym)
108
107
  end
109
-
108
+
110
109
  # TODO: this should be less ghetto
111
110
  mvars[:from] = self.sender.email_address unless mvars[:from]
112
111
  mvars[:recipients] = self.recipients.map(&:email_address) unless mvars[:recipients].all? {|r| r.is_a? String }
113
-
112
+
114
113
  mvars
115
114
  end
116
-
115
+
117
116
  # All the mailer methods will be defined on this ActionMailer class
118
117
  class DefaultActionMailer < ActionMailer::Base
119
118
  # add_template_helper(ApplicationHelper)
@@ -121,13 +120,13 @@ module ActiveMailer #:nodoc:
121
120
  include Rails.application.routes.url_helpers
122
121
  # def self.create_method(name, &block) # syntactically convenient
123
122
  # self.send(:define_method, name, &block)
124
- # end
123
+ # end
125
124
  end
126
-
125
+
127
126
  def mailer(reload = false)
128
127
  @mailer ||= DefaultActionMailer.send("#{self.class.default_email_method_name}".to_sym, self.mailer_variables)
129
128
  end
130
-
129
+
131
130
  def send! # should take false to avoid validations i.e. sending it again
132
131
  if self.save!
133
132
  logger.info "sending email to #{self.recipients.join(", ")}"
@@ -138,11 +137,11 @@ module ActiveMailer #:nodoc:
138
137
  self.update_attribute("sent_at", Time.now)
139
138
  end
140
139
  end
141
-
140
+
142
141
  def self.layout(*args)
143
142
  DefaultActionMailer.send("layout", *args)
144
143
  end
145
-
144
+
146
145
  def self.mailer_variable(*variable_name)
147
146
  self.mailer_variables = Set.new(variable_name.map(&:to_s)) + (mailer_variables || [])
148
147
  attr_accessor *variable_name
@@ -153,9 +152,9 @@ module ActiveMailer #:nodoc:
153
152
  mailer_variable :body
154
153
  mailer_variable :content_type
155
154
  mailer_variable :attachments
155
+ mailer_variable :headers
156
+
156
157
 
157
-
158
-
159
158
  class << self # Class methods
160
159
  def define_action_mailer_method
161
160
  method_name = default_email_method_name
@@ -170,26 +169,28 @@ module ActiveMailer #:nodoc:
170
169
  self.instance_eval("@#{k.to_s} = options[k]") if options[k]
171
170
  # instance_variable_set(k.to_s, options[k])
172
171
  end
173
-
174
- attachments_to_set.each do |att|
172
+
173
+ attachments_to_set.each do |att|
175
174
  attachment(
176
- :content_type => (att[:content_type] || att.content_type),
177
- :body => File.read(att[:path] || att.path),
178
- :filename => (att[:file_name] || att.file_name)
175
+ :content_type => (att[:content_type] || att.content_type),
176
+ :body => File.read(att[:path] || att.path),
177
+ :filename => (att[:file_name] || att.file_name)
179
178
  )
180
179
  end
181
180
 
182
- mail :to => options[:recipients],
183
- :subject => options[:subject],
184
- :from => options[:sender].email_address
181
+ mail_options = {
182
+ :to => options[:recipients],
183
+ :subject => options[:subject],
184
+ :from => options[:sender].email_address }
185
+ mail_options[:headers] = options[:headers].to_json if options[:headers].present?
186
+ mail(mail_options)
185
187
  end
186
188
  end
187
189
  end
188
-
190
+
189
191
  def default_email_method_name
190
192
  "#{self.name.underscore}"
191
193
  end
192
-
193
194
  end
194
195
  end
195
196
  end
@@ -5,7 +5,7 @@ class ActiveMailerTest < ActiveSupport::TestCase
5
5
  test "removes nil from recipients list automatically" do
6
6
  email = nil
7
7
  assert_nothing_raised do
8
- email = InvitationEmail.new(:sender => "spammy@example.com",
8
+ email = InvitationEmail.new(:sender => "spammy@example.com",
9
9
  :recipients => ["takesit@upemail.com", nil],
10
10
  :subject => "YOU GUYS!"
11
11
  )
@@ -13,16 +13,16 @@ class ActiveMailerTest < ActiveSupport::TestCase
13
13
  assert { email.save }
14
14
  deny { email.recipients.length == 2 }
15
15
  end
16
-
16
+
17
17
  test "sends with correct subject" do
18
- email = InvitationEmail.new(:sender => "spammy@example.com",
18
+ email = InvitationEmail.new(:sender => "spammy@example.com",
19
19
  :recipients => ["takesit@upemail.com", nil],
20
20
  :subject => "YOU GUYS!"
21
21
  )
22
22
  assert { email.send! }
23
23
  assert { email.mailer.subject == email.subject }
24
24
  end
25
-
25
+
26
26
  test "sends with correct layout" do
27
27
  InvitationEmail.layout "email"
28
28
  email = create(:invitation_email)
@@ -30,4 +30,13 @@ class ActiveMailerTest < ActiveSupport::TestCase
30
30
  actual_layout = ActiveMailer::Base::DefaultActionMailer.instance_variable_get("@_layout")
31
31
  assert { "email" == actual_layout }
32
32
  end
33
+
34
+ test "sends headers" do
35
+ email = InvitationEmail.new(:sender => "spammy@example.com",
36
+ :recipients => ["takesit@upemail.com", nil],
37
+ :subject => "YOU GUYS!")
38
+ email.headers = { :something => "else" }
39
+ assert { email.send! }
40
+ assert { email.mailer["headers"].to_s == '{"something":"else"}' }
41
+ end
33
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_mailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
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: 2013-06-10 00:00:00.000000000 Z
12
+ date: 2013-06-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport