clearance 2.6.1 → 2.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 136429332942ad6982566811de66424e672d356bdf19e912c8ee7dbe0ede8765
4
- data.tar.gz: 1a8ec9af9ab0ec22be0a35745ee7e7880fbb9b6945cc83db1bf7b5e903d8bbe8
3
+ metadata.gz: f43e65fb98c36167f024899806818f771cabf396d1c1e147f4a21d1bdccb37dd
4
+ data.tar.gz: 42a88e8b50b98b5414b923fda5775e1998223791ffe2fcee00ca03163c7f9a50
5
5
  SHA512:
6
- metadata.gz: 24fd97a070795a1343b7e4971f154765ce0c73e57daff27f0af288769dffb4a84900ea96dc935519da6f761274cbeb4b6dc66c5189eba7b504406d95b350dd0d
7
- data.tar.gz: f576ab8afb5725e4919cbb259e692c552bf301420ec61234b86f4fca66d3d34d478bb8a88112d79b95350fe29e317eb93d736d9782eea22b43482a809de5bd16
6
+ metadata.gz: 680e0a4d6cebe218f7d8fffeadebcdcd9a160cb9a562a5cef3f876ad118556d4caa4338b40e3dd0135e3ee89e47a8034593d6131ee8eeb4ec7f47062b1aafe3a
7
+ data.tar.gz: cbc137fa5f3f722f28f99c1537909ed27b3b54e5df3aee37b4c7954e2b3e6c452a900f034239072196796171703eb27c3e859edc69b08bb35762bd260f0253a4
@@ -0,0 +1,19 @@
1
+ name: update-templates
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - README.md
9
+ workflow_dispatch:
10
+
11
+ jobs:
12
+ update-templates:
13
+ permissions:
14
+ contents: write
15
+ pull-requests: write
16
+ pages: write
17
+ uses: thoughtbot/templates/.github/workflows/dynamic-readme.yaml@main
18
+ secrets:
19
+ token: ${{ secrets.GITHUB_TOKEN }}
@@ -16,13 +16,13 @@ jobs:
16
16
  fail-fast: false
17
17
  matrix:
18
18
  gemfile:
19
- - "6.0"
20
19
  - "6.1"
21
20
  - "7.0"
21
+ - "7.1"
22
22
  ruby:
23
- - "2.7.6"
24
23
  - "3.0.4"
25
24
  - "3.1.2"
25
+ - "3.2.2"
26
26
 
27
27
  env:
28
28
  BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.gemfile }}.gemfile
@@ -38,7 +38,9 @@ jobs:
38
38
  bundler-cache: true
39
39
 
40
40
  - name: "Reset app database"
41
- run: bundle exec rake dummy:db:reset
41
+ run: |
42
+ bundle exec rake dummy:db:drop
43
+ bundle exec rake dummy:db:setup
42
44
 
43
45
  - name: "Run tests"
44
46
  run: bundle exec rake
data/Appraisals CHANGED
@@ -1,14 +1,12 @@
1
- appraise "rails_6.0" do
2
- gem "railties", "~> 6.0"
3
- gem "net-smtp", require: false # not bundled in ruby 3.1
4
- gem "psych", "< 4" # psych 4 switched from unsafe load to safe load
5
- end
6
-
7
1
  appraise "rails_6.1" do
8
- gem "railties", "~> 6.1"
2
+ gem "railties", "~> 6.1.0"
9
3
  gem "net-smtp", require: false # not bundled in ruby 3.1
10
4
  end
11
5
 
12
6
  appraise "rails_7.0" do
13
- gem "railties", "~> 7.0"
7
+ gem "railties", "~> 7.0.0"
8
+ end
9
+
10
+ appraise "rails_7.1" do
11
+ gem "railties", "~> 7.1.0"
14
12
  end
