idlemailer 2.0.0.rc1 → 2.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.
- checksums.yaml +4 -4
- data/README.md +46 -12
- data/lib/idlemailer/template_manager.rb +5 -4
- data/lib/idlemailer/testing.rb +60 -0
- data/lib/idlemailer/version.rb +1 -1
- data/lib/idlemailer.rb +5 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc834e63c8ea6672e0994a01d0443523dafd5f27
|
4
|
+
data.tar.gz: 756db93875c86f865d330f1eee5c6a1a1724f337
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4726efb741bd15359ec79c3ae8825f05cfcf6cb5a0b3abac25e1bb05a78186725688479f1bc4d18ffb5d7f9a46dc9e90729e7718ca776ea1409788c44548e174
|
7
|
+
data.tar.gz: 89679a1c6df53140a4e7e21011c8dd9d20cddab9ea641addfd21d92434b83e9d0c89faa6270e07324ca81c6dc240a4d199564c75d54e46ecd7ef7709fc9e5be7
|
data/README.md
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
# IdleMailer
|
2
2
|
|
3
|
-
A lightweight (~150 line) alternative to ActionMailer for
|
3
|
+
A lightweight (~150 line) alternative to ActionMailer for Rubyists who are too cool for Rails. Powered by the [mail](http://www.rubydoc.info/gems/mail) gem. Great for API-only backends that need to send email.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
Add to your Gemfile.
|
8
|
+
|
9
|
+
gem 'idlemailer'
|
9
10
|
|
10
11
|
## Use
|
11
12
|
|
12
|
-
IdleMailer
|
13
|
+
IdleMailer provides mailer classes and templates on top of the [mail](http://www.rubydoc.info/gems/mail) gem. `mail` has a great API, so you have unfettered access to it in your mailers.
|
13
14
|
|
14
15
|
```ruby
|
15
16
|
# Define your mailer class
|
@@ -17,18 +18,17 @@ class WidgetMailer
|
|
17
18
|
include IdleMailer::Mailer
|
18
19
|
|
19
20
|
def initialize(user, widget)
|
21
|
+
@widget = widget
|
20
22
|
mail.to = user.email
|
21
23
|
mail.subject = "Widget #{widget.sku}"
|
22
|
-
@widget = widget
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
26
|
-
# Create widget.html.erb and/or widget.text.erb templates.
|
27
|
+
# Create widget.html.erb and/or widget.text.erb in your templates directory.
|
27
28
|
# They'll have access to instance variables like @widget above.
|
28
29
|
|
29
30
|
# Send your mail
|
30
|
-
|
31
|
-
mailer.deliver
|
31
|
+
WidgetMailer.new(current_user, widget).deliver
|
32
32
|
```
|
33
33
|
|
34
34
|
### Inline templates
|
@@ -40,9 +40,9 @@ class WidgetMailer
|
|
40
40
|
include IdleMailer::Mailer
|
41
41
|
|
42
42
|
def initialize(user, widget)
|
43
|
+
@widget = widget
|
43
44
|
mail.to = user.email
|
44
45
|
mail.subject = "Widget #{widget.sku}"
|
45
|
-
@widget = widget
|
46
46
|
end
|
47
47
|
|
48
48
|
text %(
|
@@ -104,7 +104,7 @@ end
|
|
104
104
|
|
105
105
|
## Testing
|
106
106
|
|
107
|
-
Put the mailer
|
107
|
+
Put the mailer into testing mode:
|
108
108
|
|
109
109
|
```ruby
|
110
110
|
IdleMailer.config do |config|
|
@@ -112,10 +112,44 @@ IdleMailer.config do |config|
|
|
112
112
|
end
|
113
113
|
```
|
114
114
|
|
115
|
-
Then
|
115
|
+
Then configure your test runner. Here's an example with RSpec:
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
RSpec.configure do |config|
|
119
|
+
# Clear sent mail after every test
|
120
|
+
config.after :each do
|
121
|
+
IdleMailer::Testing.clear_mail!
|
122
|
+
end
|
123
|
+
|
124
|
+
# Include the test helpers in your specs
|
125
|
+
config.include IdleMailer::Testing::Helpers
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
129
|
+
Your tests will have access to these helper methods. (Note you can also call them directly on `IdleMailer::Testing` as well)
|
116
130
|
|
117
131
|
```ruby
|
118
|
-
|
132
|
+
# quick boolean checks
|
133
|
+
sent_mail_to? 'user@example.com'
|
134
|
+
sent_mail_to? 'user@example.com', /subject/
|
135
|
+
sent_mail_to? 'user@example.com', /subject/, /body/
|
136
|
+
sent_mail_with_subject? /Foo/
|
137
|
+
sent_mail_with_body? /Bar/
|
138
|
+
sent_mail_from? 'user@example.com'
|
139
|
+
|
140
|
+
# get arrays of matching sent mail (Mail::Message objects)
|
141
|
+
mail_to 'user@example.com'
|
142
|
+
mail_to 'user@example.com', /subject/
|
143
|
+
mail_to 'user@example.com', /subject/, /body/
|
144
|
+
mail_with_subject /Foo/
|
145
|
+
mail_with_body /Bar/
|
146
|
+
mail_from 'user@example.com'
|
147
|
+
|
148
|
+
# get an array of all sent mail
|
149
|
+
sent_mail
|
150
|
+
|
151
|
+
# clear all sent mail
|
152
|
+
clear_mail!
|
119
153
|
```
|
120
154
|
|
121
155
|
## License
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module IdleMailer
|
2
|
+
# Loads a mailer's templates and layouts
|
2
3
|
module TemplateManager
|
3
4
|
def self.extended(klass)
|
4
5
|
klass.class_eval do
|
@@ -11,19 +12,19 @@ module IdleMailer
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def text(str)
|
14
|
-
templates['text'] = ERB.new str
|
15
|
+
templates['text'] = ERB.new str.chomp
|
15
16
|
end
|
16
17
|
|
17
18
|
def html(str)
|
18
|
-
templates['html'] = ERB.new str
|
19
|
+
templates['html'] = ERB.new str.chomp
|
19
20
|
end
|
20
21
|
|
21
22
|
def template(type)
|
22
|
-
templates[type] || ERB.new(template_path(template_name, type).read)
|
23
|
+
templates[type] || ERB.new(template_path(template_name, type).read.chomp)
|
23
24
|
end
|
24
25
|
|
25
26
|
def layout(type)
|
26
|
-
layouts[type] || ERB.new(template_path(IdleMailer.config.layout, type).read)
|
27
|
+
layouts[type] || ERB.new(template_path(IdleMailer.config.layout, type).read.chomp)
|
27
28
|
end
|
28
29
|
|
29
30
|
def has_template?(type)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module IdleMailer
|
2
|
+
# Module for testing. You can call all IdleMailer::Testing::Helpers methods directly on this module if you want.
|
3
|
+
module Testing
|
4
|
+
# Helpers for your tests
|
5
|
+
module Helpers
|
6
|
+
# Returns true if any mail was sent from the given email address.
|
7
|
+
def sent_mail_from?(addr)
|
8
|
+
mail_from(addr).any?
|
9
|
+
end
|
10
|
+
|
11
|
+
# Returns true if any mail was sent to the given email address. You may pass subject and body patterns to get more specific (String or Regexp).
|
12
|
+
def sent_mail_to?(addr, subject = nil, body = nil)
|
13
|
+
mail_to(addr, subject, body).any?
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns true if any mail was sent matching the given subject (String or Regexp).
|
17
|
+
def sent_mail_with_subject?(pattern)
|
18
|
+
mail_with_subject(pattern).any?
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns true if any mail was sent matching the given body (Regexp).
|
22
|
+
def sent_mail_with_body?(pattern)
|
23
|
+
mail_with_body(pattern).any?
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns all mail sent from the given email address.
|
27
|
+
def mail_from(addr)
|
28
|
+
sent_mail.select { |m| m.from.include? addr }
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns all mail sent to the given email address. You may pass subject and body patterns to get more specific (String or Regexp).
|
32
|
+
def mail_to(addr, subject = nil, body = nil)
|
33
|
+
sent_mail.select { |m|
|
34
|
+
m.to.include?(addr) && (subject.nil? || subject === m.subject) && (body.nil? || body === m.to_s)
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns all mail sent matching the given subject (String or Regexp).
|
39
|
+
def mail_with_subject(pattern)
|
40
|
+
sent_mail.select { |m| pattern === m.subject }
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns all mail sent matching the given body (Regexp).
|
44
|
+
def mail_with_body(pattern)
|
45
|
+
sent_mail.select { |m| pattern === m.to_s }
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns all sent mail.
|
49
|
+
def sent_mail
|
50
|
+
Mail::TestMailer.deliveries
|
51
|
+
end
|
52
|
+
|
53
|
+
# Clears sent mail.
|
54
|
+
def clear_mail!
|
55
|
+
Mail::TestMailer.deliveries.clear
|
56
|
+
end
|
57
|
+
end
|
58
|
+
extend Helpers
|
59
|
+
end
|
60
|
+
end
|
data/lib/idlemailer/version.rb
CHANGED
data/lib/idlemailer.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
require 'erb'
|
2
2
|
require 'pathname'
|
3
3
|
require 'mail'
|
4
|
+
|
4
5
|
require 'idlemailer/config'
|
5
6
|
require 'idlemailer/defaults'
|
6
7
|
require 'idlemailer/message'
|
7
8
|
require 'idlemailer/mailer'
|
8
9
|
require 'idlemailer/template_manager'
|
9
10
|
require 'idlemailer/version'
|
11
|
+
|
12
|
+
module IdleMailer
|
13
|
+
autoload :Testing, 'idlemailer/testing'
|
14
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: idlemailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordan Hollinger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mail
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- lib/idlemailer/mailer.rb
|
40
40
|
- lib/idlemailer/message.rb
|
41
41
|
- lib/idlemailer/template_manager.rb
|
42
|
+
- lib/idlemailer/testing.rb
|
42
43
|
- lib/idlemailer/version.rb
|
43
44
|
homepage: https://github.com/jhollinger/idlemailer
|
44
45
|
licenses: []
|
@@ -51,12 +52,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
51
52
|
requirements:
|
52
53
|
- - ">="
|
53
54
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
+
version: 2.0.0
|
55
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
57
|
requirements:
|
57
|
-
- - "
|
58
|
+
- - ">="
|
58
59
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
60
|
+
version: '0'
|
60
61
|
requirements: []
|
61
62
|
rubyforge_project:
|
62
63
|
rubygems_version: 2.5.2
|