authenticate 0.3.1 → 0.3.2

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.
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