data/CHANGELOG.md CHANGED
@@ -5,7 +5,30 @@ complete changelog, see the git history for each version via the version links.
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
- [Unreleased]: https://github.com/thoughtbot/clearance/compare/v2.6.1...main
8
+ [Unreleased]: https://github.com/thoughtbot/clearance/compare/v2.7.0...main
9
+
10
+ ## [2.7.0] - April 19, 2024
11
+ - Call dynamic README workflow (#1004)
12
+ - Drop Ruby 2.76 and Rails 6.0 (#1005)
13
+ - Update specs to match on translations (#1015)
14
+ - Add configuration options for failure method redirects (#1002) Dan Sharp
15
+
16
+ [2.7.0]: https://github.com/thoughtbot/clearance/compare/v2.6.2...v2.7.0
17
+
18
+ ## [2.6.2] - January 15, 2024
19
+ - Fix typo in Clearance::Token docs (#1000) Gabe Berke-Williams
20
+ - Add CODEOWNERS file (#994)
21
+ - Add support for Rails 7.1 (#995) Samuel Giddens
22
+ - Fix for setup & CI for Rails 7.1 support, update "MiniTest" to "Minitest",
23
+ add handling for different versions of Rack::Utils.set_cookie_header!, remove
24
+ deprecated active record handling in application.rb (#998)
25
+ - Update argon2 to v2.2.0 (#989) Georg Leciejewski
26
+ - Prefer literal hash creation notation (#984) Ivan Marynych
27
+ - Add Ruby 3.2.2 to testing matrix (#991)
28
+ - Replace mentions of NEWS.md with CHANGELOG.md (#982)
29
+ - Fix broken thoughtbot logo on README.md
30
+
31
+ [2.6.2]: https://github.com/thoughtbot/clearance/compare/v2.6.1...v2.6.2
9
32
 
10
33
  ## [2.6.1] - September 23, 2022
11
34
  - Document how to report security issues
data/CODEOWNERS ADDED
@@ -0,0 +1 @@
1
+ * @sej3506
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- clearance (2.6.1)
4
+ clearance (2.7.0)
5
5
  actionmailer (>= 5.0)
6
6
  activemodel (>= 5.0)
7
7
  activerecord (>= 5.0)
@@ -59,11 +59,11 @@ GEM
59
59
  bundler
60
60
  rake
61
61
  thor (>= 0.14.0)
62
- argon2 (2.1.1)
63
- ffi (~> 1.14)
62
+ argon2 (2.3.0)
63
+ ffi (~> 1.15)
64
64
  ffi-compiler (~> 1.0)
65
65
  ast (2.4.2)
66
- bcrypt (3.1.18)
66
+ bcrypt (3.1.20)
67
67
  better_html (1.0.16)
68
68
  actionview (>= 4.0)
69
69
  activesupport (>= 4.0)
@@ -91,9 +91,9 @@ GEM
91
91
  activerecord (>= 5.a)
92
92
  database_cleaner-core (~> 2.0.0)
93
93
  database_cleaner-core (2.0.1)
94
+ date (3.3.4)
94
95
  diff-lcs (1.5.0)
95
- digest (3.1.0)
96
- email_validator (2.2.3)
96
+ email_validator (2.2.4)
97
97
  activemodel
98
98
  erb_lint (0.1.1)
99
99
  activesupport
@@ -109,39 +109,37 @@ GEM
109
109
  factory_bot_rails (6.2.0)
110
110
  factory_bot (~> 6.2.0)
111
111
  railties (>= 5.0.0)
112
- ffi (1.15.5)
113
- ffi-compiler (1.0.1)
114
- ffi (>= 1.0.0)
112
+ ffi (1.16.3)
113
+ ffi-compiler (1.3.2)
114
+ ffi (>= 1.15.5)
115
115
  rake
116
- globalid (1.0.0)
117
- activesupport (>= 5.0)
116
+ globalid (1.2.1)
117
+ activesupport (>= 6.1)
118
118
  html_tokenizer (0.0.7)
119
119
  i18n (1.10.0)
120
120
  concurrent-ruby (~> 1.0)
121
121
  loofah (2.18.0)
122
122
  crass (~> 1.0.2)
123
123
  nokogiri (>= 1.5.9)
124
- mail (2.7.1)
124
+ mail (2.8.1)
125
125
  mini_mime (>= 0.1.1)
126
+ net-imap
127
+ net-pop
128
+ net-smtp
126
129
  matrix (0.4.2)
127
130
  method_source (1.0.0)
128
131
  mini_mime (1.1.2)
129
132
  mini_portile2 (2.8.0)
130
133
  minitest (5.15.0)
131
- net-imap (0.2.3)
132
- digest
134
+ net-imap (0.4.10)
135
+ date
133
136
  net-protocol
134
- strscan
135
- net-pop (0.1.1)
136
- digest
137
+ net-pop (0.1.2)
137
138
  net-protocol
139
+ net-protocol (0.2.2)
138
140
  timeout
139
- net-protocol (0.1.3)
140
- timeout
141
- net-smtp (0.3.1)
142
- digest
141
+ net-smtp (0.5.0)
143
142
  net-protocol
144
- timeout
145
143
  nokogiri (1.13.6)
146
144
  mini_portile2 (~> 2.8.0)
147
145
  racc (~> 1.4)
@@ -173,7 +171,7 @@ GEM
173
171
  thor (~> 1.0)
174
172
  zeitwerk (~> 2.5)
175
173
  rainbow (3.1.1)
176
- rake (13.0.6)
174
+ rake (13.1.0)
177
175
  regexp_parser (2.5.0)
178
176
  rexml (3.2.5)
179
177
  rspec-core (3.11.0)
@@ -209,10 +207,9 @@ GEM
209
207
  activesupport (>= 5.2.0)
210
208
  smart_properties (1.17.0)
211
209
  sqlite3 (1.4.2)
212
- strscan (3.0.3)
213
210
  thor (1.2.1)
214
211
  timecop (0.9.5)
215
- timeout (0.3.0)
212
+ timeout (0.4.1)
216
213
  tzinfo (2.0.4)
217
214
  concurrent-ruby (~> 1.0)
218
215
  unicode-display_width (2.1.0)
data/README.md CHANGED
@@ -19,7 +19,7 @@ monitored by contributors.
19
19
 
20
20
  ## Getting Started
21
21
 
22
- Clearance is a Rails engine tested against Rails `>= 6.0` and Ruby `>= 2.7.0`.
22
+ Clearance is a Rails engine tested against Rails `>= 6.1` and Ruby `>= 3.0.0`.
23
23
 
24
24
  You can add it to your Gemfile with:
25
25
 
@@ -59,6 +59,8 @@ Clearance.configure do |config|
59
59
  config.mailer_sender = "reply@example.com"
60
60
  config.password_strategy = Clearance::PasswordStrategies::BCrypt
61
61
  config.redirect_url = "/"
62
+ config.url_after_destroy = nil
63
+ config.url_after_denied_access_when_signed_out = nil
62
64
  config.rotate_csrf_on_sign_in = true
63
65
  config.same_site = nil
64
66
  config.secure_cookie = false
@@ -222,8 +224,16 @@ These "failure" methods are called for signed out sessions:
222
224
  - `application#url_after_denied_access_when_signed_out`
223
225
  - `sessions#url_after_destroy`
224
226
 
225
- They both default to `sign_in_url`. Override this method to change both of their
226
- behavior, or override them individually to just change one.
227
+ You can override the appropriate method in your subclassed controller or you
228
+ can set a configuration value for either of these URLs:
229
+
230
+ - `Clearance.configuration.url_after_denied_access_when_signed_out`
231
+ - `Clearance.configuration.url_after_destroy`
232
+
233
+ Both configurations default to `nil` and if not set will default to
234
+ `sign_in_url` in `sessions_controller.rb` and `authorization.rb` for backwards
235
+ compatibility.
236
+
227
237
 
228
238
  ### Views
229
239
 
@@ -481,21 +491,10 @@ For security issues it's better to contact <security@thoughtbot.com> (See <https
481
491
 
482
492
  ## License
483
493
 
484
- Clearance is copyright © 2009-2019 thoughtbot. It is free software, and may be
494
+ Clearance is copyright © 2009 thoughtbot. It is free software, and may be
485
495
  redistributed under the terms specified in the [`LICENSE`] file.
486
496
 
487
497
  [`LICENSE`]: /LICENSE
488
498
 
489
- ## About thoughtbot
490
-
491
- ![thoughtbot](http://presskit.thoughtbot.com/images/thoughtbot-logo-for-readmes.svg)
492
-
493
- Clearance is maintained and funded by thoughtbot, inc.
494
- The names and logos for thoughtbot are trademarks of thoughtbot, inc.
495
-
496
- We love open source software!
497
- See [our other projects][community] or
498
- [hire us][hire] to design, develop, and grow your product.
499
-
500
- [community]: https://thoughtbot.com/community?utm_source=github
501
- [hire]: https://thoughtbot.com/hire-us?utm_source=github
499
+ <!-- START /templates/footer.md -->
500
+ <!-- END /templates/footer.md -->
data/RELEASING.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  1. Update version file accordingly.
4
4
  1. Run `bundle install` to update Gemfile.lock
5
- 1. Update `NEWS.md` to reflect the changes since last release.
5
+ 1. Update `CHANGELOG.md` to reflect the changes since last release.
6
6
  1. Commit changes.
7
7
  There shouldn't be code changes,
8
8
  and thus CI doesn't need to run,
@@ -16,7 +16,7 @@
16
16
  gem build clearance.gemspec
17
17
  gem push clearance-*.gem
18
18
  ```
19
- 1. Add a new GitHub release using the recent `NEWS.md` as the content. Sample
19
+ 1. Add a new GitHub release using the recent `CHANGELOG.md` as the content. Sample
20
20
  URL: https://github.com/thoughtbot/clearance/releases/new?tag=vVERSION
21
21
  1. Announce the new release,
22
22
  making sure to say "thank you" to the contributors
@@ -37,7 +37,7 @@ class Clearance::SessionsController < Clearance::BaseController
37
37
  end
38
38
 
39
39
  def url_after_destroy
40
- sign_in_url
40
+ Clearance.configuration.url_after_destroy || sign_in_url
41
41
  end
42
42
 
43
43
  def url_for_signed_in_users
@@ -41,6 +41,6 @@ class Clearance::UsersController < Clearance::BaseController
41
41
  end
42
42
 
43
43
  def user_params
44
- params[Clearance.configuration.user_parameter] || Hash.new
44
+ params[Clearance.configuration.user_parameter] || {}
45
45
  end
46
46
  end
data/bin/setup CHANGED
@@ -12,4 +12,5 @@ if [ -z "$CI" ]; then
12
12
  fi
13
13
 
14
14
  # Set up database for the application that Clearance tests against
15
- RAILS_ENV=test bundle exec rake dummy:db:reset
15
+ RAILS_ENV=test bundle exec rake dummy:db:drop
16
+ RAILS_ENV=test bundle exec rake dummy:db:setup
@@ -16,7 +16,7 @@ gem "rspec-rails"
16
16
  gem "shoulda-matchers"
17
17
  gem "sqlite3"
18
18
  gem "timecop"
19
- gem "railties", "~> 6.1"
19
+ gem "railties", "~> 6.1.0"
20
20
  gem "net-smtp", require: false
21
21
 
22
22
  gemspec path: "../"
@@ -16,6 +16,6 @@ gem "rspec-rails"
16
16
  gem "shoulda-matchers"
17
17
  gem "sqlite3"
18
18
  gem "timecop"
19
- gem "railties", "~> 7.0"
19
+ gem "railties", "~> 7.0.0"
20
20
 
21
21
  gemspec path: "../"
@@ -16,6 +16,6 @@ gem "rspec-rails"
16
16
  gem "shoulda-matchers"
17
17
  gem "sqlite3"
18
18
  gem "timecop"
19
- gem "railties", "~> 5.1"
19
+ gem "railties", "~> 7.1.0"
20
20
 
21
21
  gemspec path: "../"
@@ -66,7 +66,12 @@ module Clearance
66
66
  clearance_session.sign_in(user, &block)
67
67
 
68
68
  if signed_in? && Clearance.configuration.rotate_csrf_on_sign_in?
69
- session.delete(:_csrf_token)
69
+ if request.respond_to?(:reset_csrf_token)
70
+ # Rails 7.1+
71
+ request.reset_csrf_token
72
+ else
73
+ request.session.try(:delete, :_csrf_token)
74
+ end
70
75
  form_authenticity_token
71
76
  end
72
77
  end
@@ -114,7 +114,7 @@ module Clearance
114
114
  #
115
115
  # @return [String]
116
116
  def url_after_denied_access_when_signed_out
117
- sign_in_url
117
+ Clearance.configuration.url_after_denied_access_when_signed_out || sign_in_url
118
118
  end
119
119
  end
120
120
  end
@@ -68,6 +68,20 @@ module Clearance
68
68
  # @return [String]
69
69
  attr_accessor :redirect_url
70
70
 
71
+ # The default path Clearance will redirect signed out users to.
72
+ # Defaults to `nil` so that the controller will use `sign_in_url`
73
+ # for backwards compatibility. This can be set here instead of overriding
74
+ # the method via an overridden session controller.
75
+ # @return [String]
76
+ attr_accessor :url_after_destroy
77
+
78
+ # The default path Clearance will redirect non-users to when denied access.
79
+ # Defaults to `nil` so that the authorization module will use `sign_in_url`
80
+ # for backwards compatibility. This can be set here instead of overriding
81
+ # the method via an overridden authorization module.
82
+ # @return [String]
83
+ attr_accessor :url_after_denied_access_when_signed_out
84
+
71
85
  # Controls whether Clearance will rotate the CSRF token on sign in.
72
86
  # Defaults to `nil` which generates a warning. Will default to true in
73
87
  # Clearance 2.0.
@@ -140,6 +154,8 @@ module Clearance
140
154
  @same_site = nil
141
155
  @mailer_sender = 'reply@example.com'
142
156
  @redirect_url = '/'
157
+ @url_after_destroy = nil
158
+ @url_after_denied_access_when_signed_out = nil
143
159
  @rotate_csrf_on_sign_in = true
144
160
  @routes = true
145
161
  @secure_cookie = false
@@ -185,10 +185,8 @@ module Clearance
185
185
 
186
186
  # @api private
187
187
  def delete_cookie_options
188
- Hash.new.tap do |options|
189
- if configured_cookie_domain
190
- options[:domain] = domain
191
- end
188
+ {}.tap do |options|
189
+ options[:domain] = domain if configured_cookie_domain
192
190
  end
193
191
  end
194
192
 
@@ -90,7 +90,7 @@ module Clearance
90
90
  @failure_message_when_negated <<
91
91
  "Didn't expect to redirect to #{@url}."
92
92
  true
93
- rescue MiniTest::Assertion, ::Test::Unit::AssertionFailedError
93
+ rescue ::Minitest::Assertion, ::Test::Unit::AssertionFailedError
94
94
  @failure_message << "Expected to redirect to #{@url} but did not."
95
95
  false
96
96
  end
@@ -1,8 +1,8 @@
1
1
  module Clearance
2
2
  # Random token used for password reset and remember tokens.
3
- # Clearance tokens are also public API and are inteded to be used anywhere you
4
- # need a random token to correspond to a given user (e.g. you added an email
5
- # confirmation token).
3
+ # Clearance tokens are also public API and are intended to be used anywhere
4
+ # you need a random token to correspond to a given user (e.g. you added an
5
+ # email confirmation token).
6
6
  class Token
7
7
  # Generate a new random, 20 byte hex token.
8
8
  #
@@ -1,3 +1,3 @@
1
1
  module Clearance
2
- VERSION = "2.6.1".freeze
2
+ VERSION = "2.7.0".freeze
3
3
  end
@@ -472,7 +472,8 @@ describe Clearance::Session do
472
472
  Rack::Utils.set_cookie_header! header, key, value
473
473
  end
474
474
 
475
- header['Set-Cookie']
475
+ cookie = header["set-cookie"] || header["Set-Cookie"]
476
+ cookie
476
477
  end
477
478
 
478
479
  def have_been_called
@@ -109,6 +109,34 @@ describe Clearance::Configuration do
109
109
  end
110
110
  end
111
111
 
112
+ context "when no url_after_destroy value specified" do
113
+ it "returns nil as the default" do
114
+ expect(Clearance::Configuration.new.url_after_destroy).to be_nil
115
+ end
116
+ end
117
+
118
+ context "when url_after_destroy value is specified" do
119
+ it "returns the url_after_destroy value" do
120
+ Clearance.configure { |config| config.url_after_destroy = "/redirect" }
121
+
122
+ expect(Clearance.configuration.url_after_destroy).to eq "/redirect"
123
+ end
124
+ end
125
+
126
+ context "when no url_after_denied_access_when_signed_out value specified" do
127
+ it "returns nil as the default" do
128
+ expect(Clearance::Configuration.new.url_after_denied_access_when_signed_out).to be_nil
129
+ end
130
+ end
131
+
132
+ context "when url_after_denied_access_when_signed_out value is specified" do
133
+ it "returns the url_after_denied_access_when_signed_out value" do
134
+ Clearance.configure { |config| config.url_after_denied_access_when_signed_out = "/redirect" }
135
+
136
+ expect(Clearance.configuration.url_after_denied_access_when_signed_out).to eq "/redirect"
137
+ end
138
+ end
139
+
112
140
  context "when specifying sign in guards" do
113
141
  it "returns the stack with added guards" do
114
142
  DummyGuard = Class.new
@@ -33,7 +33,7 @@ describe Clearance::PasswordsController do
33
33
  }
34
34
 
35
35
  email = ActionMailer::Base.deliveries.last
36
- expect(email.subject).to match(/change your password/i)
36
+ expect(email.subject).to match(translated_string("passwords.edit.title"))
37
37
  end
38
38
 
39
39
  it "re-renders the page when turbo is enabled" do
@@ -53,7 +53,7 @@ describe Clearance::PasswordsController do
53
53
  password: {},
54
54
  }
55
55
 
56
- expect(flash.now[:alert]).to match(/email can't be blank/i)
56
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_missing_email"))
57
57
  expect(response).to render_template(:new)
58
58
  end
59
59
 
@@ -74,7 +74,7 @@ describe Clearance::PasswordsController do
74
74
  },
75
75
  }
76
76
 
77
- expect(flash.now[:alert]).to match(/email can't be blank/i)
77
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_missing_email"))
78
78
  expect(response).to render_template(:new)
79
79
  end
80
80
 
@@ -164,7 +164,7 @@ describe Clearance::PasswordsController do
164
164
  }
165
165
 
166
166
  expect(response).to render_template(:new)
167
- expect(flash.now[:alert]).to match(/double check the URL/i)
167
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_forbidden"))
168
168
  end
169
169
  end
170
170
 
@@ -178,7 +178,7 @@ describe Clearance::PasswordsController do
178
178
  }
179
179
 
180
180
  expect(response).to render_template(:new)
181
- expect(flash.now[:alert]).to match(/double check the URL/i)
181
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_forbidden"))
182
182
  end
183
183
  end
184
184
 
@@ -278,7 +278,7 @@ describe Clearance::PasswordsController do
278
278
  new_password: "",
279
279
  )
280
280
 
281
- expect(flash.now[:alert]).to match(/password can't be blank/i)
281
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_after_update"))
282
282
  expect(response).to have_http_status(:unprocessable_entity)
283
283
  expect(response).to render_template(:edit)
284
284
  end
@@ -58,7 +58,7 @@ describe PermissionsController do
58
58
  it "denies access to show and display a flash message" do
59
59
  get :show
60
60
 
61
- expect(flash[:alert]).to match(/^Please sign in to continue/)
61
+ expect(flash[:alert]).to match(translated_string("flashes.failure_when_not_signed_in"))
62
62
  end
63
63
  end
64
64
 
@@ -41,7 +41,7 @@ describe Clearance::SessionsController do
41
41
  }
42
42
 
43
43
  expect(response).to render_template(:new)
44
- expect(flash[:alert]).to match(/^Bad email or password/)
44
+ expect(flash[:alert]).to match(translated_string("flashes.failure_after_create"))
45
45
  end
46
46
  end
47
47
 
@@ -118,6 +118,12 @@ describe Clearance::SessionsController do
118
118
  end
119
119
 
120
120
  describe "on DELETE to #destroy" do
121
+ let(:configured_redirect_url) { nil }
122
+
123
+ before do
124
+ Clearance.configure { |config| config.url_after_destroy = configured_redirect_url }
125
+ end
126
+
121
127
  context "given a signed out user" do
122
128
  before do
123
129
  sign_out
@@ -126,6 +132,12 @@ describe Clearance::SessionsController do
126
132
 
127
133
  it { should redirect_to_url_after_destroy }
128
134
  it { expect(response).to have_http_status(:see_other) }
135
+
136
+ context "when the custom redirect URL is set" do
137
+ let(:configured_redirect_url) { "/redirected" }
138
+
139
+ it { should redirect_to(configured_redirect_url) }
140
+ end
129
141
  end
130
142
 
131
143
  context "with a cookie" do
@@ -145,6 +157,12 @@ describe Clearance::SessionsController do
145
157
  it "should unset the current user" do
146
158
  expect(request.env[:clearance].current_user).to be_nil
147
159
  end
160
+
161
+ context "when the custom redirect URL is set" do
162
+ let(:configured_redirect_url) { "/redirected" }
163
+
164
+ it { should redirect_to(configured_redirect_url) }
165
+ end
148
166
  end
149
167
  end
150
168
  end
@@ -19,12 +19,6 @@ module Dummy
19
19
  config.paths["log"] = "tmp/log/development.log"
20
20
  config.paths.add "config/routes.rb", with: "#{APP_ROOT}/config/routes.rb"
21
21
 
22
- if Rails.version.match?(/^6.0/)
23
- config.active_record.sqlite3.represent_boolean_as_integer = true
24
- else
25
- config.active_record.legacy_connection_handling = false
26
- end
27
-
28
22
  def require_environment!
29
23
  initialize!
30
24
  end
@@ -40,7 +40,7 @@ describe "Cookie options" do
40
40
  it { should_have_one_remember_token }
41
41
 
42
42
  it "should have the httponly flag set" do
43
- expect(remember_token_cookies.last).to match(/HttpOnly/)
43
+ expect(remember_token_cookies.last.downcase).to match(/httponly/)
44
44
  end
45
45
  end
46
46
  end
@@ -36,7 +36,7 @@ RSpec::Matchers.define :set_cookie do |name, expected_value, expected_expires_at
36
36
  end
37
37
 
38
38
  def extract_cookies
39
- @cookie_headers = @headers['Set-Cookie'] || []
39
+ @cookie_headers = @headers["Set-Cookie"] || @headers["set-cookie"] || []
40
40
  @cookie_headers = [@cookie_headers] if @cookie_headers.respond_to?(:to_str)
41
41
  end
42
42
 
@@ -0,0 +1,13 @@
1
+ module HTMLEscapeHelper
2
+ def translated_string(key)
3
+ if Rails.version >= "7.0"
4
+ ERB::Util.html_escape_once(I18n.t(key))
5
+ else
6
+ I18n.t(key)
7
+ end
8
+ end
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ config.include HTMLEscapeHelper
13
+ end
@@ -16,7 +16,8 @@ module RememberTokenHelpers
16
16
  end
17
17
 
18
18
  def remember_token_cookies
19
- cookie_lines = headers["Set-Cookie"].lines.map(&:chomp)
19
+ set_cookie_header = headers["Set-Cookie"] || headers["set-cookie"]
20
+ cookie_lines = Array(set_cookie_header).join("\n").lines.map(&:chomp)
20
21
  cookie_lines.select { |name| name =~ /^remember_token/ }
21
22
  end
22
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clearance
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Croak
@@ -26,7 +26,7 @@ authors:
26
26
  autorequire:
27
27
  bindir: bin
28
28
  cert_chain: []
29
- date: 2022-09-23 00:00:00.000000000 Z
29
+ date: 2024-04-19 00:00:00.000000000 Z
30
30
  dependencies:
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: bcrypt
@@ -146,11 +146,13 @@ extra_rdoc_files:
146
146
  - README.md
147
147
  files:
148
148
  - ".erb-lint.yml"
149
+ - ".github/workflows/dynamic-readme.yml"
149
150
  - ".github/workflows/tests.yml"
150
151
  - ".gitignore"
151
152
  - ".yardopts"
152
153
  - Appraisals
153
154
  - CHANGELOG.md
155
+ - CODEOWNERS
154
156
  - CONTRIBUTING.md
155
157
  - Gemfile
156
158
  - Gemfile.lock
@@ -181,12 +183,9 @@ files:
181
183
  - config/routes.rb
182
184
  - db/migrate/20110111224543_create_clearance_users.rb
183
185
  - db/schema.rb
184
- - gemfiles/rails_5.0.gemfile
185
- - gemfiles/rails_5.1.gemfile
186
- - gemfiles/rails_5.2.gemfile
187
- - gemfiles/rails_6.0.gemfile
188
186
  - gemfiles/rails_6.1.gemfile
189
187
  - gemfiles/rails_7.0.gemfile
188
+ - gemfiles/rails_7.1.gemfile
190
189
  - lib/clearance.rb
191
190
  - lib/clearance/authentication.rb
192
191
  - lib/clearance/authorization.rb
@@ -292,6 +291,7 @@ files:
292
291
  - spec/support/fake_model_with_password_strategy.rb
293
292
  - spec/support/fake_model_without_password_strategy.rb
294
293
  - spec/support/generator_spec_helpers.rb
294
+ - spec/support/html_escape_helper.rb
295
295
  - spec/support/request_with_remember_token.rb
296
296
  - spec/views/view_helpers_spec.rb
297
297
  homepage: https://github.com/thoughtbot/clearance
@@ -1,21 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "addressable"
6
- gem "ammeter"
7
- gem "appraisal"
8
- gem "capybara", ">= 2.6.2", "< 3.33.0"
9
- gem "database_cleaner"
10
- gem "erb_lint", require: false
11
- gem "factory_bot_rails"
12
- gem "nokogiri"
13
- gem "pry", require: false
14
- gem "rails-controller-testing"
15
- gem "rspec-rails", "~> 3.1"
16
- gem "shoulda-matchers"
17
- gem "sqlite3", "~> 1.3.13"
18
- gem "timecop"
19
- gem "railties", "~> 5.0"
20
-
21
- gemspec path: "../"
@@ -1,21 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "addressable"
6
- gem "ammeter"
7
- gem "appraisal"
8
- gem "capybara"
9
- gem "database_cleaner"
10
- gem "erb_lint", require: false
11
- gem "factory_bot_rails"
12
- gem "nokogiri"
13
- gem "pry", require: false
14
- gem "rails-controller-testing"
15
- gem "rspec-rails"
16
- gem "shoulda-matchers"
17
- gem "sqlite3"
18
- gem "timecop"
19
- gem "railties", "~> 5.2"
20
-
21
- gemspec path: "../"
@@ -1,23 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "addressable"
6
- gem "ammeter"
7
- gem "appraisal"
8
- gem "capybara"
9
- gem "database_cleaner"
10
- gem "erb_lint", require: false
11
- gem "factory_bot_rails"
12
- gem "nokogiri"
13
- gem "pry", require: false
14
- gem "rails-controller-testing"
15
- gem "rspec-rails"
16
- gem "shoulda-matchers"
17
- gem "sqlite3"
18
- gem "timecop"
19
- gem "railties", "~> 6.0"
20
- gem "net-smtp", require: false
21
- gem "psych", "< 4"
22
-
23
- gemspec path: "../"