letter_opener_web 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +27 -0
  5. data/.travis.yml +21 -4
  6. data/CHANGELOG.md +7 -0
  7. data/Gemfile +3 -7
  8. data/README.md +15 -4
  9. data/Rakefile +6 -35
  10. data/app/assets/javascripts/letter_opener_web/application.js +1 -1
  11. data/app/controllers/letter_opener_web/application_controller.rb +2 -0
  12. data/app/controllers/letter_opener_web/letters_controller.rb +19 -21
  13. data/app/models/letter_opener_web/letter.rb +27 -23
  14. data/app/views/layouts/letter_opener_web/{application.html.erb → letters.html.erb} +0 -2
  15. data/app/views/letter_opener_web/letters/index.html.erb +8 -8
  16. data/{script → bin}/rails +4 -1
  17. data/bin/setup +6 -0
  18. data/config/routes.rb +2 -0
  19. data/letter_opener_web.gemspec +13 -11
  20. data/lib/letter_opener_web.rb +20 -1
  21. data/lib/letter_opener_web/delivery_method.rb +5 -3
  22. data/lib/letter_opener_web/engine.rb +12 -7
  23. data/lib/letter_opener_web/version.rb +3 -1
  24. data/script/pre-push +2 -0
  25. data/spec/controllers/letter_opener_web/letters_controller_spec.rb +50 -32
  26. data/spec/dummy/Rakefile +8 -0
  27. data/spec/dummy/app/assets/config/manifest.js +5 -0
  28. data/spec/{internal/public/favicon.ico → dummy/app/assets/images/.keep} +0 -0
  29. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  30. data/spec/dummy/app/assets/stylesheets/application.css +31 -0
  31. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  32. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  33. data/spec/dummy/app/controllers/home_controller.rb +10 -0
  34. data/spec/dummy/app/helpers/application_helper.rb +4 -0
  35. data/spec/dummy/app/mailers/application_mailer.rb +6 -0
  36. data/spec/dummy/app/mailers/contact_mailer.rb +14 -0
  37. data/spec/dummy/app/views/contact_mailer/new_message.html.erb +21 -0
  38. data/spec/dummy/app/views/contact_mailer/new_message.text.erb +3 -0
  39. data/spec/dummy/app/views/home/index.html.erb +50 -0
  40. data/spec/dummy/app/views/layouts/application.html.erb +18 -0
  41. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  42. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  43. data/spec/dummy/bin/bundle +5 -0
  44. data/spec/dummy/bin/rails +6 -0
  45. data/spec/dummy/bin/rake +6 -0
  46. data/spec/dummy/bin/setup +36 -0
  47. data/spec/dummy/bin/update +31 -0
  48. data/spec/dummy/config.ru +7 -0
  49. data/spec/dummy/config/application.rb +23 -0
  50. data/spec/dummy/config/boot.rb +7 -0
  51. data/spec/dummy/config/environment.rb +7 -0
  52. data/spec/dummy/config/environments/development.rb +40 -0
  53. data/spec/dummy/config/environments/production.rb +85 -0
  54. data/spec/dummy/config/environments/test.rb +37 -0
  55. data/spec/dummy/config/initializers/application_controller_renderer.rb +7 -0
  56. data/spec/dummy/config/initializers/assets.rb +13 -0
  57. data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
  58. data/spec/dummy/config/initializers/cookies_serializer.rb +7 -0
  59. data/spec/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  60. data/spec/dummy/config/initializers/inflections.rb +17 -0
  61. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  62. data/spec/dummy/config/initializers/new_framework_defaults.rb +10 -0
  63. data/spec/dummy/config/initializers/session_store.rb +5 -0
  64. data/spec/dummy/config/initializers/wrap_parameters.rb +16 -0
  65. data/spec/dummy/config/locales/en.yml +23 -0
  66. data/spec/dummy/config/puma.rb +49 -0
  67. data/spec/dummy/config/routes.rb +8 -0
  68. data/spec/dummy/config/secrets.yml +22 -0
  69. data/spec/dummy/config/spring.rb +8 -0
  70. data/spec/dummy/lib/assets/.keep +0 -0
  71. data/spec/dummy/public/404.html +67 -0
  72. data/spec/dummy/public/422.html +67 -0
  73. data/spec/dummy/public/500.html +66 -0
  74. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  75. data/spec/dummy/public/apple-touch-icon.png +0 -0
  76. data/spec/dummy/public/favicon.ico +0 -0
  77. data/spec/letter_opener_web_spec.rb +44 -0
  78. data/spec/models/letter_opener_web/letter_spec.rb +23 -15
  79. data/spec/rails_helper.rb +8 -0
  80. data/spec/spec_helper.rb +2 -16
  81. metadata +142 -30
  82. data/Gemfile.lock +0 -167
  83. data/Guardfile +0 -14
  84. data/lib/tasks/letter_opener_web_tasks.rake +0 -4
  85. data/spec/internal/config/database.yml +0 -3
  86. data/spec/internal/config/routes.rb +0 -7
  87. data/spec/internal/db/schema.rb +0 -3
  88. data/spec/internal/log/.gitignore +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5bbf11cbd296887063a7375ac18b4d9b42f5eac5
