simple_email_preview 1.0.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/Gemfile +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +162 -0
- data/Rakefile +62 -0
- data/app/assets/images/simple_email_preview/favicon.png +0 -0
- data/app/assets/javascripts/simple_email_preview/application.js +1 -0
- data/app/assets/stylesheets/simple_email_preview/_bootstrap3.sass +68 -0
- data/app/assets/stylesheets/simple_email_preview/_default.sass +230 -0
- data/app/assets/stylesheets/simple_email_preview/application.scss +10 -0
- data/app/controllers/simple_email_preview/application_controller.rb +19 -0
- data/app/controllers/simple_email_preview/emails_controller.rb +194 -0
- data/app/helpers/simple_email_preview/emails_helper.rb +85 -0
- data/app/models/simple_email_preview/preview.rb +86 -0
- data/app/presenters/simple_email_preview/preview_list_presenter.rb +38 -0
- data/app/views/layouts/simple_email_preview/_flash_notices.html.erb +7 -0
- data/app/views/layouts/simple_email_preview/application.html.erb +16 -0
- data/app/views/layouts/simple_email_preview/email.html.erb +30 -0
- data/app/views/simple_email_preview/emails/_email_iframe.html.erb +88 -0
- data/app/views/simple_email_preview/emails/_format_nav.html.erb +4 -0
- data/app/views/simple_email_preview/emails/_headers.html.erb +10 -0
- data/app/views/simple_email_preview/emails/_headers_and_nav.html.erb +12 -0
- data/app/views/simple_email_preview/emails/_i18n_nav.html.erb +3 -0
- data/app/views/simple_email_preview/emails/_nav.html.erb +18 -0
- data/app/views/simple_email_preview/emails/_send_form.html.erb +11 -0
- data/app/views/simple_email_preview/emails/index.html.erb +36 -0
- data/app/views/simple_email_preview/emails/show.html.erb +23 -0
- data/config/i18n-tasks.yml +10 -0
- data/config/initializers/simple_email_preview.rb +14 -0
- data/config/locales/de.yml +47 -0
- data/config/locales/en.yml +47 -0
- data/config/locales/es.yml +47 -0
- data/config/locales/ja.yml +47 -0
- data/config/locales/ru.yml +51 -0
- data/config/routes.rb +23 -0
- data/lib/generators/simple_email_preview/install_generator.rb +17 -0
- data/lib/generators/simple_email_preview/update_previews_generator.rb +45 -0
- data/lib/simple_email_preview.rb +105 -0
- data/lib/simple_email_preview/delivery_handler.rb +15 -0
- data/lib/simple_email_preview/engine.rb +14 -0
- data/lib/simple_email_preview/main_app_route_delegator.rb +20 -0
- data/lib/simple_email_preview/version.rb +3 -0
- data/lib/simple_email_preview/view_hooks.rb +102 -0
- metadata +231 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
---
|
2
|
+
ru:
|
3
|
+
rep:
|
4
|
+
headers:
|
5
|
+
subject: "Тема"
|
6
|
+
from: "Отправитель"
|
7
|
+
to: "Получатель"
|
8
|
+
reply_to: "Ответ на"
|
9
|
+
cc: "Копия"
|
10
|
+
bcc: "Скрытая копия"
|
11
|
+
attachments: "Вложения"
|
12
|
+
base:
|
13
|
+
email:
|
14
|
+
one: "%{count} письмо"
|
15
|
+
few: "%{count} письма"
|
16
|
+
many: "%{count} писем"
|
17
|
+
other: "%{count} письма"
|
18
|
+
in: "в"
|
19
|
+
mailer:
|
20
|
+
one: "%{count}-й коллекции"
|
21
|
+
few: "%{count}-х коллекциях"
|
22
|
+
many: "%{count}-и коллекциях"
|
23
|
+
other: "%{count} коллекциях"
|
24
|
+
loading: "Письмо загружается..."
|
25
|
+
test_deliver:
|
26
|
+
no_delivery_method: "Настройте 'config.action_mailer.delivery_method', чтобы отправлять письма в среде '%{environment}'"
|
27
|
+
provide_email: "На какой адрес отправить?"
|
28
|
+
sent_notice: "Оправлено на %{address} через %{delivery_method}"
|
29
|
+
errors:
|
30
|
+
email_missing_format: "Формат отсутствует"
|
31
|
+
layouts:
|
32
|
+
simple_email_preview:
|
33
|
+
application:
|
34
|
+
head_title: "Письма - REP"
|
35
|
+
simple_email_preview:
|
36
|
+
emails:
|
37
|
+
index:
|
38
|
+
list_title: "Письма от приложения"
|
39
|
+
show:
|
40
|
+
breadcrumb_list: "Письма"
|
41
|
+
send_form:
|
42
|
+
send_are_you_sure: "Письмо будет по-настоящему отправлено. Продолжить?"
|
43
|
+
send_btn: "Отправить на"
|
44
|
+
send_recipient_placeholder: "Адрес эл. почты"
|
45
|
+
integrations:
|
46
|
+
cms:
|
47
|
+
errors:
|
48
|
+
site_missing: Сначала создайте сайт для %{locale} в CMS (отметьте опцию "Mirrored").
|
49
|
+
customize_cms_for_simple_email_preview:
|
50
|
+
edit_email: "Редактировать"
|
51
|
+
view_link: "Показать"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
SimpleEmailPreview::Engine.routes.draw do
|
2
|
+
controller :emails do
|
3
|
+
scope path: '(:email_locale)',
|
4
|
+
# This constraint resolves ambiguity with :preview_id, allowing locale to be optional
|
5
|
+
constraints: { email_locale: /#{I18n.available_locales.map(&Regexp.method(:escape)) * '|'}/ },
|
6
|
+
defaults: { email_locale: I18n.default_locale.to_s } do
|
7
|
+
get '/' => :index, as: :rep_emails
|
8
|
+
scope path: ':preview_id', constraints: { preview_id: /\w+-\w+/ } do
|
9
|
+
scope '(:part_type)',
|
10
|
+
constraints: { part_type: /html|plain|raw/ },
|
11
|
+
defaults: { part_type: 'html' } do
|
12
|
+
get '' => :show, as: :rep_email
|
13
|
+
get 'body' => :show_body, as: :rep_raw_email
|
14
|
+
end
|
15
|
+
post 'deliver' => :test_deliver, as: :rep_test_deliver
|
16
|
+
get 'attachments/:filename' => :show_attachment, as: :rep_raw_email_attachment
|
17
|
+
get 'headers' => :show_headers, as: :rep_email_headers
|
18
|
+
end
|
19
|
+
# alias rep_emails_url to its stable api name
|
20
|
+
get '/' => :index, as: :rep_root
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SimpleEmailPreview
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
desc 'creates an initializer file at config/initializers/simple_email_preview.rb and adds REP route to config/routes.rb'
|
5
|
+
source_root File.expand_path('../../..', __dir__)
|
6
|
+
|
7
|
+
def generate_initialization
|
8
|
+
copy_file 'config/initializers/simple_email_preview.rb', 'config/initializers/simple_email_preview.rb'
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate_routing
|
12
|
+
route "mount SimpleEmailPreview::Engine, at: 'emails'"
|
13
|
+
log "# You can access REP urls like this: simple_email_preview.rep_emails_url #=> '/emails'"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module SimpleEmailPreview
|
2
|
+
module Generators
|
3
|
+
class UpdatePreviewsGenerator < Rails::Generators::Base
|
4
|
+
desc 'creates app/mailer_previews/NEW_MAILER_preview.rb for each new mailer'
|
5
|
+
def generate_mailer_previews
|
6
|
+
previews_dir = 'app/mailer_previews/'
|
7
|
+
empty_directory previews_dir
|
8
|
+
Dir['app/mailers/*.rb'].each do |p|
|
9
|
+
basename = File.basename(p, '.rb')
|
10
|
+
if basename == 'application_mailer' || File.read(p) !~ /\bdef\s/
|
11
|
+
shell.say_status :skip, basename, :blue
|
12
|
+
next
|
13
|
+
end
|
14
|
+
preview_path = File.join(previews_dir, "#{basename}_preview.rb")
|
15
|
+
if File.exist?(preview_path)
|
16
|
+
shell.say_status :exist, preview_path, :blue
|
17
|
+
next
|
18
|
+
end
|
19
|
+
create_file preview_path, mailer_class_body(basename.camelize)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def mailer_class_body(mailer_class_name)
|
26
|
+
<<-RUBY
|
27
|
+
class #{mailer_class_name}Preview
|
28
|
+
#{(mailer_methods(mailer_class_name) * "\n\n").chomp}
|
29
|
+
end
|
30
|
+
RUBY
|
31
|
+
end
|
32
|
+
|
33
|
+
def mailer_methods(mailer_class_name)
|
34
|
+
mailer_class = mailer_class_name.constantize
|
35
|
+
::SimpleEmailPreview::Preview.mail_methods(mailer_class).map do |m|
|
36
|
+
<<-RUBY
|
37
|
+
def #{m}
|
38
|
+
#{mailer_class_name}.#{m} #{mailer_class.instance_method(m).parameters.map(&:second) * ', '}
|
39
|
+
end
|
40
|
+
RUBY
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
require 'simple_email_preview/engine'
|
3
|
+
require 'simple_email_preview/main_app_route_delegator'
|
4
|
+
require 'simple_email_preview/version'
|
5
|
+
require 'simple_email_preview/delivery_handler'
|
6
|
+
require 'simple_email_preview/view_hooks'
|
7
|
+
|
8
|
+
require 'sassc-rails'
|
9
|
+
require 'request_store'
|
10
|
+
require 'turbolinks'
|
11
|
+
require 'pathname'
|
12
|
+
require 'breadcrumbs_on_rails'
|
13
|
+
module SimpleEmailPreview
|
14
|
+
mattr_accessor :parent_controller
|
15
|
+
self.parent_controller = '::ApplicationController'
|
16
|
+
|
17
|
+
# preview class names
|
18
|
+
mattr_accessor :preview_classes
|
19
|
+
|
20
|
+
# UI locale
|
21
|
+
mattr_accessor :locale
|
22
|
+
|
23
|
+
# default email locale
|
24
|
+
mattr_accessor :default_email_locale
|
25
|
+
|
26
|
+
# send email button
|
27
|
+
mattr_accessor :enable_send_email
|
28
|
+
self.enable_send_email = true
|
29
|
+
|
30
|
+
# some easy visual settings
|
31
|
+
mattr_accessor :style
|
32
|
+
self.style = {
|
33
|
+
btn_active_class_modifier: 'rep--btn-active',
|
34
|
+
btn_danger_class: 'rep--btn rep--btn-danger',
|
35
|
+
btn_default_class: 'rep--btn rep--btn-default',
|
36
|
+
btn_group_class: 'rep--btn-group',
|
37
|
+
btn_primary_class: 'rep--btn rep--btn-primary',
|
38
|
+
form_control_class: 'rep--form-control',
|
39
|
+
list_group_class: 'rep--list-group',
|
40
|
+
list_group_item_class: 'rep--list-group__item',
|
41
|
+
row_class: 'rep--row'
|
42
|
+
}
|
43
|
+
|
44
|
+
@view_hooks = SimpleEmailPreview::ViewHooks.new
|
45
|
+
class << self
|
46
|
+
# @return [SimpleEmailPreview::ViewHooks]
|
47
|
+
attr_reader :view_hooks
|
48
|
+
|
49
|
+
def preview_classes=(classes)
|
50
|
+
@preview_classes = classes
|
51
|
+
SimpleEmailPreview::Preview.load_all(classes)
|
52
|
+
end
|
53
|
+
|
54
|
+
def find_preview_classes(dir)
|
55
|
+
return [] unless File.directory?(dir)
|
56
|
+
Dir.chdir(dir) { Dir['**/*_preview.rb'].map { |p| p.sub(/\.rb$/, '').camelize } }
|
57
|
+
end
|
58
|
+
|
59
|
+
def layout=(layout)
|
60
|
+
[::SimpleEmailPreview::ApplicationController, ::SimpleEmailPreview::EmailsController].each { |ctrl| ctrl.layout layout }
|
61
|
+
if layout && layout !~ %r{^simple_email_preview/}
|
62
|
+
# inline application routes if using an app layout
|
63
|
+
inline_main_app_routes!
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def run_before_render(mail, preview)
|
68
|
+
(defined?(@hooks) && @hooks[:before_render] || []).each do |block|
|
69
|
+
block.call(mail, preview)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def before_render(&block)
|
74
|
+
inline_main_app_routes!
|
75
|
+
((@hooks ||= {})[:before_render] ||= []) << block
|
76
|
+
end
|
77
|
+
|
78
|
+
def inline_main_app_routes!
|
79
|
+
unless ::SimpleEmailPreview::EmailsController.instance_variable_get(:@inlined_routes)
|
80
|
+
::SimpleEmailPreview::EmailsController.helper ::SimpleEmailPreview::MainAppRouteDelegator
|
81
|
+
::SimpleEmailPreview::EmailsController.instance_variable_set(:@inlined_routes, true)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def setup
|
86
|
+
yield self
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# = Editing settings
|
91
|
+
# edit link is rendered inside an iframe, so these options are provided for simple styling
|
92
|
+
mattr_accessor :edit_link_text
|
93
|
+
self.edit_link_text = '✎ Edit Text'
|
94
|
+
mattr_accessor :edit_link_style
|
95
|
+
self.edit_link_style = <<-CSS.strip.gsub(/\n+/m, ' ')
|
96
|
+
display: block;
|
97
|
+
font-family: Monaco, Helvetica, sans-serif;
|
98
|
+
color: #7a4b8a;
|
99
|
+
border: 2px dashed #7a4b8a;
|
100
|
+
font-size: 20px;
|
101
|
+
padding: 8px 12px;
|
102
|
+
margin-top: 0.6em;
|
103
|
+
margin-bottom: 0.6em;
|
104
|
+
CSS
|
105
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ::SimpleEmailPreview
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
isolate_namespace SimpleEmailPreview
|
4
|
+
load_generators
|
5
|
+
|
6
|
+
initializer 'simple_email_preview.setup_assets' do
|
7
|
+
SimpleEmailPreview::Engine.config.assets.precompile += %w[
|
8
|
+
simple_email_preview/application.js
|
9
|
+
simple_email_preview/application.css
|
10
|
+
simple_email_preview/favicon.png
|
11
|
+
]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module SimpleEmailPreview::MainAppRouteDelegator
|
2
|
+
# delegate url helpers to main_app
|
3
|
+
def method_missing(method, *args, &block)
|
4
|
+
if main_app_route_method?(method)
|
5
|
+
main_app.send(method, *args)
|
6
|
+
else
|
7
|
+
super
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def respond_to?(method)
|
12
|
+
super || main_app_route_method?(method)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def main_app_route_method?(method)
|
18
|
+
method.to_s =~ /_(?:path|url)$/ && main_app.respond_to?(method)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module SimpleEmailPreview
|
2
|
+
# Add hooks before, after, or replacing a UI element
|
3
|
+
class ViewHooks
|
4
|
+
args = {
|
5
|
+
index: %i[list previews].freeze,
|
6
|
+
show: %i[mail preview].freeze
|
7
|
+
}
|
8
|
+
# All valid hooks and their argument names
|
9
|
+
SCHEMA = {
|
10
|
+
list: args[:index],
|
11
|
+
breadcrumb: args[:show],
|
12
|
+
breadcrumb_content: args[:show],
|
13
|
+
headers_and_nav: args[:show],
|
14
|
+
headers: args[:show],
|
15
|
+
headers_content: args[:show],
|
16
|
+
nav: args[:show],
|
17
|
+
nav_i18n: args[:show],
|
18
|
+
nav_format: args[:show],
|
19
|
+
nav_send: args[:show],
|
20
|
+
email_body: args[:show]
|
21
|
+
}.freeze
|
22
|
+
POSITIONS = %i[before replace after].freeze
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@hooks = Hooks.new
|
26
|
+
end
|
27
|
+
|
28
|
+
# @param [Symbol] id
|
29
|
+
# @param [:before, :replace, :after] pos
|
30
|
+
# @example
|
31
|
+
# view_hooks.add_render :list, :before, partial: 'shared/hello'
|
32
|
+
def add_render(id, pos, *render_args)
|
33
|
+
render_args = render_args.dup
|
34
|
+
render_opts = render_args.extract_options!.dup
|
35
|
+
add id, pos do |locals = {}|
|
36
|
+
render *render_args, render_opts.merge(
|
37
|
+
locals: (render_opts[:locals] || {}).merge(locals)
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# @param [Symbol] id
|
43
|
+
# @param [:before, :replace, :after] pos
|
44
|
+
# @example
|
45
|
+
# view_hooks.add :headers_content, :after do |mail:, preview:|
|
46
|
+
# raw "<b>ID</b>: #{h mail.header['X-APP-EMAIL-ID']}"
|
47
|
+
# end
|
48
|
+
def add(id, pos, &block)
|
49
|
+
@hooks[id][pos] << block
|
50
|
+
end
|
51
|
+
|
52
|
+
def render(hook_id, locals, template)
|
53
|
+
at = @hooks[hook_id]
|
54
|
+
validate_locals! hook_id, locals
|
55
|
+
parts = [
|
56
|
+
render_providers(at[:before], locals, template),
|
57
|
+
if at[:replace].present?
|
58
|
+
render_providers(at[:replace], locals, template)
|
59
|
+
else
|
60
|
+
template.capture { yield(locals) }
|
61
|
+
end,
|
62
|
+
render_providers(at[:after], locals, template)
|
63
|
+
]
|
64
|
+
template.safe_join(parts, '')
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def render_providers(providers, locals, template)
|
70
|
+
template.safe_join providers.map { |provider| template.instance_exec(locals, &provider) }, ''
|
71
|
+
end
|
72
|
+
|
73
|
+
def validate_locals!(hook_id, locals)
|
74
|
+
if locals.keys.sort != SCHEMA[hook_id].sort
|
75
|
+
raise ArgumentError, "Invalid arguments #{locals.keys}. Valid: #{SCHEMA[hook_id]}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class Hooks < DelegateClass(Hash)
|
80
|
+
def initialize
|
81
|
+
super Hash.new { |h, id|
|
82
|
+
validate_id! id
|
83
|
+
h[id] = Hash.new { |hh, pos|
|
84
|
+
validate_pos! pos
|
85
|
+
hh[pos] = []
|
86
|
+
}
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def validate_id!(id)
|
93
|
+
raise ArgumentError, 'hook id must be a symbol' unless Symbol === id
|
94
|
+
raise ArgumentError, "Invalid hook #{id}. Valid: #{SCHEMA.keys * ', '}." unless SCHEMA.key?(id)
|
95
|
+
end
|
96
|
+
|
97
|
+
def validate_pos!(pos)
|
98
|
+
raise ArgumentError, "Invalid position #{pos}. Valid: #{POSITIONS * ', '}" unless POSITIONS.include?(pos)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
metadata
ADDED
@@ -0,0 +1,231 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simple_email_preview
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- HUONGNHDH
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: breadcrumbs_on_rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.0.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.0.1
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rails
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '4.2'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '4.2'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: request_store
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.0.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.0.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: sassc-rails
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.3.0
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.3.0
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: turbolinks
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 5.0.1
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 5.0.1
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: capybara
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 3.8.2
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 3.8.2
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: i18n-tasks
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.9.25
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.9.25
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: poltergeist
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 1.0.0
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 1.0.0
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: puma
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 3.12.0
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 3.12.0
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: rspec-rails
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 3.8.0
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 3.8.0
|
159
|
+
description: A Rails Engine to preview plain text and html email in your browser
|
160
|
+
email: huong.nhdh@gmail.com
|
161
|
+
executables: []
|
162
|
+
extensions: []
|
163
|
+
extra_rdoc_files: []
|
164
|
+
files:
|
165
|
+
- Gemfile
|
166
|
+
- MIT-LICENSE
|
167
|
+
- README.md
|
168
|
+
- Rakefile
|
169
|
+
- app/assets/images/simple_email_preview/favicon.png
|
170
|
+
- app/assets/javascripts/simple_email_preview/application.js
|
171
|
+
- app/assets/stylesheets/simple_email_preview/_bootstrap3.sass
|
172
|
+
- app/assets/stylesheets/simple_email_preview/_default.sass
|
173
|
+
- app/assets/stylesheets/simple_email_preview/application.scss
|
174
|
+
- app/controllers/simple_email_preview/application_controller.rb
|
175
|
+
- app/controllers/simple_email_preview/emails_controller.rb
|
176
|
+
- app/helpers/simple_email_preview/emails_helper.rb
|
177
|
+
- app/models/simple_email_preview/preview.rb
|
178
|
+
- app/presenters/simple_email_preview/preview_list_presenter.rb
|
179
|
+
- app/views/layouts/simple_email_preview/_flash_notices.html.erb
|
180
|
+
- app/views/layouts/simple_email_preview/application.html.erb
|
181
|
+
- app/views/layouts/simple_email_preview/email.html.erb
|
182
|
+
- app/views/simple_email_preview/emails/_email_iframe.html.erb
|
183
|
+
- app/views/simple_email_preview/emails/_format_nav.html.erb
|
184
|
+
- app/views/simple_email_preview/emails/_headers.html.erb
|
185
|
+
- app/views/simple_email_preview/emails/_headers_and_nav.html.erb
|
186
|
+
- app/views/simple_email_preview/emails/_i18n_nav.html.erb
|
187
|
+
- app/views/simple_email_preview/emails/_nav.html.erb
|
188
|
+
- app/views/simple_email_preview/emails/_send_form.html.erb
|
189
|
+
- app/views/simple_email_preview/emails/index.html.erb
|
190
|
+
- app/views/simple_email_preview/emails/show.html.erb
|
191
|
+
- config/i18n-tasks.yml
|
192
|
+
- config/initializers/simple_email_preview.rb
|
193
|
+
- config/locales/de.yml
|
194
|
+
- config/locales/en.yml
|
195
|
+
- config/locales/es.yml
|
196
|
+
- config/locales/ja.yml
|
197
|
+
- config/locales/ru.yml
|
198
|
+
- config/routes.rb
|
199
|
+
- lib/generators/simple_email_preview/install_generator.rb
|
200
|
+
- lib/generators/simple_email_preview/update_previews_generator.rb
|
201
|
+
- lib/simple_email_preview.rb
|
202
|
+
- lib/simple_email_preview/delivery_handler.rb
|
203
|
+
- lib/simple_email_preview/engine.rb
|
204
|
+
- lib/simple_email_preview/main_app_route_delegator.rb
|
205
|
+
- lib/simple_email_preview/version.rb
|
206
|
+
- lib/simple_email_preview/view_hooks.rb
|
207
|
+
homepage: https://github.com/huongnhdh/simple_email_preview
|
208
|
+
licenses:
|
209
|
+
- MIT
|
210
|
+
metadata:
|
211
|
+
issue_tracker: https://github.com/huongnhdh/simple_email_preview/issues
|
212
|
+
post_install_message:
|
213
|
+
rdoc_options: []
|
214
|
+
require_paths:
|
215
|
+
- lib
|
216
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - ">="
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: '0'
|
221
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
|
+
requirements:
|
223
|
+
- - ">="
|
224
|
+
- !ruby/object:Gem::Version
|
225
|
+
version: '0'
|
226
|
+
requirements: []
|
227
|
+
rubygems_version: 3.1.4
|
228
|
+
signing_key:
|
229
|
+
specification_version: 4
|
230
|
+
summary: Simple preview emails in browser (rails engine)
|
231
|
+
test_files: []
|