rails_email_preview 0.2.2 → 0.2.3
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 +10 -1
- data/app/controllers/rails_email_preview/emails_controller.rb +38 -13
- data/app/helpers/rails_email_preview/emails_helper.rb +18 -0
- data/app/views/rails_email_preview/emails/_headers.html.slim +13 -11
- data/app/views/rails_email_preview/emails/_send_form.html.slim +6 -0
- data/app/views/rails_email_preview/emails/_toolbar.html.slim +13 -0
- data/app/views/rails_email_preview/emails/index.html.slim +16 -10
- data/app/views/rails_email_preview/emails/show.html.slim +10 -7
- data/config/initializers/rails_email_preview.rb +15 -7
- data/config/locales/rep.en.yml +12 -0
- data/config/routes.rb +1 -0
- data/lib/rails_email_preview.rb +7 -2
- data/lib/rails_email_preview/delivery_handler.rb +15 -0
- data/lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb +4 -4
- data/lib/rails_email_preview/version.rb +1 -1
- metadata +6 -3
- data/app/views/rails_email_preview/emails/_options.html.slim +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b46366e1472a3041b34ca170b5cc29825c9f5ed1
|
4
|
+
data.tar.gz: 8ba5c7bacfdfaef09c530d75672ff78f70690f11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87929034726a606ffa0d438c3f91f99a4a89dbf760487d2c140e98d18fd46bb988f3cb4642012755612db68138706dd6dc4af7ab0f4ec1811ae9c524eba63233
|
7
|
+
data.tar.gz: beee657162ebe47a1e601e236fe12ff8f3c142136385c4a17b62a3fccc824ed18e76a3c1854a9754b976d36481a414e7f967a0ab9d8b501e0e0b17800233ebba
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ A Rails Engine to preview plain text and html email in your browser. Compatible
|
|
6
6
|
![screenshot][rep-show-screenshot]
|
7
7
|
![screenshot][rep-nav-screenshot]
|
8
8
|
|
9
|
-
*
|
9
|
+
*styles are provided by the application, above is [Zuigo](http://zuigo.com/), a platform to organize & discover events*
|
10
10
|
|
11
11
|
How to
|
12
12
|
-----
|
@@ -63,6 +63,15 @@ You can access REP urls like this:
|
|
63
63
|
# email show:
|
64
64
|
rails_email_preview.rep_email_url(mail_class: "user_mailer", mail_action: "welcome")
|
65
65
|
|
66
|
+
Sending test emails
|
67
|
+
-------------------
|
68
|
+
|
69
|
+
You can send emails via REP. This is especially useful when testing with limited clients (Blackberry, Outlook, etc.).
|
70
|
+
This will use the environment's mailer settings, but the handler will `perform_deliveries`.
|
71
|
+
Uncomment this line in the initializer to disable sending test emails:
|
72
|
+
|
73
|
+
config.enable_send_email = false
|
74
|
+
|
66
75
|
Email editing
|
67
76
|
-------------
|
68
77
|
|
@@ -5,7 +5,7 @@ class RailsEmailPreview::EmailsController < ::RailsEmailPreview::ApplicationCont
|
|
5
5
|
|
6
6
|
# list screen
|
7
7
|
def index
|
8
|
-
@preview_class_names = (RailsEmailPreview.preview_classes || []).map { |klass| klass.is_a?(String) ? klass : klass.name }
|
8
|
+
@preview_class_names = (RailsEmailPreview.preview_classes || []).map { |klass| klass.is_a?(String) ? klass : klass.name }.sort
|
9
9
|
end
|
10
10
|
|
11
11
|
# preview screen
|
@@ -13,25 +13,18 @@ class RailsEmailPreview::EmailsController < ::RailsEmailPreview::ApplicationCont
|
|
13
13
|
I18n.with_locale @email_locale do
|
14
14
|
@part_type = params[:part_type] || 'text/html'
|
15
15
|
if @preview_class.respond_to?(:new)
|
16
|
-
@mail =
|
16
|
+
@mail = preview_mail
|
17
17
|
else
|
18
|
-
#
|
19
|
-
arg_info = "#{@preview_class}"
|
20
|
-
if @preview_class.is_a?(Module)
|
21
|
-
chain = @preview_class.ancestors.map(&:to_s)
|
22
|
-
chain = chain[1 .. chain.index { |c| c =~ /^Application[A-Z][A-z]+$/ } || -1]
|
23
|
-
end
|
24
|
-
raise ArgumentError.new("#{arg_info} is not a preview class #{"(ancestors: #{chain * ' < '})"} ")
|
18
|
+
raise ArgumentError.new("#{@preview_class} is not a preview class, does not respond_to?(:new)")
|
25
19
|
end
|
26
20
|
end
|
27
|
-
render
|
28
21
|
end
|
29
22
|
|
30
23
|
# render actual email content
|
31
24
|
def show_raw
|
32
25
|
I18n.with_locale @email_locale do
|
33
|
-
@mail =
|
34
|
-
RailsEmailPreview.run_before_render(@mail)
|
26
|
+
@mail = preview_mail
|
27
|
+
RailsEmailPreview.run_before_render(@mail, @preview_class.name, @mail_action)
|
35
28
|
if @part_type == 'raw'
|
36
29
|
body = "<pre id='raw_message'>#{html_escape(@mail.to_s)}</pre>"
|
37
30
|
else
|
@@ -49,8 +42,39 @@ class RailsEmailPreview::EmailsController < ::RailsEmailPreview::ApplicationCont
|
|
49
42
|
end
|
50
43
|
end
|
51
44
|
|
45
|
+
def test_deliver
|
46
|
+
redirect_url = rep_email_url(params.slice(:mail_class, :mail_action, :email_locale))
|
47
|
+
if (address = params[:recipient_email]).blank? || address !~ /@/
|
48
|
+
redirect_to redirect_url, alert: t('rep.test_deliver.provide_email')
|
49
|
+
return
|
50
|
+
end
|
51
|
+
if !(delivery_method = Rails.application.config.action_mailer.delivery_method)
|
52
|
+
redirect_to redirect_url, alert: t('rep.test_deliver.no_delivery_method', environment: Rails.env)
|
53
|
+
return
|
54
|
+
end
|
55
|
+
I18n.with_locale @email_locale do
|
56
|
+
delivery_handler = RailsEmailPreview::DeliveryHandler.new(preview_mail, to: address, cc: nil, bcc: nil)
|
57
|
+
deliver_email!(delivery_handler.mail)
|
58
|
+
|
59
|
+
redirect_to redirect_url, notice: t('rep.test_deliver.sent_notice', address: address, delivery_method: delivery_method)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
52
63
|
protected
|
53
64
|
|
65
|
+
def deliver_email!(mail)
|
66
|
+
# support deliver! if present
|
67
|
+
if mail.respond_to?(:deliver!)
|
68
|
+
mail.deliver!
|
69
|
+
else
|
70
|
+
mail.deliver
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def preview_mail
|
75
|
+
@preview_class.new.send(@mail_action)
|
76
|
+
end
|
77
|
+
|
54
78
|
def set_email_preview_locale
|
55
79
|
@email_locale = (params[:email_locale] || I18n.default_locale).to_s
|
56
80
|
end
|
@@ -62,6 +86,7 @@ class RailsEmailPreview::EmailsController < ::RailsEmailPreview::ApplicationCont
|
|
62
86
|
(pc.is_a?(String) ? pc : pc.name).underscore == params[:mail_class]
|
63
87
|
}
|
64
88
|
@preview_class = @preview_class.constantize if @preview_class.is_a?(String)
|
65
|
-
@
|
89
|
+
@mail_action = params[:mail_action]
|
90
|
+
@part_type = params[:part_type] || 'text/html'
|
66
91
|
end
|
67
92
|
end
|
@@ -6,4 +6,22 @@ module RailsEmailPreview::EmailsHelper
|
|
6
6
|
value.to_s
|
7
7
|
end
|
8
8
|
end
|
9
|
+
|
10
|
+
def email_methods(m)
|
11
|
+
m.constantize.instance_methods(false).map(&:to_s).sort
|
12
|
+
end
|
13
|
+
|
14
|
+
def split_in_halves(elements, &weight)
|
15
|
+
tot_w = elements.map(&weight).sum
|
16
|
+
cols = [elements.dup, []]
|
17
|
+
col2_w = 0
|
18
|
+
cols[0].reverse_each do |cl|
|
19
|
+
n = weight.call(cl)
|
20
|
+
break if col2_w + n > tot_w / 2
|
21
|
+
col2_w += n
|
22
|
+
cols[1] << cols[0].pop
|
23
|
+
end
|
24
|
+
cols[1].reverse!
|
25
|
+
cols
|
26
|
+
end
|
9
27
|
end
|
@@ -1,15 +1,17 @@
|
|
1
1
|
ruby:
|
2
|
-
headers =
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
headers = I18n.with_locale @email_locale do
|
3
|
+
{
|
4
|
+
'Subject' => @mail.subject || '(no subject)',
|
5
|
+
'From' => @mail.from,
|
6
|
+
'Reply to' => @mail.reply_to,
|
7
|
+
'To' => @mail.to,
|
8
|
+
'CC' => @mail.cc,
|
9
|
+
'BCC' => @mail.bcc
|
10
|
+
}.delete_if { |k, v| v.blank? }
|
11
|
+
end
|
10
12
|
|
11
13
|
|
12
|
-
dl
|
14
|
+
dl.inline-dl
|
13
15
|
- headers.each do |header, value|
|
14
|
-
dt
|
15
|
-
dd
|
16
|
+
dt = header
|
17
|
+
dd = format_header(value)
|
@@ -0,0 +1,6 @@
|
|
1
|
+
div style="max-width: 250px"
|
2
|
+
= form_tag rails_email_preview.rep_test_deliver_url, method: :post do
|
3
|
+
= hidden_field_tag :email_locale, @email_locale
|
4
|
+
.input-group
|
5
|
+
span.input-group-btn: button.btn.btn-danger type='submit' data-confirm=t('rep.send_are_you_sure') #{t('rep.send_btn')}
|
6
|
+
= text_field_tag :recipient_email, '', class: 'form-control', placeholder: t('rep.send_recipient_placeholder')
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.btn-toolbar.pull-right
|
2
|
+
.btn-group
|
3
|
+
- I18n.available_locales.each do |locale|
|
4
|
+
a.btn href=rails_email_preview.rep_email_url(params.merge(part_type: @part_type, email_locale: locale)) class=('active' if @email_locale == locale.to_s)
|
5
|
+
= locale
|
6
|
+
|
7
|
+
.btn-group
|
8
|
+
- { 'text/html' => 'HTML', 'text/plain' => 'Text', 'raw' => 'Raw'}.each do |mime, label|
|
9
|
+
a.btn href=rails_email_preview.rep_email_url(params.merge(part_type: mime)) class=('active' if @part_type == mime)
|
10
|
+
= label
|
11
|
+
|
12
|
+
- if RailsEmailPreview.enable_send_email
|
13
|
+
.btn-group= render 'rails_email_preview/emails/send_form'
|
@@ -1,10 +1,16 @@
|
|
1
|
-
h1
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
h1 #{t 'rep.list_title'}
|
2
|
+
|
3
|
+
- previews_group = proc do |m|
|
4
|
+
- capture do
|
5
|
+
h2= m.underscore.sub(/(_mailer)?_preview$/, '').humanize
|
6
|
+
ul.list-group
|
7
|
+
- email_methods(m).each do |method|
|
8
|
+
li.list-group-item
|
9
|
+
a href=rails_email_preview.rep_email_url(mail_class: m.to_s.underscore, mail_action: method.to_s, email_locale: @email_locale)
|
10
|
+
= method.to_s.humanize
|
11
|
+
|
12
|
+
.row
|
13
|
+
- split_in_halves(@preview_class_names) { |c| email_methods(c).length } .each do |classes|
|
14
|
+
.col-sm-6
|
15
|
+
- classes.each do |class_name|
|
16
|
+
= previews_group.call(class_name)
|
@@ -1,11 +1,14 @@
|
|
1
|
-
|
1
|
+
.row
|
2
|
+
.pull-left
|
3
|
+
a.btn.btn-link href=rails_email_preview.rep_emails_url(email_locale: @email_locale) « #{t 'rep.back_to_list'}
|
4
|
+
.margin-right= render 'rails_email_preview/emails/toolbar'
|
2
5
|
|
3
|
-
#email-show
|
4
|
-
-#
|
5
|
-
.pull-right = render 'rails_email_preview/emails/options'
|
6
|
-
|
7
|
-
-# from, to, subject
|
6
|
+
#email-show: .row
|
7
|
+
-# From, To, Subject and other
|
8
8
|
= render 'rails_email_preview/emails/headers'
|
9
|
+
-# Locale, format and actions
|
9
10
|
|
10
11
|
-# actual email content, rendered in an iframe to prevent browser styles from interfering
|
11
|
-
|
12
|
+
.row
|
13
|
+
.margin-right
|
14
|
+
= render 'rails_email_preview/emails/email_iframe'
|
@@ -1,18 +1,26 @@
|
|
1
1
|
require 'rails_email_preview'
|
2
2
|
|
3
|
-
#=
|
3
|
+
#= REP hooks and config
|
4
|
+
#RailsEmailPreview.setup do |config|
|
4
5
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
6
|
+
# # hook before rendering preview:
|
7
|
+
# config.before_render do |message, preview_class_name, mailer_action|
|
8
|
+
# # apply premailer-rails:
|
9
|
+
# Premailer::Rails::Hook.delivering_email(message)
|
10
|
+
# # or actionmailer-inline-css:
|
11
|
+
# ActionMailer::InlineCssHook.delivering_email(message)
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# # do not show Send Email button
|
15
|
+
# config.enable_send_email = false
|
16
|
+
#end
|
9
17
|
|
10
|
-
#= Comfortable Mexican Sofa
|
18
|
+
#= REP + Comfortable Mexican Sofa integration
|
11
19
|
#
|
12
20
|
# # enable comfortable_mexican_sofa integration:
|
13
21
|
# require 'rails_email_preview/integrations/comfortable_mexica_sofa'
|
14
22
|
|
15
|
-
#= Application-specific
|
23
|
+
#= Application-specific (layout, permissions, customizations)
|
16
24
|
#
|
17
25
|
# # You can specify a controller for RailsEmailPreview::ApplicationController to inherit from:
|
18
26
|
# RailsEmailPreview.parent_controller = 'Admin::ApplicationController' # default: '::ApplicationController'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
en:
|
2
|
+
rep:
|
3
|
+
test_deliver:
|
4
|
+
no_delivery_method: Please set "config.action_mailer.delivery_method" to send emails in "%{environment}" environment
|
5
|
+
provide_email: Send to which address?
|
6
|
+
sent_notice: "Sent to %{address} via %{delivery_method}"
|
7
|
+
list_title: Application Emails
|
8
|
+
back_to_list: Back to list
|
9
|
+
send_recipient_placeholder: Email
|
10
|
+
send_btn: Send to
|
11
|
+
send_are_you_sure: This will actually send this email. Are you sure?
|
12
|
+
|
data/config/routes.rb
CHANGED
@@ -3,6 +3,7 @@ RailsEmailPreview::Engine.routes.draw do
|
|
3
3
|
|
4
4
|
get 'raw/:mail_class/:mail_action' => 'emails#show_raw', as: :rep_raw_email
|
5
5
|
get ':mail_class/:mail_action' => 'emails#show', as: :rep_email
|
6
|
+
post 'test_deliver/:mail_class/:mail_action' => 'emails#test_deliver', as: :rep_test_deliver
|
6
7
|
|
7
8
|
# define alias for the root url as part of stable api
|
8
9
|
get '/' => 'emails#index', as: :rep_root
|
data/lib/rails_email_preview.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'rails_email_preview/engine'
|
3
3
|
require 'rails_email_preview/main_app_route_delegator'
|
4
4
|
require 'rails_email_preview/version'
|
5
|
+
require 'rails_email_preview/delivery_handler'
|
5
6
|
|
6
7
|
require 'slim'
|
7
8
|
require 'slim-rails'
|
@@ -14,10 +15,14 @@ module RailsEmailPreview
|
|
14
15
|
# auto-loading configured in initializer
|
15
16
|
mattr_accessor :preview_classes
|
16
17
|
|
18
|
+
# send email button (experimental, false by default)
|
19
|
+
mattr_accessor :enable_send_email
|
20
|
+
self.enable_send_email = true
|
21
|
+
|
17
22
|
class << self
|
18
|
-
def run_before_render(mail)
|
23
|
+
def run_before_render(mail, preview_class_name, mailer_action)
|
19
24
|
(defined?(@hooks) && @hooks[:before_render] || []).each do |block|
|
20
|
-
block.call(mail)
|
25
|
+
block.call(mail, preview_class_name, mailer_action)
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
# simply require this file to enable Comfortable Mexican Sofa integration
|
2
3
|
# read more https://github.com/glebm/rails_email_preview/wiki/Edit-Emails-with-Comfortable-Mexican-Sofa
|
3
4
|
|
@@ -48,7 +49,7 @@ module RailsEmailPreview
|
|
48
49
|
result = (content || fallback_content).to_s
|
49
50
|
|
50
51
|
# If rendering in preview from admin, add edit/create lnk
|
51
|
-
if caller.grep(/emails_controller/).present?
|
52
|
+
if caller.grep(/rails_email_preview\/emails_controller/).present? && !caller.grep(/rails_email_preview\/delivery_handler/).present?
|
52
53
|
snippet = site.snippets.find_by_identifier(snippet_id)
|
53
54
|
|
54
55
|
|
@@ -67,11 +68,10 @@ module RailsEmailPreview
|
|
67
68
|
})
|
68
69
|
end
|
69
70
|
|
70
|
-
result = safe_join [
|
71
|
-
"<table><tr><td>".html_safe,
|
71
|
+
result = safe_join ["<table class='rep-edit-link'><tr><td>".html_safe,
|
72
72
|
cms_edit_email_snippet_link(cms_path),
|
73
73
|
"</td></tr></table>".html_safe,
|
74
|
-
"\n"]
|
74
|
+
"\n\n", result]
|
75
75
|
end
|
76
76
|
result
|
77
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_email_preview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Mazovetskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -110,17 +110,20 @@ files:
|
|
110
110
|
- app/views/layouts/rails_email_preview/application.html.slim
|
111
111
|
- app/views/rails_email_preview/emails/_email_iframe.html.slim
|
112
112
|
- app/views/rails_email_preview/emails/_headers.html.slim
|
113
|
-
- app/views/rails_email_preview/emails/
|
113
|
+
- app/views/rails_email_preview/emails/_send_form.html.slim
|
114
|
+
- app/views/rails_email_preview/emails/_toolbar.html.slim
|
114
115
|
- app/views/rails_email_preview/emails/index.html.slim
|
115
116
|
- app/views/rails_email_preview/emails/show.html.slim
|
116
117
|
- lib/generators/rails_email_preview/install_generator.rb
|
117
118
|
- lib/generators/rails_email_preview/update_previews_generator.rb
|
119
|
+
- lib/rails_email_preview/delivery_handler.rb
|
118
120
|
- lib/rails_email_preview/engine.rb
|
119
121
|
- lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb
|
120
122
|
- lib/rails_email_preview/main_app_route_delegator.rb
|
121
123
|
- lib/rails_email_preview/version.rb
|
122
124
|
- lib/rails_email_preview.rb
|
123
125
|
- config/initializers/rails_email_preview.rb
|
126
|
+
- config/locales/rep.en.yml
|
124
127
|
- config/routes.rb
|
125
128
|
- MIT-LICENSE
|
126
129
|
- Rakefile
|
@@ -1,9 +0,0 @@
|
|
1
|
-
p.btn-group
|
2
|
-
- { 'text/html' => 'HTML', 'text/plain' => 'Text', 'raw' => 'Raw'}.each do |mime, label|
|
3
|
-
a.btn.btn-link href=rails_email_preview.rep_email_url(params.merge(part_type: mime)) class=('active' if @part_type == mime)
|
4
|
-
= label
|
5
|
-
br
|
6
|
-
p.btn-group
|
7
|
-
- I18n.available_locales.each do |locale|
|
8
|
-
a.btn.btn-link href=rails_email_preview.rep_email_url(params.merge(part_type: @part_type, email_locale: locale)) class=('active' if @email_locale == locale.to_s)
|
9
|
-
= locale
|