authenticate 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +27 -0
  3. data/CHANGELOG.md +6 -0
  4. data/CONTRIBUTING.md +59 -0
  5. data/Gemfile +0 -1
  6. data/Gemfile.lock +11 -11
  7. data/README.md +37 -4
  8. data/Rakefile +2 -4
  9. data/app/controllers/authenticate/passwords_controller.rb +3 -3
  10. data/app/controllers/authenticate/sessions_controller.rb +4 -4
  11. data/app/controllers/authenticate/users_controller.rb +5 -7
  12. data/app/mailers/authenticate_mailer.rb +6 -8
  13. data/authenticate.gemspec +8 -9
  14. data/lib/authenticate.rb +1 -1
  15. data/lib/authenticate/callbacks/authenticatable.rb +1 -2
  16. data/lib/authenticate/callbacks/brute_force.rb +1 -3
  17. data/lib/authenticate/callbacks/lifetimed.rb +2 -1
  18. data/lib/authenticate/callbacks/timeoutable.rb +3 -2
  19. data/lib/authenticate/callbacks/trackable.rb +1 -1
  20. data/lib/authenticate/configuration.rb +11 -7
  21. data/lib/authenticate/controller.rb +32 -23
  22. data/lib/authenticate/crypto/bcrypt.rb +3 -3
  23. data/lib/authenticate/debug.rb +7 -7
  24. data/lib/authenticate/engine.rb +4 -2
  25. data/lib/authenticate/lifecycle.rb +12 -22
  26. data/lib/authenticate/login_status.rb +4 -3
  27. data/lib/authenticate/model/brute_force.rb +4 -6
  28. data/lib/authenticate/model/db_password.rb +5 -14
  29. data/lib/authenticate/model/email.rb +7 -9
  30. data/lib/authenticate/model/lifetimed.rb +1 -2
  31. data/lib/authenticate/model/password_reset.rb +1 -3
  32. data/lib/authenticate/model/timeoutable.rb +14 -15
  33. data/lib/authenticate/model/trackable.rb +5 -4
  34. data/lib/authenticate/model/username.rb +3 -5
  35. data/lib/authenticate/modules.rb +37 -39
  36. data/lib/authenticate/session.rb +15 -23
  37. data/lib/authenticate/token.rb +3 -0
  38. data/lib/authenticate/user.rb +2 -6
  39. data/lib/authenticate/version.rb +1 -1
  40. data/lib/generators/authenticate/controllers/controllers_generator.rb +1 -2
  41. data/lib/generators/authenticate/helpers.rb +1 -2
  42. data/lib/generators/authenticate/install/install_generator.rb +31 -32
  43. data/lib/generators/authenticate/install/templates/authenticate.rb +0 -1
  44. data/lib/generators/authenticate/routes/routes_generator.rb +1 -2
  45. data/lib/generators/authenticate/views/USAGE +3 -2
  46. data/lib/generators/authenticate/views/views_generator.rb +1 -2
  47. data/spec/controllers/passwords_controller_spec.rb +5 -7
  48. data/spec/controllers/secured_controller_spec.rb +6 -6
  49. data/spec/controllers/sessions_controller_spec.rb +2 -2
  50. data/spec/controllers/users_controller_spec.rb +4 -4
  51. data/spec/features/brute_force_spec.rb +0 -2
  52. data/spec/features/max_session_lifetime_spec.rb +0 -1
  53. data/spec/features/password_reset_spec.rb +10 -19
  54. data/spec/features/password_update_spec.rb +0 -2
  55. data/spec/features/sign_out_spec.rb +0 -1
  56. data/spec/features/sign_up_spec.rb +0 -1
  57. data/spec/features/timeoutable_spec.rb +0 -1
  58. data/spec/model/brute_force_spec.rb +2 -3
  59. data/spec/model/configuration_spec.rb +2 -7
  60. data/spec/model/db_password_spec.rb +4 -6
  61. data/spec/model/email_spec.rb +1 -3
  62. data/spec/model/lifetimed_spec.rb +0 -3
  63. data/spec/model/modules_spec.rb +22 -0
  64. data/spec/model/password_reset_spec.rb +3 -10
  65. data/spec/model/session_spec.rb +4 -5
  66. data/spec/model/timeoutable_spec.rb +0 -1
  67. data/spec/model/token_spec.rb +1 -3
  68. data/spec/model/trackable_spec.rb +1 -2
  69. data/spec/model/user_spec.rb +0 -1
  70. data/spec/orm/active_record.rb +1 -1
  71. data/spec/spec_helper.rb +3 -11
  72. data/spec/support/controllers/controller_helpers.rb +1 -2
  73. data/spec/support/features/feature_helpers.rb +2 -4
  74. metadata +29 -26