4
- data.tar.gz: acf61512d9bce3f98624705042ab254334cb1567
2
+ SHA256:
3
+ metadata.gz: 5a52b402271aaa9c2010cfd193fd3858e186328f0c13b4fafb3f449ed768eb62
4
+ data.tar.gz: ad574fc2698517185a7b43a3dc02a431a12edf895f6bceb7b012d0cf61923f3b
5
5
  SHA512:
6
- metadata.gz: d1b1e7c448ec52d8f57514e38019067859ae0ad992f18547d52f4c4223fbc793d436bfee8b6f2dd4ca11f684ecddbab57d2150bf082ff1da80337e04c0800acc
7
- data.tar.gz: 29d25a8263fc9d300029ad74fd880ab885d3f6335633821c8a697a48483f0a73665f47201fb6009aa3772f89357bada89f0199a0e4c9dbecff9932857153e37f
6
+ metadata.gz: a1c1eccaa4ac748e90f57069697724a9d5b9f4482f29c5e5cf1766407dc32ac85161fca9f9cce89db063b73b84b9f7ece72538eb6a78adf6f34bc02ab250a52d
7
+ data.tar.gz: 272edf9e6edf6912074367770a454dcc824ab1cec0eabba3b464b83eb319f744dbd6e42d0b77d5c4ef1ccc812c6df692ce8bb95d45f53b65d9e70469fb1bacb5
data/.gitignore CHANGED
@@ -11,6 +11,9 @@ lib/bundler/man
11
11
  pkg
12
12
  rdoc
13
13
  spec/reports
14
+ spec/dummy/log/
14
15
  test/tmp
15
16
  test/version_tmp
16
17
  tmp
18
+ Gemfile.lock
19
+
data/.rspec CHANGED
@@ -1 +1,4 @@
1
+ --order rand
1
2
  --color
3
+ --format progress
4
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,27 @@
1
+ ---
2
+ AllCops:
3
+ TargetRubyVersion: 2.3
4
+ Exclude:
5
+ - "spec/dummy/bin/**/*"
6
+ - "tmp/**/*"
7
+ - "vendor/**/*"
8
+
9
+ # not available in older versions of Ruby
10
+ Layout/IndentHeredoc:
11
+ Enabled: false
12
+
13
+ Style/Documentation:
14
+ Enabled: false
15
+
16
+ Style/ClassAndModuleChildren:
17
+ EnforcedStyle: nested
18
+
19
+ Style/SingleLineBlockParams:
20
+ Enabled: false
21
+
22
+ Metrics/BlockLength:
23
+ Exclude:
24
+ - spec/**/*_spec.rb
25
+
26
+ Metrics/LineLength:
27
+ Max: 120
data/.travis.yml CHANGED
@@ -1,7 +1,24 @@
1
+ sudo: false
1
2
  language: ruby
3
+
2
4
  rvm:
