devise-secure_password 1.0.6 → 2.0.1
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 +5 -5
- data/Changelog.md +39 -4
- data/Dockerfile +1 -1
- data/Dockerfile.prev +3 -3
- data/Gemfile +2 -1
- data/Gemfile.lock +218 -214
- data/README.md +33 -10
- data/app/controllers/devise/passwords_with_policy_controller.rb +55 -14
- data/app/views/devise/passwords_with_policy/edit.html.erb +5 -1
- data/config/locales/en.yml +51 -0
- data/devise-secure_password.gemspec +22 -23
- data/gemfiles/rails_6_0.gemfile +57 -0
- data/gemfiles/rails_6_0.gemfile.lock +347 -0
- data/gemfiles/rails_6_1.gemfile +57 -0
- data/gemfiles/rails_6_1.gemfile.lock +352 -0
- data/lib/devise/secure_password.rb +4 -9
- data/lib/devise/secure_password/controllers/devise_helpers.rb +4 -50
- data/lib/devise/secure_password/controllers/helpers.rb +58 -0
- data/lib/devise/secure_password/grammar.rb +13 -0
- data/lib/devise/secure_password/models/password_disallows_frequent_changes.rb +3 -1
- data/lib/devise/secure_password/models/password_disallows_frequent_reuse.rb +1 -0
- data/lib/devise/secure_password/models/password_has_required_content.rb +53 -15
- data/lib/devise/secure_password/models/password_requires_regular_updates.rb +0 -2
- data/lib/devise/secure_password/version.rb +1 -1
- data/lib/support/string/character_counter.rb +3 -1
- data/pkg/devise-secure_password-2.0.0.gem +0 -0
- data/pkg/devise-secure_password-2.0.1.gem +0 -0
- metadata +67 -169
- data/coverage/assets/0.10.2/application.css +0 -799
- data/coverage/assets/0.10.2/application.js +0 -1707
- data/coverage/assets/0.10.2/colorbox/border.png +0 -0
- data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
- data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
- data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.10.2/favicon_green.png +0 -0
- data/coverage/assets/0.10.2/favicon_red.png +0 -0
- data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
- data/coverage/assets/0.10.2/loading.gif +0 -0
- data/coverage/assets/0.10.2/magnify.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +0 -4115
- data/devise-secure_password-1.0.0.gem +0 -0
- data/gemfiles/rails-5_0_6.gemfile +0 -17
- data/gemfiles/rails-5_0_6.gemfile.lock +0 -286
- data/gemfiles/rails-5_1_4.gemfile +0 -16
- data/gemfiles/rails-5_1_4.gemfile.lock +0 -282
- data/lib/devise/secure_password/controllers/active_helpers.rb +0 -45
- data/lib/devise/secure_password/hooks/password_requires_regular_updates.rb +0 -5
- data/pkg/devise-secure_password-1.0.3.gem +0 -0
- data/pkg/devise-secure_password-1.0.4.gem +0 -0
- data/pkg/devise-secure_password-1.0.5.gem +0 -0
data/README.md
CHANGED
@@ -9,7 +9,7 @@ as well.
|
|
9
9
|
|
10
10
|
## Build Status
|
11
11
|
|
12
|
-
| Service | rails
|
12
|
+
| Service | rails 6.1 |
|
13
13
|
|:-----------|:-----------:|
|
14
14
|
| Circle CI | []() |
|
15
15
|
|
@@ -32,16 +32,16 @@ The goal of this project is to provide compatibility for officially supported st
|
|
32
32
|
and [Ruby on Rails](http://guides.rubyonrails.org/maintenance_policy.html). More specifically, the following releases
|
33
33
|
are currently supported by the __Devise Secure Password Extension__:
|
34
34
|
|
35
|
-
- Ruby on Rails:
|
36
|
-
- Ruby:
|
35
|
+
- Ruby on Rails: __6.1.x__, __6.0.x__ (current and previous stable release)
|
36
|
+
- Ruby: __3.0.x__, __2.7.x__ (current and previous stable release)
|
37
37
|
|
38
38
|
## Installation
|
39
39
|
|
40
40
|
Add this line to your application's Gemfile:
|
41
41
|
|
42
42
|
```ruby
|
43
|
-
gem 'devise', '~> 4.
|
44
|
-
gem 'devise-secure_password', '~>
|
43
|
+
gem 'devise', '~> 4.7'
|
44
|
+
gem 'devise-secure_password', '~> 2.0'
|
45
45
|
```
|
46
46
|
|
47
47
|
And then execute:
|
@@ -228,14 +228,14 @@ To determine the Ruby on Rails versions supported by this release, run the follo
|
|
228
228
|
prompt> gem install flay ruby2ruby rubocop rspec
|
229
229
|
prompt> rake test:spec:targets
|
230
230
|
|
231
|
-
Available Rails targets: 5.
|
231
|
+
Available Rails targets: 5.1, 5.2
|
232
232
|
```
|
233
233
|
|
234
234
|
Reconfigure the project by specifying the correct Gemfile when running bundler, followed by running tests:
|
235
235
|
|
236
236
|
```bash
|
237
|
-
prompt> BUNDLE_GEMFILE=gemfiles/
|
238
|
-
prompt> BUNDLE_GEMFILE=gemfiles/
|
237
|
+
prompt> BUNDLE_GEMFILE=gemfiles/rails_5_2.gemfile bundle
|
238
|
+
prompt> BUNDLE_GEMFILE=gemfiles/rails_5_2.gemfile bundle exec rake
|
239
239
|
```
|
240
240
|
|
241
241
|
The only time you need to define the `BUNDLE_GEMFILE` environment variable is when testing a non-default target.
|
@@ -260,11 +260,23 @@ for testing.
|
|
260
260
|
prompt> brew install chromedriver
|
261
261
|
```
|
262
262
|
|
263
|
-
>NOTE: __ChromeDriver__ < 2.33 has a bug for testing clickable targets; therefore, install >= 2.3.4.
|
264
|
-
|
265
263
|
You can always install [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) by downloading and then
|
266
264
|
unpacking into the `/usr/local/bin` directory.
|
267
265
|
|
266
|
+
#### Automated screenshots on failure
|
267
|
+
|
268
|
+
The [capybara-screenshot gem](https://github.com/mattheworiordan/capybara-screenshot) supports automated screenshot
|
269
|
+
captures on failing tests but this will only take place for tests that have JavaScript enabled. You can temporarily
|
270
|
+
modify an example by setting `js: true` as in the following example:
|
271
|
+
|
272
|
+
```ruby
|
273
|
+
context 'when minimum age enforcement is enabled', js: true do
|
274
|
+
...
|
275
|
+
end
|
276
|
+
```
|
277
|
+
|
278
|
+
Do not submit pull requests with this setting enabled where it wasn't enabled previously.
|
279
|
+
|
268
280
|
### Testing inside the spec/rails-app-X_y_z
|
269
281
|
|
270
282
|
To debug from inside of the dummy rails-app you will need to first install the rails bin stubs and then perform a db
|
@@ -325,6 +337,17 @@ initiating any development work including tests.
|
|
325
337
|
prompt> gem update bundler
|
326
338
|
```
|
327
339
|
|
340
|
+
#### Updating test.sqlite3.db
|
341
|
+
|
342
|
+
To update or generate a `db/test/sqlite3.db` database file:
|
343
|
+
|
344
|
+
```bash
|
345
|
+
prompt> cd spec/rails-app-X_y_z
|
346
|
+
prompt> bundle install
|
347
|
+
prompt> rake app:update:bin
|
348
|
+
prompt> RAILS_ENV=test bundle exec rake db:migrate
|
349
|
+
```
|
350
|
+
|
328
351
|
## Contributing
|
329
352
|
|
330
353
|
Bug reports and pull requests are welcome on GitHub at https://github.com/valimail/devise-secure_password. This project
|
@@ -1,26 +1,31 @@
|
|
1
1
|
module Devise
|
2
|
-
class PasswordsWithPolicyController <
|
3
|
-
before_action :
|
2
|
+
class PasswordsWithPolicyController < Devise::RegistrationsController
|
3
|
+
before_action :configure_permitted_parameters
|
4
4
|
|
5
5
|
def edit
|
6
6
|
self.resource = resource_class.new
|
7
|
-
|
8
|
-
resource.errors.add(:base, "#{error_string_for_password_expired}.")
|
9
|
-
end
|
7
|
+
resource.errors.add(:base, "#{error_string_for_password_expired}.")
|
10
8
|
render :edit
|
11
9
|
end
|
12
10
|
|
13
11
|
def update
|
14
|
-
if resource
|
12
|
+
if update_resource(resource, account_update_params)
|
15
13
|
prepare_for_redirect
|
16
14
|
redirect_to stored_location_for(scope_name) || :root
|
17
15
|
else
|
18
|
-
clean_up_passwords(resource)
|
19
16
|
render :edit
|
20
17
|
end
|
21
18
|
end
|
22
19
|
|
23
|
-
|
20
|
+
def devise_parameter_sanitizer
|
21
|
+
@devise_parameter_sanitizer ||= Devise::ParameterSanitizer.new(resource_class, resource_name, params)
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def account_update_params
|
27
|
+
devise_parameter_sanitizer.sanitize(:account_update)
|
28
|
+
end
|
24
29
|
|
25
30
|
def authenticate_scope!
|
26
31
|
send(:"authenticate_#{scope_name}!")
|
@@ -31,22 +36,58 @@ module Devise
|
|
31
36
|
I18n.t('secure_password.password_requires_regular_updates.alerts.messages.password_updated')
|
32
37
|
end
|
33
38
|
|
39
|
+
def configure_permitted_parameters
|
40
|
+
devise_parameter_sanitizer.permit(:account_update, keys: [:update_action])
|
41
|
+
end
|
42
|
+
|
34
43
|
def error_string_for_password_expired
|
35
44
|
return 'password expired' unless warden.user.class.respond_to?(:password_maximum_age)
|
45
|
+
|
36
46
|
I18n.t(
|
37
47
|
'secure_password.password_requires_regular_updates.errors.messages.password_expired',
|
38
|
-
timeframe:
|
48
|
+
timeframe: precise_distance_of_time_in_words(warden.user.class.password_maximum_age)
|
39
49
|
)
|
40
50
|
end
|
41
51
|
|
42
|
-
def password_params
|
43
|
-
params.require(scope_name).permit(:current_password, :password, :password_confirmation)
|
44
|
-
end
|
45
|
-
|
46
52
|
def prepare_for_redirect
|
47
|
-
|
53
|
+
unset_devise_secure_password_expired!
|
48
54
|
flash[:notice] = alert_string_for_password_updated
|
49
55
|
bypass_sign_in resource, scope: scope_name
|
50
56
|
end
|
57
|
+
|
58
|
+
def update_resource(resource, params)
|
59
|
+
update_action = (params[:update_action] ? params.delete(:update_action) : nil)
|
60
|
+
return false unless update_action == 'change_password'
|
61
|
+
|
62
|
+
update_password(resource, params)
|
63
|
+
|
64
|
+
# do what devise would do under normal circumstances but also be aware of
|
65
|
+
# secure_password or other validators that would be ignored by devise.
|
66
|
+
result = if resource.errors.count.zero?
|
67
|
+
resource.update(params)
|
68
|
+
else
|
69
|
+
false
|
70
|
+
end
|
71
|
+
|
72
|
+
resource.clean_up_passwords
|
73
|
+
result
|
74
|
+
end
|
75
|
+
|
76
|
+
def update_password(resource, params)
|
77
|
+
#
|
78
|
+
# order of operations that follow is absolutely critical
|
79
|
+
#
|
80
|
+
current_password = params.delete(:current_password)
|
81
|
+
current_password_valid = resource.valid_password?(current_password)
|
82
|
+
|
83
|
+
# let our installed validator chain handle the validation work
|
84
|
+
resource.assign_attributes(params)
|
85
|
+
resource.valid?
|
86
|
+
unless current_password_valid
|
87
|
+
resource.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
|
88
|
+
end
|
89
|
+
|
90
|
+
resource
|
91
|
+
end
|
51
92
|
end
|
52
93
|
end
|
@@ -1,7 +1,11 @@
|
|
1
1
|
<h2><%= t('.titles.section_title') %></h2>
|
2
2
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: [resource_name, :password_with_policy], html: { method: :put }) do |f| %>
|
4
|
-
|
4
|
+
<% if resource.errors.full_messages.count.positive? %>
|
5
|
+
<%= render 'devise/shared/error_messages', resource: resource %>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<%= f.hidden_field :update_action, value: :change_password %>
|
5
9
|
|
6
10
|
<p><%= f.label :current_password, t('.labels.current_password') %><br />
|
7
11
|
<%= f.password_field :current_password %></p>
|
data/config/locales/en.yml
CHANGED
@@ -1,11 +1,24 @@
|
|
1
1
|
en:
|
2
2
|
secure_password:
|
3
|
+
character:
|
4
|
+
one: "character"
|
5
|
+
other: "characters"
|
6
|
+
|
7
|
+
types:
|
8
|
+
uppercase: "uppercase"
|
9
|
+
downcase: "downcase"
|
10
|
+
lowercase: "lowercase"
|
11
|
+
number: "number"
|
12
|
+
special: "special"
|
13
|
+
|
3
14
|
password_has_required_content:
|
4
15
|
errors:
|
5
16
|
messages:
|
6
17
|
unknown_characters: "contains %{count} invalid %{subject}"
|
7
18
|
minimum_characters: "must contain at least %{count} %{type} %{subject}"
|
8
19
|
maximum_characters: "must contain less than %{count} %{type} %{subject}"
|
20
|
+
minimum_length: "must contain at least %{count} %{subject}"
|
21
|
+
maximum_length: "must contain less than %{count} %{subject}"
|
9
22
|
password_disallows_frequent_reuse:
|
10
23
|
errors:
|
11
24
|
messages:
|
@@ -21,6 +34,44 @@ en:
|
|
21
34
|
errors:
|
22
35
|
messages:
|
23
36
|
password_expired: "Your password has expired. Passwords must be changed every %{timeframe}"
|
37
|
+
datetime:
|
38
|
+
# update distance_in_words translations to remove the determiner words:
|
39
|
+
# about, almost, over, less than, etc.
|
40
|
+
precise_distance_in_words:
|
41
|
+
half_a_minute: "half a minute"
|
42
|
+
less_than_x_seconds:
|
43
|
+
one: "1 second" # default was: "less than 1 second"
|
44
|
+
other: "%{count} seconds" # default was: "less than %{count} seconds"
|
45
|
+
x_seconds:
|
46
|
+
one: "1 second"
|
47
|
+
other: "%{count} seconds"
|
48
|
+
less_than_x_minutes:
|
49
|
+
one: "a minute" # default was: "less than a minute"
|
50
|
+
other: "%{count} minutes" # default was: "less than %{count} minutes"
|
51
|
+
x_minutes:
|
52
|
+
one: "1 minute"
|
53
|
+
other: "%{count} minutes"
|
54
|
+
about_x_hours:
|
55
|
+
one: "1 hour" # default was: "about 1 hour"
|
56
|
+
other: "%{count} hours" # default was: "about %{count} hours"
|
57
|
+
x_days:
|
58
|
+
one: "1 day"
|
59
|
+
other: "%{count} days"
|
60
|
+
about_x_months:
|
61
|
+
one: "1 month" # default was: "about 1 month"
|
62
|
+
other: "%{count} months" # default was: "about %{count} months"
|
63
|
+
x_months:
|
64
|
+
one: "1 month"
|
65
|
+
other: "%{count} months"
|
66
|
+
about_x_years:
|
67
|
+
one: "1 year" # default was: "about 1 year"
|
68
|
+
other: "%{count} years" # default was: "about %{count} years"
|
69
|
+
over_x_years:
|
70
|
+
one: "1 year" # default was: "over 1 year"
|
71
|
+
other: "%{count} years" # default was: "over %{count} years"
|
72
|
+
almost_x_years:
|
73
|
+
one: "1 year" # default was: "almost 1 year"
|
74
|
+
other: "%{count} years" # default was: "almost %{count} years"
|
24
75
|
devise:
|
25
76
|
passwords_with_policy:
|
26
77
|
edit:
|
@@ -29,29 +29,28 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.require_paths = ['lib']
|
30
30
|
|
31
31
|
spec.add_runtime_dependency 'devise', '>= 4.0.0', '< 5.0.0'
|
32
|
-
spec.add_runtime_dependency 'railties', '>= 5.0.0', '<
|
32
|
+
spec.add_runtime_dependency 'railties', '>= 5.0.0', '< 7.0.0'
|
33
33
|
|
34
|
-
spec.add_development_dependency 'bundler', '
|
35
|
-
spec.add_development_dependency 'capybara', '
|
36
|
-
spec.add_development_dependency 'capybara-screenshot', '
|
37
|
-
spec.add_development_dependency '
|
38
|
-
spec.add_development_dependency 'database_cleaner', '~> 1.6', '>= 1.6.2'
|
34
|
+
spec.add_development_dependency 'bundler', '>= 2.2.14'
|
35
|
+
spec.add_development_dependency 'capybara', '>= 3.35.3'
|
36
|
+
spec.add_development_dependency 'capybara-screenshot', '>= 1.0.18'
|
37
|
+
spec.add_development_dependency 'database_cleaner', '>= 2.0.1'
|
39
38
|
spec.add_development_dependency 'devise', '~> 4.0'
|
40
|
-
spec.add_development_dependency 'flay', '
|
41
|
-
spec.add_development_dependency 'launchy', '
|
42
|
-
spec.add_development_dependency 'rails', '
|
43
|
-
spec.add_development_dependency 'rake', '
|
44
|
-
spec.add_development_dependency 'rspec', '
|
45
|
-
spec.add_development_dependency '
|
46
|
-
spec.add_development_dependency '
|
47
|
-
spec.add_development_dependency 'rubocop', '>= 0.
|
48
|
-
spec.add_development_dependency '
|
49
|
-
spec.add_development_dependency '
|
50
|
-
spec.add_development_dependency '
|
51
|
-
spec.add_development_dependency '
|
52
|
-
spec.add_development_dependency 'simplecov
|
53
|
-
spec.add_development_dependency '
|
54
|
-
spec.add_development_dependency '
|
55
|
-
|
56
|
-
spec.required_ruby_version = '>= 2.
|
39
|
+
spec.add_development_dependency 'flay', '>= 2.10.0'
|
40
|
+
spec.add_development_dependency 'launchy', '>= 2.4.3'
|
41
|
+
spec.add_development_dependency 'rails', '>= 5.2.0'
|
42
|
+
spec.add_development_dependency 'rake', '>= 12.3'
|
43
|
+
spec.add_development_dependency 'rspec', '>= 3.7'
|
44
|
+
spec.add_development_dependency 'rspec_junit_formatter', '>= 0.3'
|
45
|
+
spec.add_development_dependency 'rspec-rails', '>= 3.7'
|
46
|
+
spec.add_development_dependency 'rubocop', '>= 1.0.0'
|
47
|
+
spec.add_development_dependency 'rubocop-rails', '>= 2.3.2'
|
48
|
+
spec.add_development_dependency 'rubocop-rspec', '>= 1.35.0'
|
49
|
+
spec.add_development_dependency 'ruby2ruby', '>= 2.4.0'
|
50
|
+
spec.add_development_dependency 'selenium-webdriver', '>= 3.7.0'
|
51
|
+
spec.add_development_dependency 'simplecov', '>= 0.18.2'
|
52
|
+
spec.add_development_dependency 'simplecov-console', '>= 0.4.2'
|
53
|
+
spec.add_development_dependency 'sqlite3', '>= 1.3.13'
|
54
|
+
|
55
|
+
spec.required_ruby_version = '>= 2.7'
|
57
56
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
+
|
4
|
+
ENV['RAILS_TARGET'] ||= '6.0'
|
5
|
+
|
6
|
+
gemspec path: '../'
|
7
|
+
|
8
|
+
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
|
9
|
+
gem 'rails', '~> 6.0.3', '>= 6.0.3.6'
|
10
|
+
# Use sqlite3 as the database for Active Record
|
11
|
+
gem 'sqlite3', '~> 1.4'
|
12
|
+
# Use Puma as the app server
|
13
|
+
gem 'puma', '~> 4.1'
|
14
|
+
# Use SCSS for stylesheets
|
15
|
+
gem 'sass-rails', '>= 6'
|
16
|
+
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
|
17
|
+
gem 'webpacker', '~> 4.0'
|
18
|
+
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
|
19
|
+
gem 'turbolinks', '~> 5'
|
20
|
+
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
|
21
|
+
gem 'jbuilder', '~> 2.7'
|
22
|
+
# Use Redis adapter to run Action Cable in production
|
23
|
+
# gem 'redis', '~> 4.0'
|
24
|
+
# Use Active Model has_secure_password
|
25
|
+
# gem 'bcrypt', '~> 3.1.7'
|
26
|
+
|
27
|
+
# Use Active Storage variant
|
28
|
+
# gem 'image_processing', '~> 1.2'
|
29
|
+
|
30
|
+
# Reduces boot times through caching; required in config/boot.rb
|
31
|
+
gem 'bootsnap', '>= 1.4.2', require: false
|
32
|
+
|
33
|
+
group :development, :test do
|
34
|
+
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
|
35
|
+
gem 'byebug', platforms: %i(mri mingw x64_mingw)
|
36
|
+
end
|
37
|
+
|
38
|
+
group :development do
|
39
|
+
# Access an interactive console on exception pages or by calling 'console' anywhere in the code.
|
40
|
+
gem 'listen', '~> 3.2'
|
41
|
+
gem 'web-console', '>= 3.3.0'
|
42
|
+
end
|
43
|
+
|
44
|
+
group :test do
|
45
|
+
# Adds support for Capybara system testing and selenium driver
|
46
|
+
gem 'capybara', '>= 2.15'
|
47
|
+
gem 'codecov', require: false
|
48
|
+
gem 'selenium-webdriver'
|
49
|
+
gem 'shoulda-matchers'
|
50
|
+
# Easy installation and use of web drivers to run system tests with browsers
|
51
|
+
gem 'webdrivers'
|
52
|
+
end
|
53
|
+
|
54
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
55
|
+
gem 'tzinfo-data', platforms: %i(mingw mswin x64_mingw jruby)
|
56
|
+
|
57
|
+
gem 'webrick', '~> 1.7'
|
@@ -0,0 +1,347 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
devise-secure_password (1.1.0)
|
5
|
+
devise (>= 4.0.0, < 5.0.0)
|
6
|
+
railties (>= 5.0.0, < 7.0.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
actioncable (6.0.3.6)
|
12
|
+
actionpack (= 6.0.3.6)
|
13
|
+
nio4r (~> 2.0)
|
14
|
+
websocket-driver (>= 0.6.1)
|
15
|
+
actionmailbox (6.0.3.6)
|
16
|
+
actionpack (= 6.0.3.6)
|
17
|
+
activejob (= 6.0.3.6)
|
18
|
+
activerecord (= 6.0.3.6)
|
19
|
+
activestorage (= 6.0.3.6)
|
20
|
+
activesupport (= 6.0.3.6)
|
21
|
+
mail (>= 2.7.1)
|
22
|
+
actionmailer (6.0.3.6)
|
23
|
+
actionpack (= 6.0.3.6)
|
24
|
+
actionview (= 6.0.3.6)
|
25
|
+
activejob (= 6.0.3.6)
|
26
|
+
mail (~> 2.5, >= 2.5.4)
|
27
|
+
rails-dom-testing (~> 2.0)
|
28
|
+
actionpack (6.0.3.6)
|
29
|
+
actionview (= 6.0.3.6)
|
30
|
+
activesupport (= 6.0.3.6)
|
31
|
+
rack (~> 2.0, >= 2.0.8)
|
32
|
+
rack-test (>= 0.6.3)
|
33
|
+
rails-dom-testing (~> 2.0)
|
34
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
35
|
+
actiontext (6.0.3.6)
|
36
|
+
actionpack (= 6.0.3.6)
|
37
|
+
activerecord (= 6.0.3.6)
|
38
|
+
activestorage (= 6.0.3.6)
|
39
|
+
activesupport (= 6.0.3.6)
|
40
|
+
nokogiri (>= 1.8.5)
|
41
|
+
actionview (6.0.3.6)
|
42
|
+
activesupport (= 6.0.3.6)
|
43
|
+
builder (~> 3.1)
|
44
|
+
erubi (~> 1.4)
|
45
|
+
rails-dom-testing (~> 2.0)
|
46
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
47
|
+
activejob (6.0.3.6)
|
48
|
+
activesupport (= 6.0.3.6)
|
49
|
+
globalid (>= 0.3.6)
|
50
|
+
activemodel (6.0.3.6)
|
51
|
+
activesupport (= 6.0.3.6)
|
52
|
+
activerecord (6.0.3.6)
|
53
|
+
activemodel (= 6.0.3.6)
|
54
|
+
activesupport (= 6.0.3.6)
|
55
|
+
activestorage (6.0.3.6)
|
56
|
+
actionpack (= 6.0.3.6)
|
57
|
+
activejob (= 6.0.3.6)
|
58
|
+
activerecord (= 6.0.3.6)
|
59
|
+
marcel (~> 1.0.0)
|
60
|
+
activesupport (6.0.3.6)
|
61
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
62
|
+
i18n (>= 0.7, < 2)
|
63
|
+
minitest (~> 5.1)
|
64
|
+
tzinfo (~> 1.1)
|
65
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
66
|
+
addressable (2.7.0)
|
67
|
+
public_suffix (>= 2.0.2, < 5.0)
|
68
|
+
ansi (1.5.0)
|
69
|
+
ast (2.4.2)
|
70
|
+
bcrypt (3.1.16)
|
71
|
+
bindex (0.8.1)
|
72
|
+
bootsnap (1.7.4)
|
73
|
+
msgpack (~> 1.0)
|
74
|
+
builder (3.2.4)
|
75
|
+
byebug (11.1.3)
|
76
|
+
capybara (3.35.3)
|
77
|
+
addressable
|
78
|
+
mini_mime (>= 0.1.3)
|
79
|
+
nokogiri (~> 1.8)
|
80
|
+
rack (>= 1.6.0)
|
81
|
+
rack-test (>= 0.6.3)
|
82
|
+
regexp_parser (>= 1.5, < 3.0)
|
83
|
+
xpath (~> 3.2)
|
84
|
+
capybara-screenshot (1.0.25)
|
85
|
+
capybara (>= 1.0, < 4)
|
86
|
+
launchy
|
87
|
+
childprocess (3.0.0)
|
88
|
+
codecov (0.5.2)
|
89
|
+
simplecov (>= 0.15, < 0.22)
|
90
|
+
concurrent-ruby (1.1.8)
|
91
|
+
crass (1.0.6)
|
92
|
+
database_cleaner (2.0.1)
|
93
|
+
database_cleaner-active_record (~> 2.0.0)
|
94
|
+
database_cleaner-active_record (2.0.0)
|
95
|
+
activerecord (>= 5.a)
|
96
|
+
database_cleaner-core (~> 2.0.0)
|
97
|
+
database_cleaner-core (2.0.1)
|
98
|
+
devise (4.8.0)
|
99
|
+
bcrypt (~> 3.0)
|
100
|
+
orm_adapter (~> 0.1)
|
101
|
+
railties (>= 4.1.0)
|
102
|
+
responders
|
103
|
+
warden (~> 1.2.3)
|
104
|
+
diff-lcs (1.4.4)
|
105
|
+
docile (1.3.5)
|
106
|
+
erubi (1.10.0)
|
107
|
+
erubis (2.7.0)
|
108
|
+
ffi (1.15.0)
|
109
|
+
flay (2.12.1)
|
110
|
+
erubis (~> 2.7.0)
|
111
|
+
path_expander (~> 1.0)
|
112
|
+
ruby_parser (~> 3.0)
|
113
|
+
sexp_processor (~> 4.0)
|
114
|
+
globalid (0.4.2)
|
115
|
+
activesupport (>= 4.2.0)
|
116
|
+
i18n (1.8.10)
|
117
|
+
concurrent-ruby (~> 1.0)
|
118
|
+
jbuilder (2.11.2)
|
119
|
+
activesupport (>= 5.0.0)
|
120
|
+
launchy (2.5.0)
|
121
|
+
addressable (~> 2.7)
|
122
|
+
listen (3.5.1)
|
123
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
124
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
125
|
+
loofah (2.9.1)
|
126
|
+
crass (~> 1.0.2)
|
127
|
+
nokogiri (>= 1.5.9)
|
128
|
+
mail (2.7.1)
|
129
|
+
mini_mime (>= 0.1.1)
|
130
|
+
marcel (1.0.1)
|
131
|
+
method_source (1.0.0)
|
132
|
+
mini_mime (1.1.0)
|
133
|
+
mini_portile2 (2.5.1)
|
134
|
+
minitest (5.14.4)
|
135
|
+
msgpack (1.4.2)
|
136
|
+
nio4r (2.5.7)
|
137
|
+
nokogiri (1.11.3)
|
138
|
+
mini_portile2 (~> 2.5.0)
|
139
|
+
racc (~> 1.4)
|
140
|
+
orm_adapter (0.5.0)
|
141
|
+
parallel (1.20.1)
|
142
|
+
parser (3.0.1.1)
|
143
|
+
ast (~> 2.4.1)
|
144
|
+
path_expander (1.1.0)
|
145
|
+
public_suffix (4.0.6)
|
146
|
+
puma (4.3.7)
|
147
|
+
nio4r (~> 2.0)
|
148
|
+
racc (1.5.2)
|
149
|
+
rack (2.2.3)
|
150
|
+
rack-proxy (0.6.5)
|
151
|
+
rack
|
152
|
+
rack-test (1.1.0)
|
153
|
+
rack (>= 1.0, < 3)
|
154
|
+
rails (6.0.3.6)
|
155
|
+
actioncable (= 6.0.3.6)
|
156
|
+
actionmailbox (= 6.0.3.6)
|
157
|
+
actionmailer (= 6.0.3.6)
|
158
|
+
actionpack (= 6.0.3.6)
|
159
|
+
actiontext (= 6.0.3.6)
|
160
|
+
actionview (= 6.0.3.6)
|
161
|
+
activejob (= 6.0.3.6)
|
162
|
+
activemodel (= 6.0.3.6)
|
163
|
+
activerecord (= 6.0.3.6)
|
164
|
+
activestorage (= 6.0.3.6)
|
165
|
+
activesupport (= 6.0.3.6)
|
166
|
+
bundler (>= 1.3.0)
|
167
|
+
railties (= 6.0.3.6)
|
168
|
+
sprockets-rails (>= 2.0.0)
|
169
|
+
rails-dom-testing (2.0.3)
|
170
|
+
activesupport (>= 4.2.0)
|
171
|
+
nokogiri (>= 1.6)
|
172
|
+
rails-html-sanitizer (1.3.0)
|
173
|
+
loofah (~> 2.3)
|
174
|
+
railties (6.0.3.6)
|
175
|
+
actionpack (= 6.0.3.6)
|
176
|
+
activesupport (= 6.0.3.6)
|
177
|
+
method_source
|
178
|
+
rake (>= 0.8.7)
|
179
|
+
thor (>= 0.20.3, < 2.0)
|
180
|
+
rainbow (3.0.0)
|
181
|
+
rake (13.0.3)
|
182
|
+
rb-fsevent (0.10.4)
|
183
|
+
rb-inotify (0.10.1)
|
184
|
+
ffi (~> 1.0)
|
185
|
+
regexp_parser (2.1.1)
|
186
|
+
responders (3.0.1)
|
187
|
+
actionpack (>= 5.0)
|
188
|
+
railties (>= 5.0)
|
189
|
+
rexml (3.2.5)
|
190
|
+
rspec (3.10.0)
|
191
|
+
rspec-core (~> 3.10.0)
|
192
|
+
rspec-expectations (~> 3.10.0)
|
193
|
+
rspec-mocks (~> 3.10.0)
|
194
|
+
rspec-core (3.10.1)
|
195
|
+
rspec-support (~> 3.10.0)
|
196
|
+
rspec-expectations (3.10.1)
|
197
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
198
|
+
rspec-support (~> 3.10.0)
|
199
|
+
rspec-mocks (3.10.2)
|
200
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
201
|
+
rspec-support (~> 3.10.0)
|
202
|
+
rspec-rails (5.0.1)
|
203
|
+
actionpack (>= 5.2)
|
204
|
+
activesupport (>= 5.2)
|
205
|
+
railties (>= 5.2)
|
206
|
+
rspec-core (~> 3.10)
|
207
|
+
rspec-expectations (~> 3.10)
|
208
|
+
rspec-mocks (~> 3.10)
|
209
|
+
rspec-support (~> 3.10)
|
210
|
+
rspec-support (3.10.2)
|
211
|
+
rspec_junit_formatter (0.4.1)
|
212
|
+
rspec-core (>= 2, < 4, != 2.12.0)
|
213
|
+
rubocop (1.13.0)
|
214
|
+
parallel (~> 1.10)
|
215
|
+
parser (>= 3.0.0.0)
|
216
|
+
rainbow (>= 2.2.2, < 4.0)
|
217
|
+
regexp_parser (>= 1.8, < 3.0)
|
218
|
+
rexml
|
219
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
220
|
+
ruby-progressbar (~> 1.7)
|
221
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
222
|
+
rubocop-ast (1.5.0)
|
223
|
+
parser (>= 3.0.1.1)
|
224
|
+
rubocop-rails (2.9.1)
|
225
|
+
activesupport (>= 4.2.0)
|
226
|
+
rack (>= 1.1)
|
227
|
+
rubocop (>= 0.90.0, < 2.0)
|
228
|
+
rubocop-rspec (2.3.0)
|
229
|
+
rubocop (~> 1.0)
|
230
|
+
rubocop-ast (>= 1.1.0)
|
231
|
+
ruby-progressbar (1.11.0)
|
232
|
+
ruby2ruby (2.4.4)
|
233
|
+
ruby_parser (~> 3.1)
|
234
|
+
sexp_processor (~> 4.6)
|
235
|
+
ruby_parser (3.15.1)
|
236
|
+
sexp_processor (~> 4.9)
|
237
|
+
rubyzip (2.3.0)
|
238
|
+
sass-rails (6.0.0)
|
239
|
+
sassc-rails (~> 2.1, >= 2.1.1)
|
240
|
+
sassc (2.4.0)
|
241
|
+
ffi (~> 1.9)
|
242
|
+
sassc-rails (2.1.2)
|
243
|
+
railties (>= 4.0.0)
|
244
|
+
sassc (>= 2.0)
|
245
|
+
sprockets (> 3.0)
|
246
|
+
sprockets-rails
|
247
|
+
tilt
|
248
|
+
selenium-webdriver (3.142.7)
|
249
|
+
childprocess (>= 0.5, < 4.0)
|
250
|
+
rubyzip (>= 1.2.2)
|
251
|
+
sexp_processor (4.15.2)
|
252
|
+
shoulda-matchers (4.5.1)
|
253
|
+
activesupport (>= 4.2.0)
|
254
|
+
simplecov (0.21.2)
|
255
|
+
docile (~> 1.1)
|
256
|
+
simplecov-html (~> 0.11)
|
257
|
+
simplecov_json_formatter (~> 0.1)
|
258
|
+
simplecov-console (0.9.1)
|
259
|
+
ansi
|
260
|
+
simplecov
|
261
|
+
terminal-table
|
262
|
+
simplecov-html (0.12.3)
|
263
|
+
simplecov_json_formatter (0.1.3)
|
264
|
+
sprockets (4.0.2)
|
265
|
+
concurrent-ruby (~> 1.0)
|
266
|
+
rack (> 1, < 3)
|
267
|
+
sprockets-rails (3.2.2)
|
268
|
+
actionpack (>= 4.0)
|
269
|
+
activesupport (>= 4.0)
|
270
|
+
sprockets (>= 3.0.0)
|
271
|
+
sqlite3 (1.4.2)
|
272
|
+
terminal-table (3.0.0)
|
273
|
+
unicode-display_width (~> 1.1, >= 1.1.1)
|
274
|
+
thor (1.1.0)
|
275
|
+
thread_safe (0.3.6)
|
276
|
+
tilt (2.0.10)
|
277
|
+
turbolinks (5.2.1)
|
278
|
+
turbolinks-source (~> 5.2)
|
279
|
+
turbolinks-source (5.2.0)
|
280
|
+
tzinfo (1.2.9)
|
281
|
+
thread_safe (~> 0.1)
|
282
|
+
unicode-display_width (1.7.0)
|
283
|
+
warden (1.2.9)
|
284
|
+
rack (>= 2.0.9)
|
285
|
+
web-console (4.1.0)
|
286
|
+
actionview (>= 6.0.0)
|
287
|
+
activemodel (>= 6.0.0)
|
288
|
+
bindex (>= 0.4.0)
|
289
|
+
railties (>= 6.0.0)
|
290
|
+
webdrivers (4.6.0)
|
291
|
+
nokogiri (~> 1.6)
|
292
|
+
rubyzip (>= 1.3.0)
|
293
|
+
selenium-webdriver (>= 3.0, < 4.0)
|
294
|
+
webpacker (4.3.0)
|
295
|
+
activesupport (>= 4.2)
|
296
|
+
rack-proxy (>= 0.6.1)
|
297
|
+
railties (>= 4.2)
|
298
|
+
webrick (1.7.0)
|
299
|
+
websocket-driver (0.7.3)
|
300
|
+
websocket-extensions (>= 0.1.0)
|
301
|
+
websocket-extensions (0.1.5)
|
302
|
+
xpath (3.2.0)
|
303
|
+
nokogiri (~> 1.8)
|
304
|
+
zeitwerk (2.4.2)
|
305
|
+
|
306
|
+
PLATFORMS
|
307
|
+
ruby
|
308
|
+
|
309
|
+
DEPENDENCIES
|
310
|
+
bootsnap (>= 1.4.2)
|
311
|
+
bundler (>= 2.2.16)
|
312
|
+
byebug
|
313
|
+
capybara (>= 2.15)
|
314
|
+
capybara-screenshot (>= 1.0.18)
|
315
|
+
codecov
|
316
|
+
database_cleaner (>= 2.0.1)
|
317
|
+
devise (~> 4.0)
|
318
|
+
devise-secure_password!
|
319
|
+
flay (>= 2.10.0)
|
320
|
+
jbuilder (~> 2.7)
|
321
|
+
launchy (>= 2.4.3)
|
322
|
+
listen (~> 3.2)
|
323
|
+
puma (~> 4.1)
|
324
|
+
rails (~> 6.0.3, >= 6.0.3.6)
|
325
|
+
rake (>= 12.3)
|
326
|
+
rspec (>= 3.7)
|
327
|
+
rspec-rails (>= 3.7)
|
328
|
+
rspec_junit_formatter (>= 0.3)
|
329
|
+
rubocop (>= 1.0.0)
|
330
|
+
rubocop-rails (>= 2.3.2)
|
331
|
+
rubocop-rspec (>= 1.35.0)
|
332
|
+
ruby2ruby (>= 2.4.0)
|
333
|
+
sass-rails (>= 6)
|
334
|
+
selenium-webdriver
|
335
|
+
shoulda-matchers
|
336
|
+
simplecov (>= 0.18.2)
|
337
|
+
simplecov-console (>= 0.4.2)
|
338
|
+
sqlite3 (~> 1.4)
|
339
|
+
turbolinks (~> 5)
|
340
|
+
tzinfo-data
|
341
|
+
web-console (>= 3.3.0)
|
342
|
+
webdrivers
|
343
|
+
webpacker (~> 4.0)
|
344
|
+
webrick (~> 1.7)
|
345
|
+
|
346
|
+
BUNDLED WITH
|
347
|
+
2.2.16
|