@@ -28,7 +28,6 @@ feature 'visitor updates password' do
28
28
  end
29
29
  end
30
30
 
31
-
32
31
  def update_password(user, password)
33
32
  visit_password_reset_page_for user
34
33
  fill_in 'password_reset_password', with: password
@@ -38,4 +37,3 @@ end
38
37
  def visit_password_reset_page_for(user)
39
38
  visit edit_users_password_path(id: user, token: user.password_reset_token)
40
39
  end
41
-
@@ -18,5 +18,4 @@ feature 'visitor signs out' do
18
18
  visit sign_out_path
19
19
  expect_user_to_be_signed_out
20
20
  end
21
-
22
21
  end
@@ -29,7 +29,6 @@ feature 'visitor signs up' do
29
29
  end
30
30
  end
31
31
 
32
-
33
32
  def expect_sign_up_page
34
33
  expect(current_path).to eq sign_up_path
35
34
  end
@@ -26,5 +26,4 @@ feature 'visitor session time' do
26
26
  expect_user_to_be_signed_out
27
27
  end
28
28
  end
29
-
30
29
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'authenticate/model/brute_force'
3
3
 
4
-
5
4
  describe Authenticate::Model::BruteForce do
6
5
  before(:each) do
7
6
  @user = create(:user)
@@ -46,10 +45,10 @@ describe Authenticate::Model::BruteForce do
46
45
  end
47
46
 
48
47
  context '#unlock!' do
49
- before(:each) {
48
+ before(:each) do
50
49
  @user.lock!
51
50
  @user.unlock!
52
- }
51
+ end
53
52
  it 'zeros failed_logins_count' do
54
53
  expect(@user.failed_logins_count).to be(0)
55
54
  end
@@ -2,9 +2,9 @@ require 'spec_helper'
2
2
  require 'authenticate/configuration'
3
3
 
4
4
  describe Authenticate::Configuration do
5
-
6
5
  context 'user model' do
7
6
  module Gug
7
+ # Faux user model
8
8
  class Profile
9
9
  extend ActiveModel::Naming
10
10
  end
@@ -42,7 +42,7 @@ describe Authenticate::Configuration do
42
42
 
43
43
  context 'with strategy set to username' do
44
44
  before do
45
- @conf.authentication_strategy = :username
45
+ @conf.authentication_strategy = :username
46
46
  end
47
47
  it 'includes username in modules' do
48
48
  expect(@conf.modules).to include :username
@@ -51,11 +51,6 @@ describe Authenticate::Configuration do
51
51
  expect(@conf.modules).to_not include :email
52
52
  end
53
53
  end
54
-
55
54
  end
56
-
57
55
  end
58
-
59
-
60
-
61
56
  end
@@ -1,18 +1,17 @@
1
1
  require 'spec_helper'
2
2
  require 'authenticate/model/db_password'
3
3
 
4
-
5
4
  describe Authenticate::Model::DbPassword do
6
5
  describe 'Passwords' do
7
6
  context '#password_match?' do
8
7
  subject { create(:user, password: 'password') }
9
8
 
10
9
  it 'matches a password' do
11
- expect(subject.password_match? 'password').to be_truthy
10
+ expect(subject.password_match?('password')).to be_truthy
12
11
  end
13
12
 
14
13
  it 'fails to match a bad password' do
15
- expect(subject.password_match? 'bad password').to be_falsey
14
+ expect(subject.password_match?('bad password')).to be_falsey
16
15
  end
17
16
 
18
17
  it 'saves passwords' do
@@ -20,7 +19,7 @@ describe Authenticate::Model::DbPassword do
20
19
  subject.save!