3
- - 2.2.0
4
- - 2.1.5
5
- - 2.0.0
6
- sudo: false
5
+ - 2.3.3
6
+ - 2.2.6
7
+ - 2.1.10
8
+
7
9
  cache: bundler
10
+
11
+ before_install:
12
+ - gem update --system
13
+
14
+ notifications:
15
+ email: false
16
+
17
+ deploy:
18
+ provider: rubygems
19
+ gem: letter_opener_web
20
+ api_key:
21
+ secure: Rv1IgeIhnfIV9NVr3iPwb2UCXe0UEtuZHfgkGruu3yvfoSGmQQ0xnc45ZhOH8ANl6tjzYNuilSDYbhz3fWOmniHsnzLGbFbccz/CWHmldUpPgVnKQ0d0Bm2EeNuVpmHwdnG7KEqMC0x1gxFYks62BGpx4C/2Kh5nWbvvPxN8X0U=
22
+ on:
23
+ tags: true
24
+ repo: fgrehm/letter_opener_web
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [1.3.2](https://github.com/fgrehm/letter_opener_web/compare/v1.3.1...v1.3.2) (Jan 14, 2018)
2
+
3
+ - Disable Launchy with ENV to avoid redefining the whole delivery method [#73](https://github.com/fgrehm/letter_opener_web/pull/73)
4
+ - Fix new Rubocop warnings [#72](https://github.com/fgrehm/letter_opener_web/pull/72)
5
+ - Hover state fixed to only highlight `tbody>tr` [#70](https://github.com/fgrehm/letter_opener_web/pull/70)
6
+ - Use `ActiveSupport.on_load` to make sure we don't have load order issues [#66](https://github.com/fgrehm/letter_opener_web/pull/66)
7
+
1
8
  ## [1.3.1](https://github.com/fgrehm/letter_opener_web/compare/v1.3.0...v1.3.1) (Feb 04, 2017)
2
9
 
3
10
  - Remove warnings about unused variables [#45](https://github.com/fgrehm/letter_opener_web/pull/45)
data/Gemfile CHANGED
@@ -1,12 +1,8 @@
1
- source "http://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'http://rubygems.org'
2
4
 
3
5
  # Declare your gem's dependencies in letter_opener_web.gemspec.
4
6
  # Bundler will treat runtime dependencies like base dependencies, and
5
7
  # development dependencies will be added by default to the :development group.
6
8
  gemspec
7
-
8
- group :development do
9
- gem 'rb-inotify'
10
- gem 'guard'
11
- gem 'guard-rspec'
12
- end
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # letter_opener_web
2
2
 
3
- [![Build Status](https://travis-ci.org/fgrehm/letter_opener_web.png?branch=master)](https://travis-ci.org/fgrehm/letter_opener_web) [![Gem Version](https://badge.fury.io/rb/letter_opener_web.png)](http://badge.fury.io/rb/letter_opener_web) [![Code Climate](https://codeclimate.com/github/fgrehm/letter_opener_web.png)](https://codeclimate.com/github/fgrehm/letter_opener_web) [![Gittip](http://img.shields.io/gittip/fgrehm.svg)](https://www.gittip.com/fgrehm/) [![Gitter chat](https://badges.gitter.im/fgrehm/letter_opener_web.png)](https://gitter.im/fgrehm/letter_opener_web)
3
+ [![Build Status](https://travis-ci.org/fgrehm/letter_opener_web.png?branch=master)](https://travis-ci.org/fgrehm/letter_opener_web) [![Gem Version](https://badge.fury.io/rb/letter_opener_web.png)](http://badge.fury.io/rb/letter_opener_web) [![Code Climate](https://codeclimate.com/github/fgrehm/letter_opener_web.png)](https://codeclimate.com/github/fgrehm/letter_opener_web) [![Gitter chat](https://badges.gitter.im/fgrehm/letter_opener_web.png)](https://gitter.im/fgrehm/letter_opener_web)
4
4
 
5
5
  Gives [letter_opener](https://github.com/ryanb/letter_opener) an interface for
6
6
  browsing sent emails.
@@ -12,7 +12,9 @@ Check out http://letter-opener-web.herokuapp.com to see it in action.
12
12
  First add the gem to your development environment and run the `bundle` command to install it.
13
13
 
14
14
  ```ruby
15
- gem 'letter_opener_web', '~> 1.2.0', :group => :development
15
+ group :development do
16
+ gem 'letter_opener_web'
17
+ end
16
18
  ```
17
19
 
18
20
  ## Usage
@@ -52,6 +54,15 @@ config.action_mailer.delivery_method = :letter_opener_web
52
54
  config.action_mailer.delivery_method = ENV['USER'] == 'vagrant' ? :letter_opener_web : :letter_opener
53
55
  ```
54
56
 
57
+ If you're using `:letter_opener_web` as your delivery method, you can change the location of the letters by adding the
58
+ following to an initializer (or in development.rb):
59
+
60
+ ```ruby
61
+ LetterOpenerWeb.configure do |config|
62
+ config.letters_location = Rails.root.join('your', 'new', 'path')
63
+ end
64
+ ```
65
+
55
66
  ## Usage on Heroku
56
67
 
57
68
  Some people use this gem on staging environments on Heroku and to set that up
@@ -61,7 +72,7 @@ the route for all environments on your `routes.rb`.
61
72
  In order words, your `Gemfile` will have:
62
73
 
63
74
  ```ruby
64
- gem 'letter_opener_web', '~> 1.2.0'
75
+ gem 'letter_opener_web'
65
76
  ```
66
77
 
67
78
  And your `routes.rb`:
@@ -85,7 +96,7 @@ ideas on [this pull request](https://github.com/ryanb/letter_opener/pull/12).
85
96
 
86
97
  ## Contributing
87
98
 
88
- 1. Fork it
99
+ 1. Fork it and run `bin/setup`
89
100
  2. Create your feature branch (`git checkout -b my-new-feature`)
90
101
  3. Commit your changes (`git commit -am 'Add some feature'`)
91
102
  4. Push to the branch (`git push origin my-new-feature`)
data/Rakefile CHANGED
@@ -1,39 +1,10 @@
1
1
  #!/usr/bin/env rake
2
-
3
- desc 'Print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.'
4
- task :routes do
5
- require 'combustion'
6
- Bundler.require :default, :development
7
-
8
- Combustion.initialize! :action_controller, :action_view, :sprockets, :action_mailer
9
-
10
- all_routes = LetterOpenerWeb::Engine.routes.routes
11
-
12
- require 'rails/application/route_inspector'
13
- inspector = Rails::Application::RouteInspector.new
14
- puts inspector.format(all_routes, ENV['CONTROLLER']).join "\n"
15
- end
16
-
17
- begin
18
- require 'rdoc/task'
19
- rescue LoadError
20
- require 'rdoc/rdoc'
21
- require 'rake/rdoctask'
22
- RDoc::Task = Rake::RDocTask
23
- end
24
-
25
- RDoc::Task.new(:rdoc) do |rdoc|
26
- rdoc.rdoc_dir = 'rdoc'
27
- rdoc.title = 'LetterOpenerWeb'
28
- rdoc.options << '--line-numbers'
29
- rdoc.rdoc_files.include('README.rdoc')
30
- rdoc.rdoc_files.include('lib/**/*.rb')
31
- end
2
+ # frozen_string_literal: true
32
3
 
33
4
  require 'bundler/gem_tasks'
5
+ require 'rspec/core/rake_task'
6
+ require 'rubocop/rake_task'
34
7
 
35
- begin
36
- require 'rspec/core/rake_task'
37
- RSpec::Core::RakeTask.new(:spec)
38
- task :default => :spec
39
- rescue LoadError; end
8
+ RuboCop::RakeTask.new
9
+ RSpec::Core::RakeTask.new(:spec)
10
+ task default: %i[spec rubocop]
@@ -10,7 +10,7 @@ jQuery(function($) {
10
10
  var favicon = new Favcount($('link[rel="icon"]').attr('href'));
11
11
  update_favicon(favicon);
12
12
 
13
- $('.letter-opener').on('click', 'tr', function() {
13
+ $('.letter-opener').on('click', 'tbody > tr', function() {
14
14
  var $this = $(this);
15
15
  $('iframe').attr('src', $this.find('a').attr('href'));
16
16
  $this.parent().find('.active').removeClass('active');
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LetterOpenerWeb
2
4
  class ApplicationController < ActionController::Base
3
5
  end
@@ -1,55 +1,53 @@
1
- require_dependency "letter_opener_web/application_controller"
1
+ # frozen_string_literal: true
2
2
 
3
3
  module LetterOpenerWeb
4
4
  class LettersController < ApplicationController
5
- before_action :check_style, :only => [:show]
6
- before_action :load_letter, :only => [:show, :attachment, :destroy]
5
+ before_action :check_style, only: [:show]
6
+ before_action :load_letter, only: %i[show attachment destroy]
7
7
 
8
8
  def index
9
9
  @letters = Letter.search
10
10
  end
11
11
 
12
12
  def show
13
- text = @letter.send("#{params[:style]}_text").
14
- gsub(/"plain\.html"/, "\"#{LetterOpenerWeb.railtie_routes_url_helpers.letter_path(:id => @letter.id, :style => 'plain')}\"").
15
- gsub(/"rich\.html"/, "\"#{LetterOpenerWeb.railtie_routes_url_helpers.letter_path(:id => @letter.id, :style => 'rich')}\"")
13
+ text = @letter.send("#{params[:style]}_text")
14
+ .gsub(/"plain\.html"/, "\"#{routes.letter_path(id: @letter.id, style: 'plain')}\"")
15
+ .gsub(/"rich\.html"/, "\"#{routes.letter_path(id: @letter.id, style: 'rich')}\"")
16
16
 
17
- render :html => text.html_safe
17
+ render html: text.html_safe
18
18
  end
19
19
 
20
20
  def attachment
21
- @letter = Letter.find(params[:id])
22
21
  filename = "#{params[:file]}.#{params[:format]}"
22
+ file = @letter.attachments[filename]
23
23
 
24
- if file = @letter.attachments[filename]
25
- send_file(file, :filename => filename, :disposition => 'inline')
26
- else
27
- render :plain => 'Attachment not found!', :status => 404
28
- end
24
+ return render plain: 'Attachment not found!', status: 404 unless file.present?
25
+ send_file(file, filename: filename, disposition: 'inline')
29
26
  end
30
27
 
31
28
  def clear
32
29
  Letter.destroy_all
33
- redirect_to LetterOpenerWeb.railtie_routes_url_helpers.letters_path
30
+ redirect_to routes.letters_path
34
31
  end
35
32
 
36
33
  def destroy
37
- @letter = Letter.find(params[:id])
38
34
  @letter.delete
39
- redirect_to LetterOpenerWeb.railtie_routes_url_helpers.letters_path
35
+ redirect_to routes.letters_path
40
36
  end
41
37
 
42
38
  private
43
39
 
44
40
  def check_style
45
- params[:style] = 'rich' unless ['plain', 'rich'].include? params[:style]
41
+ params[:style] = 'rich' unless %w[plain rich].include?(params[:style])
46
42
  end
47
43
 
48
44
  def load_letter
49
- if params[:id]
50
- @letter = Letter.find(params[:id])
51
- head :not_found unless @letter.exists?
52
- end
45
+ @letter = Letter.find(params[:id])
46
+ head :not_found unless @letter.exists?
47
+ end
48
+
49
+ def routes
50
+ LetterOpenerWeb.railtie_routes_url_helpers
53
51
  end
54
52
  end
55
53
  end
@@ -1,24 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LetterOpenerWeb
2
4
  class Letter
3
- cattr_accessor :letters_location do
4
- Rails.root.join("tmp", "letter_opener")
5
+ attr_reader :id, :sent_at
6
+
7
+ def self.letters_location
8
+ @letters_location ||= LetterOpenerWeb.config.letters_location
5
9
  end
6
10
 
7
- attr_reader :id, :sent_at
11
+ def self.letters_location=(directory)
12
+ LetterOpenerWeb.configure { |config| config.letters_location = directory }
13
+ @letters_location = nil
14
+ end
8
15
 
9
16
  def self.search
10
- letters = Dir.glob("#{letters_location}/*").map do |folder|
11
- new :id => File.basename(folder), :sent_at => File.mtime(folder)
17
+ letters = Dir.glob("#{LetterOpenerWeb.config.letters_location}/*").map do |folder|
18
+ new(id: File.basename(folder), sent_at: File.mtime(folder))
12
19
  end
13
20
  letters.sort_by(&:sent_at).reverse
14
21
  end
15
22
 
16
23
  def self.find(id)
17
- new :id => id
24
+ new(id: id)
18
25
  end
19
26
 
20
27
  def self.destroy_all
21
- FileUtils.rm_rf(letters_location)
28
+ FileUtils.rm_rf(LetterOpenerWeb.config.letters_location)
22
29
  end
23
30
 
24
31
  def initialize(params)
@@ -27,11 +34,11 @@ module LetterOpenerWeb
27
34
  end
28
35
 
29
36
  def plain_text
30
- @plain_text ||= adjust_link_targets read_file(:plain)
37
+ @plain_text ||= adjust_link_targets(read_file(:plain))
31
38
  end
32
39
 
33
40
  def rich_text
34
- @rich_text ||= adjust_link_targets read_file(:rich)
41
+ @rich_text ||= adjust_link_targets(read_file(:rich))
35
42
  end
36
43
 
37
44
  def to_param
@@ -39,9 +46,7 @@ module LetterOpenerWeb
39
46
  end
40
47
 
41
48
  def default_style
42
- style_exists?('rich') ?
43
- 'rich' :
44
- 'plain'
49
+ style_exists?('rich') ? 'rich' : 'plain'
45
50
  end
46
51
 
47
52
  def attachments
@@ -51,17 +56,17 @@ module LetterOpenerWeb
51
56
  end
52
57
 
53
58
  def delete
54
- FileUtils.rm_rf("#{letters_location}/#{self.id}")
59
+ FileUtils.rm_rf("#{LetterOpenerWeb.config.letters_location}/#{id}")
55
60
  end
56
61
 
57
62
  def exists?
58
- File.exists?(base_dir)
63
+ File.exist?(base_dir)
59
64
  end
60
65
 
61
66
  private
62
67
 
63
68
  def base_dir
64
- "#{letters_location}/#{id}"
69
+ "#{LetterOpenerWeb.config.letters_location}/#{id}"
65
70
  end
66
71
 
67
72
  def read_file(style)
@@ -69,7 +74,7 @@ module LetterOpenerWeb
69
74
  end
70
75
 
71
76
  def style_exists?(style)
72
- File.exists?("#{base_dir}/#{style}.html")
77
+ File.exist?("#{base_dir}/#{style}.html")
73
78
  end
74
79
 
75
80
  def adjust_link_targets(contents)
@@ -77,14 +82,13 @@ module LetterOpenerWeb
77
82
  # "complete" (as in they have the whole <html> structure) and letter_opener
78
83
  # prepends some information about the mail being sent, making REXML
79
84
  # complain about it
80
- contents.scan(/<a\s[^>]+>(?:.|\s)*?<\/a>/).each do |link|
85
+ contents.scan(%r{<a\s[^>]+>(?:.|\s)*?</a>}).each do |link|
81
86
  fixed_link = fix_link_html(link)
82
87
  xml = REXML::Document.new(fixed_link).root
83
- unless xml.attributes['href'] =~ /(plain|rich).html/
84
- xml.attributes['target'] = '_blank'
85
- xml.add_text('') unless xml.text
86
- contents.gsub!(link, xml.to_s)
87
- end
88
+ next if xml.attributes['href'] =~ /(plain|rich).html/
89
+ xml.attributes['target'] = '_blank'
90
+ xml.add_text('') unless xml.text
91
+ contents.gsub!(link, xml.to_s)
88
92
  end
89
93
  contents
90
94
  end
@@ -95,7 +99,7 @@ module LetterOpenerWeb
95
99
  fixed_link.gsub!('<br>', '<br/>')
96
100
  fixed_link.scan(/<img(?:[^>]+?)>/).each do |img|
97
101
  fixed_img = img.dup
98
- fixed_img.gsub!(/>$/, '/>') unless img =~ /\/>$/
102
+ fixed_img.gsub!(/>$/, '/>') unless img =~ %r{/>$}
99
103
  fixed_link.gsub!(img, fixed_img)
100
104
  end
101
105
  end
@@ -8,8 +8,6 @@
8
8
  <%= csrf_meta_tags %>
9
9
  </head>
10
10
  <body>
11
-
12
11
  <%= yield %>
13
-
14
12
  </body>
15
13
  </html>
@@ -2,17 +2,17 @@
2
2
  <h1>
3
3
  Letters
4
4
  <span class="pull-right">
5
- <%= link_to letter_opener_web.letters_path, class: 'btn refresh' do %>
5
+ <%= link_to letters_path, class: 'btn refresh' do %>
6
6
  <i class="icon-refresh"></i>
7
7
  Refresh
8
8
  <% end %>
9
- <%= link_to letter_opener_web.clear_letters_path, method: 'delete', data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' do %>
9
+ <%= link_to clear_letters_path, method: 'delete', data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' do %>
10
10
  <i class="icon-trash icon-white"></i>
11
11
  Clear
12
12
  <% end %>
13
13
  </span>
14
14
  </h1>
15
- <table class="table table-hover letter-opener" data-letters-path="<%= letter_opener_web.letters_path %>">
15
+ <table class="table table-hover letter-opener" data-letters-path="<%= letters_path %>">
16
16
  <thead>
17
17
  <tr>
18
18
  <th>ID</th>
@@ -24,11 +24,11 @@
24
24
  <% if first_letter = @letters.shift %>
25
25
  <tr class="active">
26
26
  <td>
27
- <%= link_to(first_letter.id, letter_opener_web.letter_path(first_letter, style: first_letter.default_style), target: 'mail') %>
27
+ <%= link_to(first_letter.id, letter_path(first_letter, style: first_letter.default_style), target: 'mail') %>
28
28
  </td>
29
29
  <td><%= first_letter.sent_at %></td>
30
30
  <td>
31
- <%= link_to letter_opener_web.delete_letter_path(first_letter), method: 'delete', data: { confirm: 'Are you sure you want to delete this email?' } do %>
31
+ <%= link_to delete_letter_path(first_letter), method: 'delete', data: { confirm: 'Are you sure you want to delete this email?' } do %>
32
32
  <span class="pull-right">
33
33
  <i class="icon-remove-circle" title="Delete"></i>
34
34
  </span>
@@ -39,11 +39,11 @@
39
39
  <% @letters.each do |letter| %>
40
40
  <tr>
41
41
  <td>
42
- <%= link_to(letter.id, letter_opener_web.letter_path(letter, style: letter.default_style), target: 'mail') %>
42
+ <%= link_to(letter.id, letter_path(letter, style: letter.default_style), target: 'mail') %>
43
43
  </td>
44
44
  <td><%= letter.sent_at %></td>
45
45
  <td>
46
- <%= link_to letter_opener_web.delete_letter_path(letter), :method => 'delete', data: { confirm: 'Are you sure you want to delete this email?' } do %>
46
+ <%= link_to delete_letter_path(letter), :method => 'delete', data: { confirm: 'Are you sure you want to delete this email?' } do %>
47
47
  <span class="pull-right">
48
48
  <i class="icon-remove-circle"></i>
49
49
  </span>
@@ -55,5 +55,5 @@
55
55
  </table>
56
56
  </div>
57
57
  <div class="col right">
58
- <iframe name="mail" id="mail" src="<%= first_letter.present? ? letter_opener_web.letter_path(first_letter, style: first_letter.default_style) : 'about:blank' %>"></iframe>
58
+ <iframe name="mail" id="mail" src="<%= first_letter.present? ? letter_path(first_letter, style: first_letter.default_style) : 'about:blank' %>"></iframe>
59
59
  </div>