devise-secure-password 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/CODE_OF_CONDUCT.md +74 -0
  3. data/Changelog.md +98 -0
  4. data/Dockerfile +44 -0
  5. data/Dockerfile.prev +44 -0
  6. data/Gemfile +13 -0
  7. data/Gemfile.lock +272 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +382 -0
  10. data/Rakefile +11 -0
  11. data/app/controllers/devise/passwords_with_policy_controller.rb +93 -0
  12. data/app/views/devise/passwords_with_policy/edit.html.erb +20 -0
  13. data/bin/console +14 -0
  14. data/bin/setup +6 -0
  15. data/config/locales/en.yml +84 -0
  16. data/devise-secure-password.gemspec +57 -0
  17. data/docker-entrypoint.sh +6 -0
  18. data/gemfiles/rails_5_1.gemfile +21 -0
  19. data/gemfiles/rails_5_2.gemfile +22 -0
  20. data/lib/devise/secure_password.rb +71 -0
  21. data/lib/devise/secure_password/controllers/devise_helpers.rb +23 -0
  22. data/lib/devise/secure_password/controllers/helpers.rb +58 -0
  23. data/lib/devise/secure_password/grammar.rb +13 -0
  24. data/lib/devise/secure_password/models/password_disallows_frequent_changes.rb +62 -0
  25. data/lib/devise/secure_password/models/password_disallows_frequent_reuse.rb +73 -0
  26. data/lib/devise/secure_password/models/password_has_required_content.rb +170 -0
  27. data/lib/devise/secure_password/models/password_requires_regular_updates.rb +54 -0
  28. data/lib/devise/secure_password/models/previous_password.rb +20 -0
  29. data/lib/devise/secure_password/routes.rb +11 -0
  30. data/lib/devise/secure_password/version.rb +5 -0
  31. data/lib/generators/devise/secure_password/install_generator.rb +30 -0
  32. data/lib/generators/devise/templates/README.txt +21 -0
  33. data/lib/generators/devise/templates/secure_password.rb +43 -0
  34. data/lib/support/string/character_counter.rb +55 -0
  35. data/pkg/devise-secure-password-1.1.1.gem +0 -0
  36. metadata +429 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cb0ede6cb0ee8c5ff54ecbb1f262269617c63795dd394e0704a2449881ca2f0c
