letter_opener_web 2.0.0 → 3.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 +4 -4
- data/.github/workflows/brakeman-analysis.yml +5 -7
- data/.github/workflows/main.yml +13 -7
- data/.github/workflows/release-gem.yml +4 -4
- data/.rubocop.yml +4 -1
- data/.rubocop_todo.yml +6 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +11 -2
- data/README.md +4 -4
- data/Rakefile +0 -1
- data/app/controllers/letter_opener_web/letters_controller.rb +3 -3
- data/app/models/letter_opener_web/letter.rb +6 -3
- data/app/views/layouts/letter_opener_web/styles/_letters.html.erb +9 -0
- data/bin/rake +27 -0
- data/bin/rspec +27 -0
- data/bin/rubocop +27 -0
- data/config/routes.rb +1 -1
- data/letter_opener_web.gemspec +5 -11
- data/lib/letter_opener_web/delivery_method.rb +1 -1
- data/lib/letter_opener_web/version.rb +1 -1
- data/spec/controllers/letter_opener_web/letters_controller_spec.rb +26 -8
- data/spec/dummy/config/environments/production.rb +1 -1
- data/spec/dummy/config/initializers/application_controller_renderer.rb +1 -0
- data/spec/dummy/config/initializers/assets.rb +1 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +1 -0
- data/spec/dummy/config/initializers/inflections.rb +1 -0
- data/spec/dummy/config/initializers/mime_types.rb +1 -0
- data/spec/dummy/config/initializers/permissions_policy.rb +1 -0
- data/spec/models/letter_opener_web/letter_spec.rb +3 -5
- data/spec/spec_helper.rb +0 -10
- metadata +16 -150
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b4b9c3cbf353af3ad786e28273e35fc1e0f95e3149fe124776b57e9aa5e641c
|
4
|
+
data.tar.gz: 9ffef4bc4d2c6032a5e6939f52a288b389eb91b77be3c269c0f7ece2b3209390
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c540e69c8876b53a762299a60d5618245945ddab78795e57ab2749f378585ff97984e033484fa1d2b4dcb6d5c711d862887172810f4293f97568cf1b6d05411b
|
7
|
+
data.tar.gz: 6996174460ce15b97c8513df2b6753ca4ef114a6765d9f6276a6e81fbac690176b7a9afc2a906bec0eff592937afd2dde4bfcd3a6a5a0bf6a60a7e151acb248b
|
@@ -19,19 +19,17 @@ jobs:
|
|
19
19
|
steps:
|
20
20
|
# Checkout the repository to the GitHub Actions runner
|
21
21
|
- name: Checkout
|
22
|
-
uses: actions/checkout@
|
22
|
+
uses: actions/checkout@v4
|
23
23
|
|
24
24
|
# Customize the ruby version depending on your needs
|
25
25
|
- name: Setup Ruby
|
26
|
-
uses:
|
26
|
+
uses: ruby/setup-ruby@v1
|
27
27
|
with:
|
28
|
-
ruby-version: '
|
28
|
+
ruby-version: '3.3'
|
29
29
|
|
30
30
|
- name: Setup Brakeman
|
31
|
-
env:
|
32
|
-
BRAKEMAN_VERSION: '4.10' # SARIF support is provided in Brakeman version 4.10+
|
33
31
|
run: |
|
34
|
-
gem install brakeman
|
32
|
+
gem install brakeman
|
35
33
|
|
36
34
|
# Execute Brakeman CLI and generate a SARIF output with the security issues identified during the analysis
|
37
35
|
- name: Scan
|
@@ -41,6 +39,6 @@ jobs:
|
|
41
39
|
|
42
40
|
# Upload the SARIF file generated in the previous step
|
43
41
|
- name: Upload SARIF
|
44
|
-
uses: github/codeql-action/upload-sarif@
|
42
|
+
uses: github/codeql-action/upload-sarif@v3
|
45
43
|
with:
|
46
44
|
sarif_file: output.sarif.json
|
data/.github/workflows/main.yml
CHANGED
@@ -1,22 +1,25 @@
|
|
1
|
+
---
|
1
2
|
name: Run tests
|
2
3
|
|
3
4
|
on:
|
4
5
|
push:
|
5
6
|
branches: [ master ]
|
6
7
|
pull_request:
|
7
|
-
branches: [ master
|
8
|
+
branches: [ master ]
|
8
9
|
|
9
10
|
jobs:
|
10
11
|
test:
|
11
|
-
|
12
12
|
runs-on: ubuntu-latest
|
13
|
-
|
14
13
|
strategy:
|
15
14
|
matrix:
|
16
|
-
ruby-version:
|
15
|
+
ruby-version:
|
16
|
+
- "3.1"
|
17
|
+
- "3.2"
|
18
|
+
- "3.3"
|
19
|
+
- truffleruby-head
|
17
20
|
|
18
21
|
steps:
|
19
|
-
- uses: actions/checkout@
|
22
|
+
- uses: actions/checkout@v4
|
20
23
|
|
21
24
|
- name: Set up Ruby ${{ matrix.ruby-version }}
|
22
25
|
uses: ruby/setup-ruby@v1
|
@@ -27,8 +30,11 @@ jobs:
|
|
27
30
|
- name: Install dependencies
|
28
31
|
run: bundle install
|
29
32
|
|
33
|
+
- name: Lint with Rubocop
|
34
|
+
run: bin/rubocop
|
35
|
+
|
30
36
|
- name: Run tests
|
31
|
-
run:
|
37
|
+
run: bin/rspec
|
32
38
|
|
33
39
|
- name: Build gem
|
34
|
-
run:
|
40
|
+
run: bin/rake build
|
@@ -11,12 +11,12 @@ jobs:
|
|
11
11
|
runs-on: ubuntu-latest
|
12
12
|
|
13
13
|
steps:
|
14
|
-
- uses: actions/checkout@
|
14
|
+
- uses: actions/checkout@v4
|
15
15
|
|
16
|
-
- name: Set up Ruby 3.
|
16
|
+
- name: Set up Ruby 3.3
|
17
17
|
uses: ruby/setup-ruby@v1
|
18
18
|
with:
|
19
|
-
ruby-version: 3.
|
19
|
+
ruby-version: 3.3
|
20
20
|
|
21
21
|
- run: bundle install
|
22
22
|
|
@@ -26,7 +26,7 @@ jobs:
|
|
26
26
|
touch $HOME/.gem/credentials
|
27
27
|
chmod 0600 $HOME/.gem/credentials
|
28
28
|
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
29
|
-
|
29
|
+
bin/rake build
|
30
30
|
gem push pkg/*.gem
|
31
31
|
env:
|
32
32
|
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
data/.rubocop.yml
CHANGED
@@ -3,7 +3,7 @@ inherit_from: .rubocop_todo.yml
|
|
3
3
|
|
4
4
|
AllCops:
|
5
5
|
NewCops: enable
|
6
|
-
TargetRubyVersion:
|
6
|
+
TargetRubyVersion: 3.1
|
7
7
|
Exclude:
|
8
8
|
- "spec/dummy/bin/**/*"
|
9
9
|
- "tmp/**/*"
|
@@ -15,3 +15,6 @@ Metrics/BlockLength:
|
|
15
15
|
|
16
16
|
Layout/LineLength:
|
17
17
|
Max: 120
|
18
|
+
|
19
|
+
Style/HashSyntax:
|
20
|
+
EnforcedShorthandSyntax: either
|
data/.rubocop_todo.yml
CHANGED
@@ -12,8 +12,14 @@ Style/Documentation:
|
|
12
12
|
Exclude:
|
13
13
|
- 'spec/**/*'
|
14
14
|
- 'test/**/*'
|
15
|
+
- 'app/controllers/letter_opener_web/application_controller.rb'
|
15
16
|
- 'app/controllers/letter_opener_web/letters_controller.rb'
|
17
|
+
- 'app/controllers/letter_opener_web/application_controller.rb'
|
16
18
|
- 'app/models/letter_opener_web/letter.rb'
|
17
19
|
- 'lib/letter_opener_web.rb'
|
18
20
|
- 'lib/letter_opener_web/delivery_method.rb'
|
19
21
|
- 'lib/letter_opener_web/engine.rb'
|
22
|
+
|
23
|
+
Metrics/ClassLength:
|
24
|
+
Exclude:
|
25
|
+
- 'app/models/letter_opener_web/letter.rb'
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## [Unreleased](https://github.com/fgrehm/letter_opener_web/compare/v3.0.0...master)
|
2
|
+
|
3
|
+
## [3.0.0](https://github.com/fgrehm/letter_opener_web/compare/v2.0.0...v3.0.0)
|
4
|
+
|
5
|
+
### Breaking
|
6
|
+
- Drop EoL'd Rubies and Rails - now requires Ruby 3.1+ and Rails 6.1+.
|
7
|
+
|
8
|
+
### Changes
|
9
|
+
- Reliably strip Attachment links from the sidebar. [#132](https://github.com/fgrehm/letter_opener_web/pull/134)
|
10
|
+
|
11
|
+
### Additions
|
12
|
+
- Allow dot (`.`) character in attachment file names. [#131](https://github.com/fgrehm/letter_opener_web/pull/131)
|
13
|
+
- Add dark mode. [#119](https://github.com/fgrehm/letter_opener_web/pull/119)
|
14
|
+
|
1
15
|
## [v2.0.0](https://github.com/fgrehm/letter_opener_web/compare/v1.4.1...v2.0.0)
|
2
16
|
|
3
17
|
- Require Rails >= 5.2, run tests against Rails 6.1 [#113](https://github.com/fgrehm/letter_opener_web/pull/113)
|
data/Gemfile
CHANGED
@@ -7,6 +7,15 @@ source 'http://rubygems.org'
|
|
7
7
|
# development dependencies will be added by default to the :development group.
|
8
8
|
gemspec
|
9
9
|
|
10
|
-
group :
|
11
|
-
gem '
|
10
|
+
group :development do
|
11
|
+
gem 'rails', '~> 6.1'
|
12
|
+
gem 'rspec-rails', '~> 5.0'
|
13
|
+
gem 'rubocop', '~> 1.22'
|
14
|
+
gem 'rubocop-rails', '~> 2.12'
|
15
|
+
gem 'rubocop-rspec', '~> 2.5'
|
16
|
+
end
|
17
|
+
|
18
|
+
group :development, :test do
|
19
|
+
gem 'pry-byebug'
|
20
|
+
gem 'pry-rails'
|
12
21
|
end
|
data/README.md
CHANGED
@@ -15,13 +15,13 @@ First add the gem to your development environment and run the `bundle` command t
|
|
15
15
|
|
16
16
|
```ruby
|
17
17
|
group :development do
|
18
|
-
gem 'letter_opener_web', '~>
|
18
|
+
gem 'letter_opener_web', '~> 3.0'
|
19
19
|
end
|
20
20
|
```
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
-
Add to your routes.rb
|
24
|
+
Add to your `routes.rb`:
|
25
25
|
|
26
26
|
```ruby
|
27
27
|
Your::Application.routes.draw do
|
@@ -53,7 +53,7 @@ config.action_mailer.delivery_method = :letter_opener_web
|
|
53
53
|
```
|
54
54
|
|
55
55
|
If you're using `:letter_opener_web` as your delivery method, you can change the location of
|
56
|
-
the letters by adding the following to an initializer (or in development.rb):
|
56
|
+
the letters by adding the following to an initializer (or in `development.rb`):
|
57
57
|
|
58
58
|
```ruby
|
59
59
|
LetterOpenerWeb.configure do |config|
|
@@ -106,7 +106,7 @@ few years.
|
|
106
106
|
## Contributing
|
107
107
|
|
108
108
|
1. Fork it and run `bin/setup`
|
109
|
-
2. Create your feature branch (`git
|
109
|
+
2. Create your feature branch (`git switch -c my-new-feature`)
|
110
110
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
111
111
|
4. Push to the branch (`git push origin my-new-feature`)
|
112
112
|
5. Create new Pull Request
|
data/Rakefile
CHANGED
@@ -15,14 +15,14 @@ module LetterOpenerWeb
|
|
15
15
|
|
16
16
|
def show
|
17
17
|
text = @letter.send("#{params[:style]}_text")
|
18
|
-
.gsub(
|
19
|
-
.gsub(
|
18
|
+
.gsub('"plain.html"', "\"#{routes.letter_path(id: @letter.id, style: 'plain')}\"")
|
19
|
+
.gsub('"rich.html"', "\"#{routes.letter_path(id: @letter.id, style: 'rich')}\"")
|
20
20
|
|
21
21
|
render html: text.html_safe
|
22
22
|
end
|
23
23
|
|
24
24
|
def attachment
|
25
|
-
filename =
|
25
|
+
filename = params[:file]
|
26
26
|
file = @letter.attachments[filename]
|
27
27
|
|
28
28
|
return render plain: 'Attachment not found!', status: 404 unless file.present?
|
@@ -81,10 +81,13 @@ module LetterOpenerWeb
|
|
81
81
|
|
82
82
|
def remove_attachments_link(headers)
|
83
83
|
xml = REXML::Document.new(headers)
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
label_element = xml.root.elements.find { |e| e.get_text&.value&.match?(/attachments:/i) }
|
85
|
+
|
86
|
+
if label_element
|
87
|
+
xml.root.delete_element(label_element.next_element) # the list of attachments
|
88
|
+
xml.root.delete_element(label_element)
|
87
89
|
end
|
90
|
+
|
88
91
|
xml.to_s
|
89
92
|
end
|
90
93
|
|
data/bin/rake
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rake' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
12
|
+
|
13
|
+
bundle_binstub = File.expand_path('bundle', __dir__)
|
14
|
+
|
15
|
+
if File.file?(bundle_binstub)
|
16
|
+
if File.read(bundle_binstub, 300).include?('This file was generated by Bundler')
|
17
|
+
load(bundle_binstub)
|
18
|
+
else
|
19
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
20
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'rubygems'
|
25
|
+
require 'bundler/setup'
|
26
|
+
|
27
|
+
load Gem.bin_path('rake', 'rake')
|
data/bin/rspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rspec' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
12
|
+
|
13
|
+
bundle_binstub = File.expand_path('bundle', __dir__)
|
14
|
+
|
15
|
+
if File.file?(bundle_binstub)
|
16
|
+
if File.read(bundle_binstub, 300).include?('This file was generated by Bundler')
|
17
|
+
load(bundle_binstub)
|
18
|
+
else
|
19
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
20
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'rubygems'
|
25
|
+
require 'bundler/setup'
|
26
|
+
|
27
|
+
load Gem.bin_path('rspec-core', 'rspec')
|
data/bin/rubocop
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rubocop' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
12
|
+
|
13
|
+
bundle_binstub = File.expand_path('bundle', __dir__)
|
14
|
+
|
15
|
+
if File.file?(bundle_binstub)
|
16
|
+
if File.read(bundle_binstub, 300).include?('This file was generated by Bundler')
|
17
|
+
load(bundle_binstub)
|
18
|
+
else
|
19
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
20
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'rubygems'
|
25
|
+
require 'bundler/setup'
|
26
|
+
|
27
|
+
load Gem.bin_path('rubocop', 'rubocop')
|
data/config/routes.rb
CHANGED
@@ -5,5 +5,5 @@ LetterOpenerWeb::Engine.routes.draw do
|
|
5
5
|
post 'clear' => 'letters#clear', as: :clear_letters
|
6
6
|
get ':id(/:style)' => 'letters#show', as: :letter
|
7
7
|
post ':id/delete' => 'letters#destroy', as: :delete_letter
|
8
|
-
get ':id/attachments/:file' => 'letters#attachment'
|
8
|
+
get ':id/attachments/:file' => 'letters#attachment', constraints: { file: %r{[^/]+} }
|
9
9
|
end
|
data/letter_opener_web.gemspec
CHANGED
@@ -13,22 +13,16 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.summary = gem.description
|
14
14
|
gem.homepage = 'https://github.com/fgrehm/letter_opener_web'
|
15
15
|
gem.license = 'MIT'
|
16
|
-
gem.required_ruby_version = '>=
|
16
|
+
gem.required_ruby_version = '>= 3.1'
|
17
17
|
|
18
18
|
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
19
19
|
gem.executables = gem.files.grep(%r{^exe/}).map { |f| File.basename(f) }
|
20
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
21
20
|
gem.require_paths = ['lib']
|
22
21
|
|
23
|
-
gem.add_dependency 'actionmailer', '>=
|
24
|
-
gem.add_dependency 'letter_opener', '~> 1.
|
25
|
-
gem.add_dependency 'railties', '>=
|
22
|
+
gem.add_dependency 'actionmailer', '>= 6.1'
|
23
|
+
gem.add_dependency 'letter_opener', '~> 1.9'
|
24
|
+
gem.add_dependency 'railties', '>= 6.1'
|
26
25
|
gem.add_dependency 'rexml'
|
27
26
|
|
28
|
-
gem.
|
29
|
-
gem.add_development_dependency 'rspec-rails', '~> 5.0'
|
30
|
-
gem.add_development_dependency 'rubocop', '~> 1.22'
|
31
|
-
gem.add_development_dependency 'rubocop-rails', '~> 2.12'
|
32
|
-
gem.add_development_dependency 'rubocop-rspec', '~> 2.5'
|
33
|
-
gem.add_development_dependency 'shoulda-matchers', '~> 5.0'
|
27
|
+
gem.metadata['rubygems_mfa_required'] = 'true'
|
34
28
|
end
|
@@ -5,7 +5,7 @@ require 'letter_opener/delivery_method'
|
|
5
5
|
module LetterOpenerWeb
|
6
6
|
class DeliveryMethod < LetterOpener::DeliveryMethod
|
7
7
|
def deliver!(mail)
|
8
|
-
original = ENV
|
8
|
+
original = ENV.fetch('LAUNCHY_DRY_RUN', nil)
|
9
9
|
ENV['LAUNCHY_DRY_RUN'] = 'true'
|
10
10
|
|
11
11
|
super
|
@@ -87,17 +87,35 @@ RSpec.describe LetterOpenerWeb::LettersController do
|
|
87
87
|
allow(letter).to receive(:valid?).and_return(true)
|
88
88
|
end
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
|
90
|
+
context 'when the file exists' do
|
91
|
+
before do
|
92
|
+
# Stub a 200 response b/c `send_file` will 204 when the file doesn't actually exist
|
93
|
+
allow(controller).to receive(:send_file) { controller.head :ok }
|
94
|
+
end
|
93
95
|
|
94
|
-
|
95
|
-
|
96
|
-
|
96
|
+
it 'sends the file as an inline attachment' do
|
97
|
+
get :attachment, params: { id: id, file: file_name }
|
98
|
+
|
99
|
+
expect(response.status).to eq(200)
|
100
|
+
expect(controller).to have_received(:send_file)
|
101
|
+
.with(attachment_path, filename: file_name, disposition: 'inline')
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when file name includes a dot' do
|
105
|
+
let(:file_name) { 'image.dot.jpg' }
|
106
|
+
|
107
|
+
it 'sends the file as an inline attachment' do
|
108
|
+
expect(controller).to receive(:send_file).with(attachment_path, filename: file_name,
|
109
|
+
disposition: 'inline')
|
110
|
+
get :attachment, params: { id: id, file: file_name }
|
111
|
+
expect(response.status).to eq(200)
|
112
|
+
end
|
113
|
+
end
|
97
114
|
end
|
98
115
|
|
99
|
-
it "
|
100
|
-
get :attachment, params: { id: id, file: 'unknown
|
116
|
+
it "returns a 404 if attachment file can't be found" do
|
117
|
+
get :attachment, params: { id: id, file: 'unknown.woot' }
|
118
|
+
|
101
119
|
expect(response.status).to eq(404)
|
102
120
|
end
|
103
121
|
end
|
@@ -84,7 +84,7 @@ Rails.application.configure do
|
|
84
84
|
config.active_support.disallowed_deprecation_warnings = []
|
85
85
|
|
86
86
|
# Use default logging formatter so that PID and timestamp are not suppressed.
|
87
|
-
config.log_formatter =
|
87
|
+
config.log_formatter = Logger::Formatter.new
|
88
88
|
|
89
89
|
# Use a different logger for distributed setups.
|
90
90
|
# require "syslog/logger"
|
@@ -33,12 +33,10 @@ RSpec.describe LetterOpenerWeb::Letter do
|
|
33
33
|
|
34
34
|
%w[1111_1111 2222_2222].each do |folder|
|
35
35
|
FileUtils.mkdir_p("#{location}/#{folder}")
|
36
|
-
File.
|
37
|
-
File.
|
36
|
+
File.write("#{location}/#{folder}/plain.html", "Plain text for #{folder}")
|
37
|
+
File.write("#{location}/#{folder}/rich.html", rich_text(folder))
|
38
38
|
FileUtils.mkdir_p("#{Rails.root.join('tmp', 'letter_opener')}/#{folder}")
|
39
|
-
File.
|
40
|
-
f.write("Rich text for #{folder}")
|
41
|
-
end
|
39
|
+
File.write("#{Rails.root.join('tmp', 'letter_opener')}/#{folder}/rich.html", "Rich text for #{folder}")
|
42
40
|
end
|
43
41
|
end
|
44
42
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'simplecov'
|
4
|
-
SimpleCov.start
|
5
|
-
|
6
|
-
if ENV.fetch('CI', '') == 'true'
|
7
|
-
require 'codecov'
|
8
|
-
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
9
|
-
end
|
10
|
-
|
11
|
-
require 'shoulda-matchers'
|
12
|
-
|
13
3
|
RSpec.configure do |config|
|
14
4
|
config.filter_run focus: true
|
15
5
|
config.run_all_when_everything_filtered = true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: letter_opener_web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabio Rehm
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-05-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionmailer
|
@@ -17,42 +17,42 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '6.1'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '6.1'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: letter_opener
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '1.
|
34
|
+
version: '1.9'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '1.
|
41
|
+
version: '1.9'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: railties
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '6.1'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '6.1'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rexml
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,90 +67,6 @@ dependencies:
|
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: rails
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - "~>"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '6.1'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - "~>"
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '6.1'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: rspec-rails
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - "~>"
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '5.0'
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - "~>"
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '5.0'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: rubocop
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '1.22'
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '1.22'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: rubocop-rails
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - "~>"
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '2.12'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - "~>"
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '2.12'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: rubocop-rspec
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
requirements:
|
130
|
-
- - "~>"
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: '2.5'
|
133
|
-
type: :development
|
134
|
-
prerelease: false
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - "~>"
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version: '2.5'
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: shoulda-matchers
|
142
|
-
requirement: !ruby/object:Gem::Requirement
|
143
|
-
requirements:
|
144
|
-
- - "~>"
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version: '5.0'
|
147
|
-
type: :development
|
148
|
-
prerelease: false
|
149
|
-
version_requirements: !ruby/object:Gem::Requirement
|
150
|
-
requirements:
|
151
|
-
- - "~>"
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: '5.0'
|
154
70
|
description: Gives letter_opener an interface for browsing sent emails
|
155
71
|
email:
|
156
72
|
- fgrehm@gmail.com
|
@@ -184,6 +100,9 @@ files:
|
|
184
100
|
- app/views/layouts/letter_opener_web/styles/_letters.html.erb
|
185
101
|
- app/views/letter_opener_web/letters/_item.html.erb
|
186
102
|
- app/views/letter_opener_web/letters/index.html.erb
|
103
|
+
- bin/rake
|
104
|
+
- bin/rspec
|
105
|
+
- bin/rubocop
|
187
106
|
- bin/setup
|
188
107
|
- config/routes.rb
|
189
108
|
- letter_opener_web.gemspec
|
@@ -249,7 +168,8 @@ files:
|
|
249
168
|
homepage: https://github.com/fgrehm/letter_opener_web
|
250
169
|
licenses:
|
251
170
|
- MIT
|
252
|
-
metadata:
|
171
|
+
metadata:
|
172
|
+
rubygems_mfa_required: 'true'
|
253
173
|
post_install_message:
|
254
174
|
rdoc_options: []
|
255
175
|
require_paths:
|
@@ -258,69 +178,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
258
178
|
requirements:
|
259
179
|
- - ">="
|
260
180
|
- !ruby/object:Gem::Version
|
261
|
-
version: '
|
181
|
+
version: '3.1'
|
262
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
263
183
|
requirements:
|
264
184
|
- - ">="
|
265
185
|
- !ruby/object:Gem::Version
|
266
186
|
version: '0'
|
267
187
|
requirements: []
|
268
|
-
rubygems_version: 3.
|
188
|
+
rubygems_version: 3.5.9
|
269
189
|
signing_key:
|
270
190
|
specification_version: 4
|
271
191
|
summary: Gives letter_opener an interface for browsing sent emails
|
272
|
-
test_files:
|
273
|
-
- spec/controllers/letter_opener_web/letters_controller_spec.rb
|
274
|
-
- spec/dummy/Rakefile
|
275
|
-
- spec/dummy/app/assets/config/manifest.js
|
276
|
-
- spec/dummy/app/assets/images/.keep
|
277
|
-
- spec/dummy/app/assets/stylesheets/application.css
|
278
|
-
- spec/dummy/app/channels/application_cable/channel.rb
|
279
|
-
- spec/dummy/app/channels/application_cable/connection.rb
|
280
|
-
- spec/dummy/app/controllers/application_controller.rb
|
281
|
-
- spec/dummy/app/controllers/concerns/.keep
|
282
|
-
- spec/dummy/app/helpers/application_helper.rb
|
283
|
-
- spec/dummy/app/javascript/packs/application.js
|
284
|
-
- spec/dummy/app/jobs/application_job.rb
|
285
|
-
- spec/dummy/app/mailers/application_mailer.rb
|
286
|
-
- spec/dummy/app/models/application_record.rb
|
287
|
-
- spec/dummy/app/models/concerns/.keep
|
288
|
-
- spec/dummy/app/views/layouts/application.html.erb
|
289
|
-
- spec/dummy/app/views/layouts/mailer.html.erb
|
290
|
-
- spec/dummy/app/views/layouts/mailer.text.erb
|
291
|
-
- spec/dummy/bin/rails
|
292
|
-
- spec/dummy/bin/rake
|
293
|
-
- spec/dummy/bin/setup
|
294
|
-
- spec/dummy/config.ru
|
295
|
-
- spec/dummy/config/application.rb
|
296
|
-
- spec/dummy/config/boot.rb
|
297
|
-
- spec/dummy/config/environment.rb
|
298
|
-
- spec/dummy/config/environments/development.rb
|
299
|
-
- spec/dummy/config/environments/production.rb
|
300
|
-
- spec/dummy/config/environments/test.rb
|
301
|
-
- spec/dummy/config/initializers/application_controller_renderer.rb
|
302
|
-
- spec/dummy/config/initializers/assets.rb
|
303
|
-
- spec/dummy/config/initializers/backtrace_silencers.rb
|
304
|
-
- spec/dummy/config/initializers/content_security_policy.rb
|
305
|
-
- spec/dummy/config/initializers/cookies_serializer.rb
|
306
|
-
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
307
|
-
- spec/dummy/config/initializers/inflections.rb
|
308
|
-
- spec/dummy/config/initializers/mime_types.rb
|
309
|
-
- spec/dummy/config/initializers/permissions_policy.rb
|
310
|
-
- spec/dummy/config/initializers/wrap_parameters.rb
|
311
|
-
- spec/dummy/config/locales/en.yml
|
312
|
-
- spec/dummy/config/puma.rb
|
313
|
-
- spec/dummy/config/routes.rb
|
314
|
-
- spec/dummy/lib/assets/.keep
|
315
|
-
- spec/dummy/log/.keep
|
316
|
-
- spec/dummy/public/404.html
|
317
|
-
- spec/dummy/public/422.html
|
318
|
-
- spec/dummy/public/500.html
|
319
|
-
- spec/dummy/public/apple-touch-icon-precomposed.png
|
320
|
-
- spec/dummy/public/apple-touch-icon.png
|
321
|
-
- spec/dummy/public/favicon.ico
|
322
|
-
- spec/dummy/storage/.keep
|
323
|
-
- spec/letter_opener_web_spec.rb
|
324
|
-
- spec/models/letter_opener_web/letter_spec.rb
|
325
|
-
- spec/rails_helper.rb
|
326
|
-
- spec/spec_helper.rb
|
192
|
+
test_files: []
|