letter_opener_web 1.3.1 → 1.3.2

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 (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>