21
20
 
22
21
  user = User.find(subject.id)
23
- expect(user.password_match? 'new_password').to be_truthy
22
+ expect(user.password_match?('new_password')).to be_truthy
24
23
  end
25
24
  end
26
25
 
@@ -49,7 +48,7 @@ describe Authenticate::Model::DbPassword do
49
48
  context 'on an existing user' do
50
49
  subject { create(:user, password: 'password') }
51
50
 
52
- it { is_expected.to be_valid }
51
+ it { is_expected.to be_valid }
53
52
 
54
53
  it 'should not be valid with an empty password' do
55
54
  subject.password = ''
@@ -64,6 +63,5 @@ describe Authenticate::Model::DbPassword do
64
63
  end
65
64
  end
66
65
  end
67
-
68
66
  end
69
67
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'authenticate/model/email'
3
3
 
4
-
5
4
  describe Authenticate::Model::Email do
6
5
  it 'validates email' do
7
6
  user = build(:user, :without_email)
@@ -12,7 +11,7 @@ describe Authenticate::Model::Email do
12
11
  end
13
12
 
14
13
  it 'extracts credentials from params' do
15
- params = {session:{email:'foo', password:'bar'}}
14
+ params = { session: { email: 'foo', password: 'bar' } }
16
15
  expect(User.credentials(params)).to match_array(%w(foo bar))
17
16
  end
18
17
 
@@ -20,5 +19,4 @@ describe Authenticate::Model::Email do
20
19
  user = create(:user)
21
20
  expect(User.authenticate([user.email, user.password])).to eq(user)
22
21
  end
23
-
24
22
  end
@@ -1,10 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'authenticate/model/lifetimed'
3
3
 
4
-
5
4
  describe Authenticate::Model::Lifetimed do
6
5
  context '#max_session_lifetime_exceeded?' do
7
-
8
6
  it 'passes fresh sessions' do
9
7
  Timecop.freeze do
10
8
  user = create(:user, current_sign_in_at: 1.minute.ago.utc)
@@ -19,5 +17,4 @@ describe Authenticate::Model::Lifetimed do
19
17
  end
20
18
  end
21
19
  end
22
-
23
20
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Authenticate::Modules do
4
+ # dummy user model to test .check_fields
5
+ class UserProfile
6
+ extend ActiveModel::Model
7
+ include Authenticate::Modules
8
+ end
9
+
10
+ describe '.check_fields' do
11
+ context 'user model with missing fields' do
12
+ it 'fails when required_fields are not present' do
13
+ expect { UserProfile.load_modules }.to raise_error(Authenticate::Modules::MissingAttribute)
14
+ end
15
+ end
16
+ context 'user model with all fields' do
17
+ it 'fleshed out user model is fine' do
18
+ expect { User.load_modules }.to_not raise_error
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'authenticate/model/password_reset'
3
3
 
4
-
5
4
  describe Authenticate::Model::PasswordReset do
6
5
  context 'forgot_password!' do
7
6
  subject { create(:user) }
@@ -14,7 +13,6 @@ describe Authenticate::Model::PasswordReset do
14
13
  it 'sets password reset sent at' do
15
14
  expect(subject.password_reset_sent_at).to_not be_nil
16
15
  end
17
-
18
16
  end
19
17
 
20
18
  context '#reset_password_period_valid?' do
@@ -43,12 +41,10 @@ describe Authenticate::Model::PasswordReset do
43
41
  subject { create(:user) }
44
42
 
45
43
  context 'within time time' do
46
- before(:each) {
47
- subject.password_reset_sent_at = 1.minutes.ago
48
- }
44
+ before(:each) { subject.password_reset_sent_at = 1.minutes.ago }
49
45
 
50
46
  it 'allows password update within time limit' do
51
- expect(subject.update_password 'password2').to be_truthy
47
+ expect(subject.update_password('password2')).to be_truthy
52
48
  end
53
49
 
54
50
  it 'clears password reset token' do
@@ -61,14 +57,11 @@ describe Authenticate::Model::PasswordReset do
61
57
  subject.update_password 'password2'
62
58
  expect(subject.session_token).to_not eq(token)
63
59
  end
64
-
65
60
  end
66
61
 