4
+ data.tar.gz: 89183180c76004c80b2c99d4462c2f4841a52289cfb549314db1822d95b99d4c
5
+ SHA512:
6
+ metadata.gz: d88827c15c3b54048907e422c80bd66b9a8062a0da967553d1c9e029bfc52e246493f51cca097dcdc7ced622ce00c3ab14043bc3843daed8fd51a5948e299f68
7
+ data.tar.gz: b6aa28a2383d6560fdd3fbacf0c2881fc7aecea46148072ac8eb2b391844cfd24830621b49aab6f09276a9c7a5086fa98503e91bfd10aa32b44c040a4dd79b68
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at mark.eissler@valimail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Changelog.md ADDED
@@ -0,0 +1,98 @@
1
+ # Changelog: devise-secure_password
2
+
3
+ ## 1.1.0 / 2018-08-08
4
+
5
+ With this release, the __devise-secure_password__ gem drops official support for Rails < 5.1. Supported versions are now
6
+ Rails 5.2 (current release) and Rails 5.1 (last release).
7
+
8
+ * Update README for Rails versions tested (5.2, 5.1).
9
+ * Update circleci config for Ruby and Rails versions.
10
+ * Update default dev build to Rails 5.2.
11
+ * Add test support for Rails 5.2.
12
+ * Remove test support for Rails 5.0.
13
+ * Update Dockerfile.prev ruby to 2.4.4.
14
+ * Update Dockerfile ruby to 2.5.1.
15
+ * Sort rake targets task list output.
16
+ * Add Codecov.io for coverage tracking
17
+
18
+ ## 1.0.8 / 2018-06-15
19
+
20
+ * Update README for ruby versions tested (2.5.1, 2.4.4).
21
+ * Update README for target reconfig instructions.
22
+ * Update README for test screenshot generation.
23
+ * Fix grammar for error messages.
24
+ * Fix empty new passwords skipping validation.
25
+ * Add tests for invalid empty and current passwords.
26
+ * Add total string length counting to character_counter.
27
+ * Add password confirmation equality validator.
28
+ * Add length validations to password fields.
29
+ * Add update_action hidden field to forced password change form.
30
+ * Refactor passwords_with_policy controller.
31
+
32
+ ## 1.0.7 / 2018-05-25
33
+
34
+ * Fix specs to use appropriate Rails version
35
+ * Update configuration to not include patch version for Rails
36
+ * Manage expiration in session to remove incompatability with authentication extensions
37
+
38
+ ## 1.0.6 / 2018-05-04
39
+
40
+ * Fix scoping for previous passwords returned through associations.
41
+
42
+ ## 1.0.5 / 2018-04-30
43
+
44
+ * Update rails-app-5_1_4 config for SQLite3Adapter changes.
45
+ * Update previous_password default_scope to be based on id.
46
+ * Configure more reasonable defaults.
47
+ * Update README regarding defaults and a users need to verify.
48
+ * Update README to include section on Displaying errors.
49
+ * Revert password freshness algorithm from 1.0.4.
50
+
51
+ ## v1.0.4 / 2018-04-28
52
+
53
+ * Fix for ignored redirect on expired passwords.
54
+ * Change password freshness algorithm to consider updated records.
55
+
56
+ ## v1.0.3 / 2018-04-23
57
+
58
+ * Skip enforcement checks unless User model requires a password.
59
+ * Update migration code to accomodate changes in underlying ActiveRecord.
60
+
61
+ ## v1.0.2 / 2018-03-14
62
+
63
+ * Update the default configuration to be less strict - users can enable individual features.
64
+ * Do not override global timeago strings.
65
+
66
+ ## v1.0.1 / 2018-03-14
67
+
68
+ * Fix the special character configuration parameter name and add specs.
69
+
70
+ ## v1.0.0 / 2018-03-07
71
+
72
+ * Update license.
73
+ * Refactor to simplify install and test commands.
74
+
75
+ ## v0.9.4 / 2018-01-24
76
+
77
+ * Fix typos in README.
78
+ * Update circleci badge token.
79
+ * Rename modules according to convention for Rails concerns.
80
+ * Implement code coverage.
81
+ * Support multiple rails versions for testing.
82
+ * Rename password_regular_update_enforcement_controller to dppe_passwords_controller.
83
+
84
+ ## v0.9.3 / 2018-01-09
85
+
86
+ * Implement password regular update
87
+
88
+ ## v0.9.2 / 2018-01-02
89
+
90
+ * Implement password frequent change enforcement.
91
+
92
+ ## v0.9.1 / 2017-12-29
93
+
94
+ * Implement password frequent reuse enforcement.
95
+
96
+ ## v0.9.0 / 2017-12-26
97
+
98
+ * Implement password content enforcement.
data/Dockerfile ADDED
@@ -0,0 +1,44 @@
1
+ #
2
+ # Dockerfile for devise-secure_password
3
+ #
4
+ # prompt> docker build -t secure-password-dev .
5
+ # prompt> docker run -it secure-password-dev /bin/bash
6
+ # prompt> pushd . && cd spec/rails-app-X_y_z
7
+ # prompt> gem install bundler && RAILS_TARGET=X.y.z bundle install --jobs 20 --retry 5
8
+ # prompt> RAILS_ENV='test' bundle exec rake db:migrate
9
+ # prompt> popd
10
+ # prompt> gem install bundler && RAILS_TARGET=X.y.z bundle install --jobs 20 --retry 5
11
+ # prompt> RAILS_TARGET=X.y.z bundle exec rake test:spec
12
+ #
13
+ # NOTE: The order in which you run 'bundle install' in spec/rails and then in
14
+ # the top directory is important.
15
+ #
16
+ FROM circleci/ruby:2.5.1-browsers
17
+ LABEL maintainer="Mark Eissler <mark.eissler@valimail.com>"
18
+
19
+ ENV BUILD_HOME='/secure-password-gem'
20
+
21
+ # Configure the main working directory. This is the base directory used in any
22
+ # further RUN, COPY, and ENTRYPOINT commands.
23
+ RUN sudo mkdir -p ${BUILD_HOME}
24
+ WORKDIR ${BUILD_HOME}
25
+
26
+ # Copy main application
27
+ COPY . ./
28
+
29
+ # Fix permissions on /gem directory
30
+ RUN set -x \
31
+ && sudo chown -R circleci:circleci ${BUILD_HOME}
32
+
33
+ # Start xvfb automatically
34
+ ENV DISPLAY :99
35
+
36
+ # Update docker-entrypoint.sh
37
+ RUN set -x \
38
+ && cp docker-entrypoint.sh /docker-entrypoint.sh \
39
+ && chmod 755 /docker-entrypoint.sh \
40
+ && chown circleci:circleci /docker-entrypoint.sh
41
+
42
+ ENTRYPOINT ["/docker-entrypoint.sh"]
43
+
44
+ CMD ["/bin/bash"]
data/Dockerfile.prev ADDED
@@ -0,0 +1,44 @@
1
+ #
2
+ # Dockerfile for devise-secure_password
3
+ #
4
+ # prompt> docker build -f Dockerfile.prev -t secure-password-dev-prev .
5
+ # prompt> docker run -it secure-password-dev-prev /bin/bash
6
+ # prompt> pushd . && cd spec/rails-app-X_y_z
7
+ # prompt> gem install bundler && RAILS_TARGET=X.y.z bundle install --jobs 20 --retry 5
8
+ # prompt> RAILS_ENV='test' bundle exec rake db:migrate
9
+ # prompt> popd
10
+ # prompt> gem install bundler && RAILS_TARGET=X.y.z bundle install --jobs 20 --retry 5
11
+ # prompt> RAILS_TARGET=X.y.z bundle exec rake test:spec
12
+ #
13
+ # NOTE: The order in which you run 'bundle install' in spec/rails and then in
14
+ # the top directory is important.
15
+ #
16
+ FROM circleci/ruby:2.4.4-browsers
17
+ LABEL maintainer="Mark Eissler <mark.eissler@valimail.com>"
18
+
19
+ ENV BUILD_HOME='/secure-password-gem'
20
+
21
+ # Configure the main working directory. This is the base directory used in any
22
+ # further RUN, COPY, and ENTRYPOINT commands.
23
+ RUN sudo mkdir -p ${BUILD_HOME}
24
+ WORKDIR ${BUILD_HOME}
25
+
26
+ # Copy main application
27
+ COPY . ./
28
+
29
+ # Fix permissions on /gem directory
30
+ RUN set -x \
31
+ && sudo chown -R circleci:circleci ${BUILD_HOME}
32
+
33
+ # Start xvfb automatically
34
+ ENV DISPLAY :99
35
+
36
+ # Update docker-entrypoint.sh
37
+ RUN set -x \
38
+ && cp docker-entrypoint.sh /docker-entrypoint.sh \
39
+ && chmod 755 /docker-entrypoint.sh \
40
+ && chown circleci:circleci /docker-entrypoint.sh
41
+
42
+ ENTRYPOINT ["/docker-entrypoint.sh"]
43
+
44
+ CMD ["/bin/bash"]
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ #
4
+ # Configure the build:
5
+ #
6
+ # prompt> gem install bundler && bundle install
7
+ #
8
+
9
+ gemspec
10
+
11
+ group :test do
12
+ gem 'codecov', require: false
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,272 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ devise-secure-password (1.1.1)
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 (5.2.4.1)
12
+ actionpack (= 5.2.4.1)
13
+ nio4r (~> 2.0)
14
+ websocket-driver (>= 0.6.1)
15
+ actionmailer (5.2.4.1)
16
+ actionpack (= 5.2.4.1)
17
+ actionview (= 5.2.4.1)
18
+ activejob (= 5.2.4.1)
19
+ mail (~> 2.5, >= 2.5.4)
20
+ rails-dom-testing (~> 2.0)
21
+ actionpack (5.2.4.1)
22
+ actionview (= 5.2.4.1)
23
+ activesupport (= 5.2.4.1)
24
+ rack (~> 2.0, >= 2.0.8)
25
+ rack-test (>= 0.6.3)
26
+ rails-dom-testing (~> 2.0)
27
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
28
+ actionview (5.2.4.1)
29
+ activesupport (= 5.2.4.1)
30
+ builder (~> 3.1)
31
+ erubi (~> 1.4)
32
+ rails-dom-testing (~> 2.0)
33
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
34
+ activejob (5.2.4.1)
35
+ activesupport (= 5.2.4.1)
36
+ globalid (>= 0.3.6)
37
+ activemodel (5.2.4.1)
38
+ activesupport (= 5.2.4.1)
39
+ activerecord (5.2.4.1)
40
+ activemodel (= 5.2.4.1)
41
+ activesupport (= 5.2.4.1)
42
+ arel (>= 9.0)
43
+ activestorage (5.2.4.1)
44
+ actionpack (= 5.2.4.1)
45
+ activerecord (= 5.2.4.1)
46
+ marcel (~> 0.3.1)
47
+ activesupport (5.2.4.1)
48
+ concurrent-ruby (~> 1.0, >= 1.0.2)
49
+ i18n (>= 0.7, < 2)
50
+ minitest (~> 5.1)
51
+ tzinfo (~> 1.1)
52
+ addressable (2.7.0)
53
+ public_suffix (>= 2.0.2, < 5.0)
54
+ ansi (1.5.0)
55
+ arel (9.0.0)
56
+ ast (2.4.0)
57
+ bcrypt (3.1.13)
58
+ builder (3.2.4)
59
+ capybara (3.31.0)
60
+ addressable
61
+ mini_mime (>= 0.1.3)
62
+ nokogiri (~> 1.8)
63
+ rack (>= 1.6.0)
64
+ rack-test (>= 0.6.3)
65
+ regexp_parser (~> 1.5)
66
+ xpath (~> 3.2)
67
+ capybara-screenshot (1.0.24)
68
+ capybara (>= 1.0, < 4)
69
+ launchy
70
+ childprocess (3.0.0)
71
+ codecov (0.1.16)
72
+ json
73
+ simplecov
74
+ url
75
+ coffee-rails (4.2.2)
76
+ coffee-script (>= 2.2.0)
77
+ railties (>= 4.0.0)
78
+ coffee-script (2.4.1)
79
+ coffee-script-source
80
+ execjs
81
+ coffee-script-source (1.12.2)
82
+ concurrent-ruby (1.1.6)
83
+ crass (1.0.6)
84
+ database_cleaner (1.8.3)
85
+ devise (4.7.1)
86
+ bcrypt (~> 3.0)
87
+ orm_adapter (~> 0.1)
88
+ railties (>= 4.1.0)
89
+ responders
90
+ warden (~> 1.2.3)
91
+ diff-lcs (1.3)
92
+ docile (1.3.2)
93
+ erubi (1.9.0)
94
+ erubis (2.7.0)
95
+ execjs (2.7.0)
96
+ flay (2.12.1)
97
+ erubis (~> 2.7.0)
98
+ path_expander (~> 1.0)
99
+ ruby_parser (~> 3.0)
100
+ sexp_processor (~> 4.0)
101
+ globalid (0.4.2)
102
+ activesupport (>= 4.2.0)
103
+ i18n (1.8.2)
104
+ concurrent-ruby (~> 1.0)
105
+ jaro_winkler (1.5.4)
106
+ json (2.3.0)
107
+ launchy (2.5.0)
108
+ addressable (~> 2.7)
109
+ loofah (2.4.0)
110
+ crass (~> 1.0.2)
111
+ nokogiri (>= 1.5.9)
112
+ mail (2.7.1)
113
+ mini_mime (>= 0.1.1)
114
+ marcel (0.3.3)
115
+ mimemagic (~> 0.3.2)
116
+ method_source (0.9.2)
117
+ mimemagic (0.3.4)
118
+ mini_mime (1.0.2)
119
+ mini_portile2 (2.4.0)
120
+ minitest (5.14.0)
121
+ nio4r (2.5.2)
122
+ nokogiri (1.10.9)
123
+ mini_portile2 (~> 2.4.0)
124
+ orm_adapter (0.5.0)
125
+ parallel (1.19.1)
126
+ parser (2.7.0.4)
127
+ ast (~> 2.4.0)
128
+ path_expander (1.1.0)
129
+ public_suffix (4.0.3)
130
+ rack (2.2.2)
131
+ rack-test (1.1.0)
132
+ rack (>= 1.0, < 3)
133
+ rails (5.2.4.1)
134
+ actioncable (= 5.2.4.1)
135
+ actionmailer (= 5.2.4.1)
136
+ actionpack (= 5.2.4.1)
137
+ actionview (= 5.2.4.1)
138
+ activejob (= 5.2.4.1)
139
+ activemodel (= 5.2.4.1)
140
+ activerecord (= 5.2.4.1)
141
+ activestorage (= 5.2.4.1)
142
+ activesupport (= 5.2.4.1)
143
+ bundler (>= 1.3.0)
144
+ railties (= 5.2.4.1)
145
+ sprockets-rails (>= 2.0.0)
146
+ rails-dom-testing (2.0.3)
147
+ activesupport (>= 4.2.0)
148
+ nokogiri (>= 1.6)
149
+ rails-html-sanitizer (1.3.0)
150
+ loofah (~> 2.3)
151
+ railties (5.2.4.1)
152
+ actionpack (= 5.2.4.1)
153
+ activesupport (= 5.2.4.1)
154
+ method_source
155
+ rake (>= 0.8.7)
156
+ thor (>= 0.19.0, < 2.0)
157
+ rainbow (3.0.0)
158
+ rake (13.0.1)
159
+ regexp_parser (1.7.0)
160
+ responders (3.0.0)
161
+ actionpack (>= 5.0)
162
+ railties (>= 5.0)
163
+ rexml (3.2.4)
164
+ rspec (3.9.0)
165
+ rspec-core (~> 3.9.0)
166
+ rspec-expectations (~> 3.9.0)
167
+ rspec-mocks (~> 3.9.0)
168
+ rspec-core (3.9.1)
169
+ rspec-support (~> 3.9.1)
170
+ rspec-expectations (3.9.1)
171
+ diff-lcs (>= 1.2.0, < 2.0)
172
+ rspec-support (~> 3.9.0)
173
+ rspec-mocks (3.9.1)
174
+ diff-lcs (>= 1.2.0, < 2.0)
175
+ rspec-support (~> 3.9.0)
176
+ rspec-rails (3.9.1)
177
+ actionpack (>= 3.0)
178
+ activesupport (>= 3.0)
179
+ railties (>= 3.0)
180
+ rspec-core (~> 3.9.0)
181
+ rspec-expectations (~> 3.9.0)
182
+ rspec-mocks (~> 3.9.0)
183
+ rspec-support (~> 3.9.0)
184
+ rspec-support (3.9.2)
185
+ rspec_junit_formatter (0.4.1)
186
+ rspec-core (>= 2, < 4, != 2.12.0)
187
+ rubocop (0.80.1)
188
+ jaro_winkler (~> 1.5.1)
189
+ parallel (~> 1.10)
190
+ parser (>= 2.7.0.1)
191
+ rainbow (>= 2.2.2, < 4.0)
192
+ rexml
193
+ ruby-progressbar (~> 1.7)
194
+ unicode-display_width (>= 1.4.0, < 1.7)
195
+ rubocop-rails (2.4.2)
196
+ rack (>= 1.1)
197
+ rubocop (>= 0.72.0)
198
+ rubocop-rspec (1.38.1)
199
+ rubocop (>= 0.68.1)
200
+ ruby-progressbar (1.10.1)
201
+ ruby2ruby (2.4.4)
202
+ ruby_parser (~> 3.1)
203
+ sexp_processor (~> 4.6)
204
+ ruby_parser (3.14.2)
205
+ sexp_processor (~> 4.9)
206
+ rubyzip (2.3.0)
207
+ selenium-webdriver (3.142.7)
208
+ childprocess (>= 0.5, < 4.0)
209
+ rubyzip (>= 1.2.2)
210
+ sexp_processor (4.14.1)
211
+ simplecov (0.18.5)
212
+ docile (~> 1.1)
213
+ simplecov-html (~> 0.11)
214
+ simplecov-console (0.7.2)
215
+ ansi
216
+ simplecov
217
+ terminal-table
218
+ simplecov-html (0.12.2)
219
+ sprockets (4.0.0)
220
+ concurrent-ruby (~> 1.0)
221
+ rack (> 1, < 3)
222
+ sprockets-rails (3.2.1)
223
+ actionpack (>= 4.0)
224
+ activesupport (>= 4.0)
225
+ sprockets (>= 3.0.0)
226
+ sqlite3 (1.4.2)
227
+ terminal-table (1.8.0)
228
+ unicode-display_width (~> 1.1, >= 1.1.1)
229
+ thor (1.0.1)
230
+ thread_safe (0.3.6)
231
+ tzinfo (1.2.6)
232
+ thread_safe (~> 0.1)
233
+ unicode-display_width (1.6.1)
234
+ url (0.3.2)
235
+ warden (1.2.8)
236
+ rack (>= 2.0.6)
237
+ websocket-driver (0.7.1)
238
+ websocket-extensions (>= 0.1.0)
239
+ websocket-extensions (0.1.4)
240
+ xpath (3.2.0)
241
+ nokogiri (~> 1.8)
242
+
243
+ PLATFORMS
244
+ ruby
245
+
246
+ DEPENDENCIES
247
+ bundler (>= 1.16.1)
248
+ capybara (~> 3.11, >= 2.16.1)
249
+ capybara-screenshot (>= 1.0.18)
250
+ codecov
251
+ coffee-rails (~> 4.2)
252
+ database_cleaner (~> 1.6, >= 1.6.2)
253
+ devise (~> 4.0)
254
+ devise-secure-password!
255
+ flay (>= 2.10.0)
256
+ launchy (>= 2.4.3)
257
+ rails (~> 5.2, >= 5.2.0)
258
+ rake (>= 12.3)
259
+ rspec (>= 3.7)
260
+ rspec-rails (>= 3.7)
261
+ rspec_junit_formatter (>= 0.3)
262
+ rubocop (>= 0.74.0)
263
+ rubocop-rails (>= 2.3.2)
264
+ rubocop-rspec (>= 1.35.0)
265
+ ruby2ruby (>= 2.4.0)
266
+ selenium-webdriver (>= 3.7.0)
267
+ simplecov (~> 0.18.2)
268
+ simplecov-console (>= 0.4.2)
269
+ sqlite3 (>= 1.3.13)
270
+
271
+ BUNDLED WITH
272
+ 2.1.4