roda-mailer_preview 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []