idlemailer 1.0.0 → 2.0.0.rc1
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 +32 -1
- data/lib/idlemailer/config.rb +1 -1
- data/lib/idlemailer/defaults.rb +1 -0
- data/lib/idlemailer/mailer.rb +4 -0
- data/lib/idlemailer/message.rb +8 -26
- data/lib/idlemailer/template_manager.rb +56 -0
- data/lib/idlemailer/version.rb +1 -1
- data/lib/idlemailer.rb +1 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 026e7c3207e3a4d68ad8788514da4df57fb38c7c
|
4
|
+
data.tar.gz: 1ba8967dd1cea7dbb1615083c542dc75371220c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33eabc8cf62e1a2854b56d330150b2e7f5525ea04640e03455eecc256140af4dfa999f30b714e171875db1a2fc2bc7c350da0869445b455389e4e118817356d6
|
7
|
+
data.tar.gz: '0294ef2f3f64dce15c02c787f0b1fb0234ca7c902c85a1f5162d4236c2ccf59f1dca1bdce1c96f7b2900c610d04bc4f9d33e2513221c066f33ddf164bdf1b15e'
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# IdleMailer
|
2
2
|
|
3
|
-
A lightweight (~
|
3
|
+
A lightweight (~150 line) alternative to ActionMailer for hipsters who use Ruby but not Rails. Powered by [mail](http://www.rubydoc.info/gems/mail). Great for API-only backends that need to send email.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -31,6 +31,34 @@ mailer = WidgetMailer.new(current_user, widget)
|
|
31
31
|
mailer.deliver
|
32
32
|
```
|
33
33
|
|
34
|
+
### Inline templates
|
35
|
+
|
36
|
+
Instead of creating template files, you can embed your ERB templates right inside your Ruby class.
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
class WidgetMailer
|
40
|
+
include IdleMailer::Mailer
|
41
|
+
|
42
|
+
def initialize(user, widget)
|
43
|
+
mail.to = user.email
|
44
|
+
mail.subject = "Widget #{widget.sku}"
|
45
|
+
@widget = widget
|
46
|
+
end
|
47
|
+
|
48
|
+
text %(
|
49
|
+
A new widget called <%= @widget %> was just created!
|
50
|
+
|
51
|
+
Thanks!
|
52
|
+
)
|
53
|
+
|
54
|
+
html %(
|
55
|
+
<p>A new widget called <%= @widget %> was just created!</p>
|
56
|
+
|
57
|
+
<p>Thanks!</p>
|
58
|
+
)
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
34
62
|
## Configure
|
35
63
|
|
36
64
|
These are the default options. Salt to taste.
|
@@ -40,6 +68,9 @@ IdleMailer.config do |config|
|
|
40
68
|
# Directory containing the mailer templates
|
41
69
|
config.templates = Pathname.new(Dir.getwd).join('templates')
|
42
70
|
|
71
|
+
# Pre-cache all templates and layouts (instead of re-loading them on each delivery)
|
72
|
+
config.cache_templates = true
|
73
|
+
|
43
74
|
# Name of the layout template. Here, the file(s) would be named
|
44
75
|
# mailer_layout.html.erb and/or mailer_layout.text.erb.
|
45
76
|
config.layout = 'mailer_layout'
|
data/lib/idlemailer/config.rb
CHANGED
@@ -7,7 +7,7 @@ module IdleMailer
|
|
7
7
|
# default_from Default "from" address if it's left blank
|
8
8
|
# logger a Logger object for logging email
|
9
9
|
# log_body if true, the entire message body will be logged (instead of just the headers) (default false)
|
10
|
-
Config = Struct.new(:templates, :layout, :delivery_method, :delivery_options, :default_from, :logger, :log_body)
|
10
|
+
Config = Struct.new(:templates, :layout, :cache_templates, :delivery_method, :delivery_options, :default_from, :logger, :log_body)
|
11
11
|
@config = Config.new
|
12
12
|
|
13
13
|
# Takes a block and hands it an IdleMailer::Config object
|
data/lib/idlemailer/defaults.rb
CHANGED
data/lib/idlemailer/mailer.rb
CHANGED
data/lib/idlemailer/message.rb
CHANGED
@@ -13,17 +13,19 @@ module IdleMailer
|
|
13
13
|
|
14
14
|
# Deliver mail
|
15
15
|
def deliver!
|
16
|
-
if has_template? 'html'
|
16
|
+
if mailer.class.has_template? 'html'
|
17
17
|
html_body = layout('html') { body('html') }
|
18
18
|
mail.html_part do
|
19
19
|
content_type 'text/html; charset=UTF-8'
|
20
20
|
body html_body
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
|
+
if mailer.class.has_template? 'text'
|
24
25
|
text_body = layout('text') { body('text') }
|
25
26
|
mail.text_part { body text_body }
|
26
27
|
end
|
28
|
+
|
27
29
|
config = IdleMailer.config
|
28
30
|
mail.from config.default_from if mail.from.nil?
|
29
31
|
mail.delivery_method config.delivery_method, config.delivery_options
|
@@ -35,35 +37,15 @@ module IdleMailer
|
|
35
37
|
private
|
36
38
|
|
37
39
|
def body(type)
|
38
|
-
render
|
40
|
+
render mailer.class.template(type)
|
39
41
|
end
|
40
42
|
|
41
43
|
def layout(type)
|
42
|
-
has_layout?(type) ? render(
|
43
|
-
end
|
44
|
-
|
45
|
-
def render(path)
|
46
|
-
mailer.render(ERB.new(File.read(path))) { yield }
|
47
|
-
end
|
48
|
-
|
49
|
-
def has_template?(type)
|
50
|
-
File.exists? template_path(template_name, type)
|
51
|
-
end
|
52
|
-
|
53
|
-
def has_layout?(type)
|
54
|
-
File.exists? template_path(IdleMailer.config.layout, type)
|
55
|
-
end
|
56
|
-
|
57
|
-
def template_name
|
58
|
-
@name ||= mailer.class.name.
|
59
|
-
gsub(/::/, File::SEPARATOR).
|
60
|
-
sub(/Mailer$/, '').
|
61
|
-
gsub(/([a-z])([A-Z])/, "\\1_\\2").
|
62
|
-
downcase
|
44
|
+
mailer.class.has_layout?(type) ? render(mailer.class.layout(type)) { yield } : yield
|
63
45
|
end
|
64
46
|
|
65
|
-
def
|
66
|
-
|
47
|
+
def render(template)
|
48
|
+
mailer.render(template) { yield }
|
67
49
|
end
|
68
50
|
end
|
69
51
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module IdleMailer
|
2
|
+
module TemplateManager
|
3
|
+
def self.extended(klass)
|
4
|
+
klass.class_eval do
|
5
|
+
class << self
|
6
|
+
attr_reader :layouts, :templates
|
7
|
+
end
|
8
|
+
@layouts, @templates = {}, {}
|
9
|
+
end
|
10
|
+
klass.cache_templates! if IdleMailer.config.cache_templates
|
11
|
+
end
|
12
|
+
|
13
|
+
def text(str)
|
14
|
+
templates['text'] = ERB.new str
|
15
|
+
end
|
16
|
+
|
17
|
+
def html(str)
|
18
|
+
templates['html'] = ERB.new str
|
19
|
+
end
|
20
|
+
|
21
|
+
def template(type)
|
22
|
+
templates[type] || ERB.new(template_path(template_name, type).read)
|
23
|
+
end
|
24
|
+
|
25
|
+
def layout(type)
|
26
|
+
layouts[type] || ERB.new(template_path(IdleMailer.config.layout, type).read)
|
27
|
+
end
|
28
|
+
|
29
|
+
def has_template?(type)
|
30
|
+
templates.has_key?(type) || template_path(template_name, type).exist?
|
31
|
+
end
|
32
|
+
|
33
|
+
def has_layout?(type)
|
34
|
+
layouts.has_key?(type) || template_path(IdleMailer.config.layout, type).exist?
|
35
|
+
end
|
36
|
+
|
37
|
+
def template_name
|
38
|
+
@name ||= self.name.
|
39
|
+
gsub(/::/, File::SEPARATOR).
|
40
|
+
sub(/Mailer$/, '').
|
41
|
+
gsub(/([a-z])([A-Z])/, "\\1_\\2").
|
42
|
+
downcase
|
43
|
+
end
|
44
|
+
|
45
|
+
def template_path(name, type)
|
46
|
+
IdleMailer.config.templates.join("#{name}.#{type}.erb")
|
47
|
+
end
|
48
|
+
|
49
|
+
def cache_templates!
|
50
|
+
layouts['text'] = layout 'text' if has_layout? 'text'
|
51
|
+
layouts['html'] = layout 'html' if has_layout? 'html'
|
52
|
+
templates['text'] = template 'text' if has_template? 'text'
|
53
|
+
templates['html'] = template 'html' if has_template? 'html'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/idlemailer/version.rb
CHANGED
data/lib/idlemailer.rb
CHANGED
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:
|
4
|
+
version: 2.0.0.rc1
|
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-
|
11
|
+
date: 2017-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mail
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/idlemailer/defaults.rb
|
39
39
|
- lib/idlemailer/mailer.rb
|
40
40
|
- lib/idlemailer/message.rb
|
41
|
+
- lib/idlemailer/template_manager.rb
|
41
42
|
- lib/idlemailer/version.rb
|
42
43
|
homepage: https://github.com/jhollinger/idlemailer
|
43
44
|
licenses: []
|
@@ -53,14 +54,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
53
54
|
version: '0'
|
54
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
56
|
requirements:
|
56
|
-
- - "
|
57
|
+
- - ">"
|
57
58
|
- !ruby/object:Gem::Version
|
58
|
-
version:
|
59
|
+
version: 1.3.1
|
59
60
|
requirements: []
|
60
61
|
rubyforge_project:
|
61
|
-
rubygems_version: 2.
|
62
|
+
rubygems_version: 2.5.2
|
62
63
|
signing_key:
|
63
64
|
specification_version: 4
|
64
65
|
summary: A lightweight alternative to ActionMailer
|
65
66
|
test_files: []
|
66
|
-
has_rdoc:
|