67
62
  it 'stops password update after time limit' do
68
63
  subject.password_reset_sent_at = 6.minutes.ago
69
- expect(subject.update_password 'password2').to be_falsey
64
+ expect(subject.update_password('password2')).to be_falsey
70
65
  end
71
-
72
66
  end
73
-
74
67
  end
@@ -1,6 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
-
4
3
  describe Authenticate::Session do
5
4
  describe 'session token' do
6
5
  it 'finds a user from session token' do
@@ -18,7 +17,7 @@ describe Authenticate::Session do
18
17
  end
19
18
  it 'returns nil with a bogus session token' do
20
19
  request = mock_request
21
- cookies = {Authenticate.configuration.cookie_name.freeze.to_sym => 'some made up value'}
20
+ cookies = { Authenticate.configuration.cookie_name.freeze.to_sym => 'some made up value' }
22
21
  session = Authenticate::Session.new(request, cookies)
23
22
  expect(session.current_user).to be_nil
24
23
  end
@@ -56,9 +55,9 @@ describe Authenticate::Session do
56
55
  context 'modules' do
57
56
  it 'runs the callbacks' do
58
57
  user = create(:user, :with_session_token, sign_in_count: 0)
59
- cookies = {authenticate_session_token: user.session_token}
58
+ cookies = { authenticate_session_token: user.session_token }
60
59
  session = Authenticate::Session.new(mock_request, cookies)
61
- expect{session.login(user)}.to change{user.sign_in_count}.by(1)
60
+ expect { session.login(user) }. to change { user.sign_in_count }.by(1)
62
61
  end
63
62
  it 'fails login if a callback fails' do
64
63
  cookies = {}
@@ -72,6 +71,6 @@ describe Authenticate::Session do
72
71
  end
73
72
  end
74
73
 
75
- def cookies_for user
74
+ def cookies_for(user)
76
75
  { Authenticate.configuration.cookie_name.freeze.to_sym => user.session_token }
77
76
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'authenticate/model/timeoutable'
3
3
 
4
-
5
4
  describe Authenticate::Model::Timeoutable do
6
5
  subject { create(:user) }
7
6
 
@@ -4,8 +4,6 @@ describe Authenticate::Token do
4
4
  it 'is a random hex string' do
5
5
  token = 'my_token'
6
6
  allow(SecureRandom).to receive(:hex).with(20).and_return(token)
7
-
8
7
  expect(Authenticate::Token.new).to eq token
9
8
  end
10
-
11
- end
9
+ end
@@ -1,9 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'authenticate/model/trackable'
3
3
 
4
-
5
4
  describe Authenticate::Model::Trackable do
6
- subject {create(:user)}
5
+ subject { create(:user) }
7
6
  context '#last_sign_in_at' do
8
7
  it 'sets to old current_sign_in_at if it is not nil' do
9
8
  old_sign_in = 2.days.ago.utc
@@ -17,5 +17,4 @@ describe Authenticate::User do
17
17
  expect(new_user.session_token).to_not eq old_token
18
18
  end
19
19
  end
20
-
21
20
  end
@@ -13,5 +13,5 @@ def teardown_orm
13
13
  end
14
14
 
15
15
  def migrations_path
16
- Rails.root.join("db", "migrate", "core")
16
+ Rails.root.join('db', 'migrate', 'core')
17
17
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  ENV['RAILS_ENV'] ||= 'test'
3
3
 
4
- require File.expand_path('../dummy/config/environment.rb', __FILE__)
4
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
5
5
  require 'rspec/rails'
6
6
  require 'shoulda-matchers'
7
7
  require 'capybara/rails'
@@ -26,8 +26,6 @@ RSpec.configure do |config|
26
26
  config.order = :random
27
27
  config.use_transactional_fixtures = true
28
28
 
29
- # config.mock_with :rspec
30
-
31
29
  config.expect_with :rspec do |expectations|
32
30
  expectations.syntax = :expect
33
31
  end
@@ -36,21 +34,15 @@ RSpec.configure do |config|
36
34
  mocks.syntax = :expect
37
35
  end
38
36
 
39
-
40
- config.after(:each, :type => :feature) do
37
+ config.after(:each, type: :feature) do
41
38
  DatabaseCleaner.clean # Truncate the database
