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.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +7 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +162 -0
  5. data/Rakefile +62 -0
  6. data/app/assets/images/simple_email_preview/favicon.png +0 -0
  7. data/app/assets/javascripts/simple_email_preview/application.js +1 -0
  8. data/app/assets/stylesheets/simple_email_preview/_bootstrap3.sass +68 -0
  9. data/app/assets/stylesheets/simple_email_preview/_default.sass +230 -0
  10. data/app/assets/stylesheets/simple_email_preview/application.scss +10 -0
  11. data/app/controllers/simple_email_preview/application_controller.rb +19 -0
  12. data/app/controllers/simple_email_preview/emails_controller.rb +194 -0
  13. data/app/helpers/simple_email_preview/emails_helper.rb +85 -0
  14. data/app/models/simple_email_preview/preview.rb +86 -0
  15. data/app/presenters/simple_email_preview/preview_list_presenter.rb +38 -0
  16. data/app/views/layouts/simple_email_preview/_flash_notices.html.erb +7 -0
  17. data/app/views/layouts/simple_email_preview/application.html.erb +16 -0
  18. data/app/views/layouts/simple_email_preview/email.html.erb +30 -0
  19. data/app/views/simple_email_preview/emails/_email_iframe.html.erb +88 -0
  20. data/app/views/simple_email_preview/emails/_format_nav.html.erb +4 -0
  21. data/app/views/simple_email_preview/emails/_headers.html.erb +10 -0
  22. data/app/views/simple_email_preview/emails/_headers_and_nav.html.erb +12 -0
  23. data/app/views/simple_email_preview/emails/_i18n_nav.html.erb +3 -0
  24. data/app/views/simple_email_preview/emails/_nav.html.erb +18 -0
  25. data/app/views/simple_email_preview/emails/_send_form.html.erb +11 -0
  26. data/app/views/simple_email_preview/emails/index.html.erb +36 -0
  27. data/app/views/simple_email_preview/emails/show.html.erb +23 -0
  28. data/config/i18n-tasks.yml +10 -0
  29. data/config/initializers/simple_email_preview.rb +14 -0
  30. data/config/locales/de.yml +47 -0
  31. data/config/locales/en.yml +47 -0
  32. data/config/locales/es.yml +47 -0
  33. data/config/locales/ja.yml +47 -0
  34. data/config/locales/ru.yml +51 -0
  35. data/config/routes.rb +23 -0
  36. data/lib/generators/simple_email_preview/install_generator.rb +17 -0
  37. data/lib/generators/simple_email_preview/update_previews_generator.rb +45 -0
  38. data/lib/simple_email_preview.rb +105 -0
  39. data/lib/simple_email_preview/delivery_handler.rb +15 -0
  40. data/lib/simple_email_preview/engine.rb +14 -0
  41. data/lib/simple_email_preview/main_app_route_delegator.rb +20 -0
  42. data/lib/simple_email_preview/version.rb +3 -0
  43. data/lib/simple_email_preview/view_hooks.rb +102 -0
  44. 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: "Показать"
@@ -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,15 @@
1
+ module SimpleEmailPreview
2
+ class DeliveryHandler
3
+ def initialize(mail, headers)
4
+ @mail = mail
5
+ @mail.headers(headers)
6
+ @mail.delivery_handler = self
7
+ end
8
+
9
+ attr_accessor :mail
10
+
11
+ def deliver_mail(_mail)
12
+ yield
13
+ end
14
+ end
15
+ 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,3 @@
1
+ module SimpleEmailPreview
2
+ VERSION = '1.0.0'.freeze
3
+ 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: []