idlemailer 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.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +83 -0
- data/lib/idlemailer/config.rb +17 -0
- data/lib/idlemailer/defaults.rb +16 -0
- data/lib/idlemailer/mailer.rb +39 -0
- data/lib/idlemailer/message.rb +71 -0
- data/lib/idlemailer/version.rb +5 -0
- data/lib/idlemailer.rb +8 -0
- metadata +65 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: f3ef0ca694fb5628659b30090fbaec75f6da934b
|
|
4
|
+
data.tar.gz: fe37ada9cca45b12ec8f7f0f98fe3fbf090209c8
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 4f090285bb04f67482db2dc1a29a03612f6deb46cf40c597358ff90333074c2418578f79c0cb347117bee2bba7c0e0dae2e8e599f4d18b21f0ffdcb371a4dd3e
|
|
7
|
+
data.tar.gz: b8edf7286d8a143955dcf288aeb34e06a7a48e8dc87c773d036146a657ab0d9751cb1f3008c71ae51011f8bd879d3fc384e979107aaa4d47beac51f418eef01c
|
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2015 Jordan Hollinger
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
'Software'), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
17
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
18
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
19
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
20
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# IdleMailer
|
|
2
|
+
|
|
3
|
+
A lightweight 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
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
$ [sudo] gem install idlemailer
|
|
8
|
+
# Or add "idlemailer" to your Gemfile
|
|
9
|
+
|
|
10
|
+
## Use
|
|
11
|
+
|
|
12
|
+
IdleMailer is all about providing mailer classes and templates. But [the mail gem](http://www.rubydoc.info/gems/mail) has a great API, so you have unfettered access to it in your mailers through the "mail" object.
|
|
13
|
+
|
|
14
|
+
# Define your mailer class
|
|
15
|
+
class WidgetMailer
|
|
16
|
+
include IdleMailer::Mailer
|
|
17
|
+
|
|
18
|
+
def initialize(user, widget)
|
|
19
|
+
mail.to = user.email
|
|
20
|
+
mail.subject = "Widget #{widget.sku}"
|
|
21
|
+
@widget = widget
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Create widget.html.erb and/or widget.text.erb templates.
|
|
26
|
+
# They'll have access to instance variables like @widget above.
|
|
27
|
+
|
|
28
|
+
# Send your mail
|
|
29
|
+
mailer = WidgetMailer.new(current_user, widget)
|
|
30
|
+
mailer.deliver
|
|
31
|
+
|
|
32
|
+
## Configure
|
|
33
|
+
|
|
34
|
+
These are the default options. Salt to taste.
|
|
35
|
+
|
|
36
|
+
IdleMailer.config do |config|
|
|
37
|
+
# Directory containing the mailer templates
|
|
38
|
+
config.templates = Pathname.new(Dir.getwd).join('templates')
|
|
39
|
+
|
|
40
|
+
# Name of the layout template. Here, the file(s) would be named
|
|
41
|
+
# mailer_layout.html.erb and/or mailer_layout.text.erb.
|
|
42
|
+
config.layout = 'mailer_layout'
|
|
43
|
+
|
|
44
|
+
# Email delivery method (mail gem). Set to :test when testing or when developing locally
|
|
45
|
+
config.delivery_method = :smtp
|
|
46
|
+
|
|
47
|
+
# Delivery options (mail gem)
|
|
48
|
+
config.delivery_options = {
|
|
49
|
+
user_name: ENV['MAIL_USER'],
|
|
50
|
+
password: ENV['MAIL_PASSWORD'],
|
|
51
|
+
domain: ENV['MAIL_DOMAIN'],
|
|
52
|
+
address: ENV['MAIL_ADDRESS'],
|
|
53
|
+
port: ENV['MAIL_PORT'] || 587,
|
|
54
|
+
authentication: ENV['MAIL_AUTHENTICATION'] || 'plain',
|
|
55
|
+
enable_starttls_auto: (ENV['MAIL_TLS'] ? true : false)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# Default "from" address for all mailers
|
|
59
|
+
config.default_from = nil
|
|
60
|
+
|
|
61
|
+
# Write all deliveries to $stdout
|
|
62
|
+
config.log = false
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
## Testing
|
|
66
|
+
|
|
67
|
+
Put the mailer in testing mode:
|
|
68
|
+
|
|
69
|
+
IdleMailer.config do |config|
|
|
70
|
+
config.delivery_method = :test
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
Then use mail gem's built in testing helpers in your specs:
|
|
74
|
+
|
|
75
|
+
sent = Mail::TestMailer.deliveries.any? { |mail| mail.to.include? @user.email }
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
MIT License. See LICENSE for details.
|
|
80
|
+
|
|
81
|
+
## Copyright
|
|
82
|
+
|
|
83
|
+
Copyright (c) 2015 Jordan Hollinger
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module IdleMailer
|
|
2
|
+
# Struct for holding IdleMailer config
|
|
3
|
+
# templates A Pathname object pointing to the mail templates directory (defaults to ./templates)
|
|
4
|
+
# layout Name of layout file, minus extention (defaults to mailer_layout)
|
|
5
|
+
# delivery_method Symbol like :smtp or :test (see the mail gem for all options)
|
|
6
|
+
# delivery_options Hash of delivery options (see the mail gem for all options)
|
|
7
|
+
# default_from Default "from" address if it's left blank
|
|
8
|
+
# log When true, writes delivered messages to $stdout (default false)
|
|
9
|
+
Config = Struct.new(:templates, :layout, :delivery_method, :delivery_options, :default_from, :log)
|
|
10
|
+
@config = Config.new
|
|
11
|
+
|
|
12
|
+
# Takes a block and hands it an IdleMailer::Config object
|
|
13
|
+
def self.config
|
|
14
|
+
yield @config if block_given?
|
|
15
|
+
@config
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
IdleMailer.config do |config|
|
|
2
|
+
config.templates = Pathname.new(Dir.getwd).join('templates')
|
|
3
|
+
config.layout = 'mailer_layout'
|
|
4
|
+
config.delivery_method = :smtp
|
|
5
|
+
config.delivery_options = {
|
|
6
|
+
user_name: ENV['MAIL_USER'],
|
|
7
|
+
password: ENV['MAIL_PASSWORD'],
|
|
8
|
+
domain: ENV['MAIL_DOMAIN'],
|
|
9
|
+
address: ENV['MAIL_ADDRESS'],
|
|
10
|
+
port: ENV['MAIL_PORT'] || 587,
|
|
11
|
+
authentication: ENV['MAIL_AUTHENTICATION'] || 'plain',
|
|
12
|
+
enable_starttls_auto: (ENV['MAIL_TLS'] ? true : false)
|
|
13
|
+
}
|
|
14
|
+
config.default_from = nil
|
|
15
|
+
config.log = false
|
|
16
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module IdleMailer
|
|
2
|
+
# Module to include in your mailer classes. Example:
|
|
3
|
+
#
|
|
4
|
+
# class WidgetMailer
|
|
5
|
+
# include IdleMailer::Mailer
|
|
6
|
+
#
|
|
7
|
+
# def initialize(address, widget)
|
|
8
|
+
# mail.to = address
|
|
9
|
+
# mail.subject = "Widget #{widget.sku}"
|
|
10
|
+
# # See mail gem docs for more options - http://www.rubydoc.info/gems/mail
|
|
11
|
+
# @widget = widget
|
|
12
|
+
# end
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# # Name your templates "widget.html.erb" and "widget.text.erb". They'll have access to "@widget".
|
|
16
|
+
#
|
|
17
|
+
# mailer = WidgetMailer.new(current_user.email, widget)
|
|
18
|
+
# mailer.deliver
|
|
19
|
+
#
|
|
20
|
+
module Mailer
|
|
21
|
+
# Deliver mail
|
|
22
|
+
def deliver
|
|
23
|
+
mailer = IdleMailer::Message.new(mail, self)
|
|
24
|
+
mailer.deliver!
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Render an ERB template with the mailer's binding
|
|
28
|
+
def render(template)
|
|
29
|
+
template.result(binding { yield })
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# Mail config object
|
|
35
|
+
def mail
|
|
36
|
+
@mail ||= Mail.new
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module IdleMailer
|
|
2
|
+
# Renders templates and delivers message
|
|
3
|
+
class Message
|
|
4
|
+
# Mail object to deliver
|
|
5
|
+
attr_reader :mail
|
|
6
|
+
# The IdleMailer::Mailer object
|
|
7
|
+
attr_reader :mailer
|
|
8
|
+
|
|
9
|
+
# Initialize a new message
|
|
10
|
+
def initialize(mail, mailer)
|
|
11
|
+
@mail = mail
|
|
12
|
+
@mailer = mailer
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Deliver mail
|
|
16
|
+
def deliver!
|
|
17
|
+
log_to_stdout if IdleMailer.config.log
|
|
18
|
+
mail.from IdleMailer.config.default_from if mail.from.nil?
|
|
19
|
+
if has_template? 'html'
|
|
20
|
+
html_body = layout('html') { body('html') }
|
|
21
|
+
mail.html_part do
|
|
22
|
+
content_type 'text/html; charset=UTF-8'
|
|
23
|
+
body html_body
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
if has_template? 'text'
|
|
27
|
+
text_body = layout('text') { body('text') }
|
|
28
|
+
mail.text_part { body text_body }
|
|
29
|
+
end
|
|
30
|
+
mail.delivery_method IdleMailer.config.delivery_method, IdleMailer.config.delivery_options
|
|
31
|
+
mail.deliver
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def body(type)
|
|
37
|
+
render template_path(template_name, type)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def layout(type)
|
|
41
|
+
has_layout?(type) ? render(template_path(IdleMailer.config.layout, type)) { yield } : yield
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def render(path)
|
|
45
|
+
mailer.render(ERB.new(File.read(path))) { yield }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def has_template?(type)
|
|
49
|
+
File.exists? template_path(template_name, type)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def has_layout?(type)
|
|
53
|
+
File.exists? template_path(IdleMailer.config.layout, type)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def template_name
|
|
57
|
+
@name ||= mailer.class.name.sub(/Mailer$/, '').gsub(/([a-z])([A-Z])/, "\\1_\\2").downcase
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def template_path(name, type)
|
|
61
|
+
IdleMailer.config.templates.join("#{name}.#{type}.erb")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def log_to_stdout
|
|
65
|
+
$stdout.puts [mail.to, mail.cc, mail.bcc].flatten.compact.join('; ')
|
|
66
|
+
$stdout.puts mail.subject
|
|
67
|
+
$stdout.puts(layout('html') { body('html') }) if has_template? 'html'
|
|
68
|
+
$stdout.puts(layout('text') { body('text') }) if has_template? 'text'
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
data/lib/idlemailer.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: idlemailer
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Jordan Hollinger
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-05-07 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: mail
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '2.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '2.0'
|
|
27
|
+
description: Provides non-Rails projects with a lightweight ActionMailer-like wrapper
|
|
28
|
+
around the mail gem
|
|
29
|
+
email: jordan@jordanhollinger.com
|
|
30
|
+
executables: []
|
|
31
|
+
extensions: []
|
|
32
|
+
extra_rdoc_files: []
|
|
33
|
+
files:
|
|
34
|
+
- LICENSE
|
|
35
|
+
- README.md
|
|
36
|
+
- lib/idlemailer.rb
|
|
37
|
+
- lib/idlemailer/config.rb
|
|
38
|
+
- lib/idlemailer/defaults.rb
|
|
39
|
+
- lib/idlemailer/mailer.rb
|
|
40
|
+
- lib/idlemailer/message.rb
|
|
41
|
+
- lib/idlemailer/version.rb
|
|
42
|
+
homepage: https://github.com/jhollinger/idlemailer
|
|
43
|
+
licenses: []
|
|
44
|
+
metadata: {}
|
|
45
|
+
post_install_message:
|
|
46
|
+
rdoc_options: []
|
|
47
|
+
require_paths:
|
|
48
|
+
- lib
|
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: '0'
|
|
59
|
+
requirements: []
|
|
60
|
+
rubyforge_project:
|
|
61
|
+
rubygems_version: 2.4.5
|
|
62
|
+
signing_key:
|
|
63
|
+
specification_version: 4
|
|
64
|
+
summary: A lightweight alternative to ActionMailer
|
|
65
|
+
test_files: []
|