roda-mailer_preview 0.1.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 +7 -0
- data/README.md +69 -0
- data/Rakefile +18 -0
- data/lib/roda/plugins/mailer_preview.rb +142 -0
- metadata +148 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 694e103513caea84683c1b73103481e791f82781
|
4
|
+
data.tar.gz: dc38d626b0e0115fadbbe70f9d736ec376ec3d58
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d2083bed41744145d3737d504256d95fa4958729fb08edb6fceb488c1b2b1bb3e00b8efb0302e748963d5fc384993e63f31b4cae42c13f7bb98c074e56a36e4f
|
7
|
+
data.tar.gz: e3e22cce41990abd85bec907aee71d4468cfac7db7fc1609b422317cb7bbe12264500bc91aed8544a5bce2aae9a9fe7b403a97cd98461e7069fe352ed08da9c5
|
data/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Roda Mailer Preview
|
2
|
+
|
3
|
+
Easily preview your emails inside your application under a customizable route.
|
4
|
+
|
5
|
+
If you've ever used the `mail_view` gem for Rails, or in recent Rails versions,
|
6
|
+
the ability to preview an email, this is very similar to that.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem "roda-mailer_preview"
|
14
|
+
```
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
$ bundle
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
$ gem install roda-mailer_preview
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
Aside from configuring the Roda mailer plugin as you normally would, routes to preview the emails
|
27
|
+
is required, ensuring that the `preview` or `preview_index` methods are called with an instance of
|
28
|
+
a `Mail` object.
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
class App < Roda
|
32
|
+
plugin :mailer_preview
|
33
|
+
|
34
|
+
route do |r|
|
35
|
+
r.on "mail_view" do
|
36
|
+
# Preview /the-mailer at /mail_view/test
|
37
|
+
r.is "test" do
|
38
|
+
mail = YourMailer.mail("/the-mailer")
|
39
|
+
preview(mail)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Provides an index of all previewable-mailers at /mail_view
|
43
|
+
r.is true do
|
44
|
+
mailers = ["/test"]
|
45
|
+
preview_index(mailers)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
```
|
51
|
+
|
52
|
+
## Contributing
|
53
|
+
|
54
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/adam12/roda-mailer_preview.
|
55
|
+
|
56
|
+
I love pull requests! If you fork this project and modify it, please ping me to see
|
57
|
+
if your changes can be incorporated back into this project.
|
58
|
+
|
59
|
+
That said, if your feature idea is nontrivial, you should probably open an issue to
|
60
|
+
[discuss it](http://www.igvita.com/2011/12/19/dont-push-your-pull-requests/)
|
61
|
+
before attempting a pull request.
|
62
|
+
|
63
|
+
## License
|
64
|
+
|
65
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
66
|
+
|
67
|
+
## Credits
|
68
|
+
|
69
|
+
I was shamelessly inspired by the CSS of the MailView gem.
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require "rake/testtask"
|
2
|
+
require "rdoc/task"
|
3
|
+
require "rubygems/tasks"
|
4
|
+
|
5
|
+
RDoc::Task.new do |rdoc|
|
6
|
+
rdoc.main = "README.md"
|
7
|
+
rdoc.rdoc_files.include("README.md", "lib/**/*.rb")
|
8
|
+
end
|
9
|
+
|
10
|
+
Rake::TestTask.new do |t|
|
11
|
+
t.libs << "test"
|
12
|
+
t.test_files = FileList["test/test*.rb"]
|
13
|
+
t.verbose = true
|
14
|
+
end
|
15
|
+
|
16
|
+
Gem::Tasks.new
|
17
|
+
|
18
|
+
task default: :test
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
require "roda"
|
4
|
+
|
5
|
+
class Roda
|
6
|
+
module RodaPlugins
|
7
|
+
# The mailer_preview plugin provides an HTML representation of the email
|
8
|
+
# without requiring it to be delivered through SMTP.
|
9
|
+
#
|
10
|
+
# plugin :mailer_preview
|
11
|
+
#
|
12
|
+
# = Preview email
|
13
|
+
#
|
14
|
+
# To preview an email, create a route which finishes by calling +preview+
|
15
|
+
# with an instance of a Mail object.
|
16
|
+
#
|
17
|
+
# r.on "previews" do
|
18
|
+
# r.is "signup-email" do
|
19
|
+
# mail = YourMailer.mail("/signup-email")
|
20
|
+
# preview(mail)
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# = Preview index
|
25
|
+
#
|
26
|
+
# For a single point of entry to all your mail previews, provide an array
|
27
|
+
# of paths to +preview_index+
|
28
|
+
#
|
29
|
+
# r.is "previews" do
|
30
|
+
# available_previews = ["/previews/signup-email"]
|
31
|
+
# preview_index(available_previews)
|
32
|
+
# end
|
33
|
+
module MailerPreview
|
34
|
+
TEMPLATE = <<-EOC # :nodoc:
|
35
|
+
<!DOCTYPE html>
|
36
|
+
<html>
|
37
|
+
<head>
|
38
|
+
<meta name="viewport" content="width=device-width">
|
39
|
+
<style type="text/css">
|
40
|
+
body {
|
41
|
+
margin: 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
header {
|
45
|
+
font: 12px "Lucida Grande", sans-serif;
|
46
|
+
border-bottom: 1px solid #ddd;
|
47
|
+
padding: 0.5em;
|
48
|
+
overflow: visible;
|
49
|
+
}
|
50
|
+
|
51
|
+
header dt {
|
52
|
+
width: 80px;
|
53
|
+
float: left;
|
54
|
+
clear: left;
|
55
|
+
text-align: right;
|
56
|
+
color: #7f7f7f;
|
57
|
+
padding: 1px;
|
58
|
+
}
|
59
|
+
|
60
|
+
header dd {
|
61
|
+
margin-left: 90px;
|
62
|
+
padding: 1px;
|
63
|
+
}
|
64
|
+
|
65
|
+
.plain {
|
66
|
+
padding: 1em;
|
67
|
+
}
|
68
|
+
</style>
|
69
|
+
</head>
|
70
|
+
<body>
|
71
|
+
<header>
|
72
|
+
<dl>
|
73
|
+
<% headers.each do |header| %>
|
74
|
+
<dt><%= header.name %>:</dt>
|
75
|
+
<dd><%= header.to_s %></dd>
|
76
|
+
<% end %>
|
77
|
+
</dl>
|
78
|
+
</header>
|
79
|
+
|
80
|
+
<div class="body">
|
81
|
+
<% if mail.content_type =~ /plain/ %>
|
82
|
+
<pre class="plain"><%= mail.body %></div>
|
83
|
+
<% else %>
|
84
|
+
<%= mail.body %>
|
85
|
+
<% end %>
|
86
|
+
</div>
|
87
|
+
</body>
|
88
|
+
</html>
|
89
|
+
EOC
|
90
|
+
|
91
|
+
INDEX_TEMPLATE = <<-EOC # :nodoc:
|
92
|
+
<!DOCTYPE html>
|
93
|
+
<html>
|
94
|
+
<head>
|
95
|
+
</head>
|
96
|
+
<body>
|
97
|
+
<ul>
|
98
|
+
<% urls.each do |url| %>
|
99
|
+
<li><a href="<%= path %><%= url %>"><%= url %></a></li>
|
100
|
+
<% end %>
|
101
|
+
</ul>
|
102
|
+
</body>
|
103
|
+
EOC
|
104
|
+
|
105
|
+
module InstanceMethods
|
106
|
+
# Pass an instance of +Mail+ to render a preview
|
107
|
+
#
|
108
|
+
# r.on "previews" do
|
109
|
+
# r.is "signup-email" do
|
110
|
+
# mail = YourMailer.mail("/signup-email")
|
111
|
+
# preview(mail)
|
112
|
+
# end
|
113
|
+
# end
|
114
|
+
def preview(mail)
|
115
|
+
acceptable_headers = %w(Date From To Subject)
|
116
|
+
|
117
|
+
headers = mail.header_fields.select do |field|
|
118
|
+
acceptable_headers.include?(field.name)
|
119
|
+
end
|
120
|
+
|
121
|
+
render(inline: TEMPLATE, locals: { mail: mail, headers: headers })
|
122
|
+
end
|
123
|
+
|
124
|
+
# Pass an array of paths to render an index of available previews
|
125
|
+
#
|
126
|
+
# r.is "previews" do
|
127
|
+
# available_previews = ["/previews/signup-email"]
|
128
|
+
# preview_index(available_previews)
|
129
|
+
# end
|
130
|
+
def preview_index(urls, path: request.path)
|
131
|
+
render(inline: INDEX_TEMPLATE, locals: { urls: urls, path: path })
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def self.load_dependencies(app, opts = {}) # :nodoc:
|
136
|
+
app.plugin :render
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
register_plugin :mailer_preview, MailerPreview
|
141
|
+
end
|
142
|
+
end
|
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: roda-mailer_preview
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Daniels
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: roda
|
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
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: tilt
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mail
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.6'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.6'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubygems-tasks
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rack-test
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.6'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.6'
|
111
|
+
description: |2
|
112
|
+
Easily preview your emails inside your application under a customizable route.
|
113
|
+
|
114
|
+
If you've ever used the mail_view gem for Rails, or in recent Rails versions,
|
115
|
+
the ability to preview an email, this is very similar to that.
|
116
|
+
email: adam@mediadrive.ca
|
117
|
+
executables: []
|
118
|
+
extensions: []
|
119
|
+
extra_rdoc_files: []
|
120
|
+
files:
|
121
|
+
- README.md
|
122
|
+
- Rakefile
|
123
|
+
- lib/roda/plugins/mailer_preview.rb
|
124
|
+
homepage: https://github.com/adam12/roda-mailer_preview
|
125
|
+
licenses:
|
126
|
+
- MIT
|
127
|
+
metadata: {}
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.6.8
|
145
|
+
signing_key:
|
146
|
+
specification_version: 4
|
147
|
+
summary: Preview your Roda mailer plugin emails
|
148
|
+
test_files: []
|