42
39
  Capybara.reset_sessions! # Forget the (simulated) browser state
43
40
  Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
44
41
  end
45
42
  end
46
43
 
47
-
48
- def restore_default_configuration
49
- puts 'restore_default_configuration called!!!!!!!!!!!!!!!!!!!!!'
50
- end
51
-
52
44
  def mock_request(params = {})
53
- req = double("request")
45
+ req = double('request')
54
46
  allow(req).to receive(:params).and_return(params)
55
47
  allow(req).to receive(:remote_ip).and_return('111.111.111.111')
56
48
  req
@@ -1,8 +1,8 @@
1
1
  require 'authenticate/controller'
2
2
 
3
3
  module Controllers
4
+ # Helpers for controller tests
4
5
  module ControllerHelpers
5
-
6
6
  def sign_in
7
7
  user = create(:user)
8
8
  sign_in_as user
@@ -15,7 +15,6 @@ module Controllers
15
15
  def sign_out
16
16
  controller.logout
17
17
  end
18
-
19
18
  end
20
19
  end
21
20
 
@@ -1,7 +1,6 @@
1
1
  module Features
2
+ # Helpers for feature tests
2
3
  module FeatureHelpers
3
-
4
-
5
4
  def sign_in_with(email, password)
6
5
  visit sign_in_path
7
6
  fill_in 'session_email', with: email
@@ -11,7 +10,7 @@ module Features
11
10
 
12
11
  def sign_out
13
12
  within '#header' do
14
- click_link I18n.t("layouts.application.sign_out")
13
+ click_link I18n.t('layouts.application.sign_out')
15
14
  end
16
15
  end
17
16
 
@@ -27,7 +26,6 @@ module Features
27
26
  def expect_user_to_be_signed_out
28
27
  expect(page).to have_content 'Sign in'
29
28
  end
30
-
31
29
  end
32
30
  end
33
31
 
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authenticate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Tomich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-11 00:00:00.000000000 Z
11
+ date: 2016-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '3.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '3.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: email_validator
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -62,58 +62,58 @@ dependencies:
62
62
  name: factory_girl
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ">="
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '0'
67
+ version: '4.4'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ">="
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '0'
74
+ version: '4.4'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rspec-rails
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: 3.1.0
81
+ version: '3.1'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 3.1.0
88
+ version: '3.1'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: pry
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ">="
93
+ - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0'
95
+ version: '0.10'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ">="
100
+ - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0'
102
+ version: '0.10'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: sqlite3
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - ">="
107
+ - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0'
109
+ version: '1.3'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - ">="
114
+ - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '0'
116
+ version: '1.3'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: shoulda-matchers
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -134,42 +134,42 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: 2.6.2
137
+ version: '2.6'
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: 2.6.2
144
+ version: '2.6'
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: database_cleaner
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: 1.5.1
151
+ version: '1.5'
152
152
  type: :development
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: 1.5.1
158
+ version: '1.5'
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: timecop
161
161
  requirement: !ruby/object:Gem::Requirement
162
162
  requirements:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: 0.8.0
165
+ version: '0.8'
166
166
  type: :development
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: 0.8.0
172
+ version: '0.8'
173
173
  description: Authentication for Rails applications
174
174
  email:
175
175
  - justin@tomich.org
@@ -182,9 +182,11 @@ extra_rdoc_files:
182
182
  files:
183
183
  - ".gitignore"
184
184
  - ".rspec"
185
+ - ".rubocop.yml"
185
186
  - ".ruby-version"
186
187
  - ".travis.yml"
187
188
  - CHANGELOG.md
189
+ - CONTRIBUTING.md
188
190
  - Gemfile
189
191
  - Gemfile.lock
190
192
  - LICENSE
@@ -321,6 +323,7 @@ files:
321
323
  - spec/model/db_password_spec.rb
322
324
  - spec/model/email_spec.rb
323
325
  - spec/model/lifetimed_spec.rb
326
+ - spec/model/modules_spec.rb
324
327
  - spec/model/password_reset_spec.rb
325
328
  - spec/model/session_spec.rb
326
329
  - spec/model/timeoutable_spec.rb