token_authenticate_me 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1179658e1f3af9a1c58e9efa48cd22d09ec7ce0e
4
- data.tar.gz: 0158eb3611283336d1bf41199fd1a006e6f98bc7
3
+ metadata.gz: e7b2ede59ef0d8683ee691ef1ac5385a97ce4f26
4
+ data.tar.gz: e5d3060d4b33899c235436eae1ac414e248eae1b
5
5
  SHA512:
6
- metadata.gz: 4fbd92b0823c33cb55de9dd3950e56ddf2001470a0122db892b4aeb28fa75fa3bb862384ba91482321f74718fbd42da7401c90566496d3ed3b7942701b500339
7
- data.tar.gz: 887601bc335ab5602eb1c6f9cd34be8697a7dc9e69891d048cbc32119e2fe538719c3351e95d747f82307394608cb97b931ac8738a3ae844a5b76e94700026ae
6
+ metadata.gz: f0d97695c2086c03a87fc94307418e715aa6a1a56289e5ee7effb7479004a9c956509ca7b192563a290282aecc040507472808f2dcced574cb2e79b2a9af6888
7
+ data.tar.gz: 5c34ad2d849f2b69d29a32a0dc64b8e5351c1602b3f385b710d3848dca8e8d942b24b22da70c258ac17c975883a85cd54a30545a19f6d7392c07423f4b72fd9a
data/README.md CHANGED
@@ -58,14 +58,66 @@ The model has 4 concerns:
58
58
  * [Authenticatable](https://github.com/wildland/token_authenticate_me/blob/master/lib/token_authenticate_me/concerns/models/authenticatable.rb)
59
59
  * [Invitable](https://github.com/wildland/token_authenticate_me/blob/master/lib/token_authenticate_me/concerns/models/invitable.rb)
60
60
  * [Sessionable](https://github.com/wildland/token_authenticate_me/blob/master/lib/token_authenticate_me/concerns/models/sessionable.rb)
61
- *
62
- [Passwordable](https://github.com/wildland/token_authenticate_me/blob/master/lib/token_authenticate_me/concerns/models/passwordable.rb)
61
+ * [Passwordable](https://github.com/wildland/token_authenticate_me/blob/master/lib/token_authenticate_me/concerns/models/passwordable.rb)
63
62
 
64
- *tl;dr*:
63
+ ## Usage
64
+ ```rb
65
+ class MyUser
66
+ include TokenAuthenticateMe::Concerns::Models::Authenticatable
67
+ end
68
+ ```
69
+ ### Default rules and behavior.
65
70
  * `email` is required, can't be blank, is unique (case insensitive), and must look like an email address.
66
71
  * `password` is required, can not be blank, it must be confirmed (`password_confirmation`), and must be between 8 and 72 characters long. If the model has been persisted `password` can be blank or `nil` which indicates that it should not be changed and will be ignored.
67
72
  * `username` is required, can't be blank, is unique (case insensitive), and only allows alphanumeric values.
68
73
  * To change the `password` or `email` after the model has been persisted, you will need to provide the current password as `current_password`.
74
+ * To change the `email` after the model has been persisted, you will need to be confirmed (`email_confirmation`) to change.
75
+
76
+ ### Custom Validation Rules
77
+ If you don't like the validation rules you can customize some of them by using the following override methods and/or writing your own rules. Note that they are additive with the existing rules.
78
+
79
+ ```ruby
80
+ class MyUser
81
+ def ignore_password_length_validations?
82
+ true # defaults to false
83
+ end
84
+
85
+ def ignore_username_format_validation?
86
+ true # defaults to false
87
+ end
88
+
89
+ def ignore_email_format_validation?
90
+ true # defaults to false
91
+ end
92
+
93
+ def ignore_email_confirmation_on_change?
94
+ false # defaults to true
95
+ end
96
+ end
97
+ ```
98
+
99
+ Custom Validation Rules Example
100
+ ```Ruby
101
+ class MyUser
102
+ ### Other Code
103
+ validates(
104
+ :password,
105
+ format: {
106
+ with: /\A[a-zA-Z0-9]+\Z/,
107
+ message: 'only letters and numbers are allowed.'
108
+ } # We wanted to have alphanumeric passwords.
109
+ if: :password_required? # This triggers the requirements when token_authenticate_me requires them
110
+ )
111
+ ### More Code
112
+ def ignore_password_length_validations? # We didn't want a password length constraints, but wanted only alphanumeric characters.
113
+ true
114
+ end
115
+
116
+ def ignore_email_confirmation_on_change? # We want users to have to confirm emails to reduce mistakes.
117
+ false
118
+ end
119
+ end
120
+ ```
69
121
 
70
122
  ## Code Of Conduct
71
123
  Wildland Open Source [Code Of Conduct](https://github.com/wildland/code-of-conduct)
@@ -19,19 +19,34 @@ module TokenAuthenticateMe
19
19
  :email,
20
20
  presence: true,
21
21
  uniqueness: { case_sensitive: false },
22
+ )
23
+
24
+ with_options if: :email_confirmation_required? do |model|
25
+ model.validates :email, confirmation: true
26
+ model.validates :email_confirmation, presence: true
27
+ end
28
+
29
+ validates(
30
+ :email,
22
31
  format: {
23
32
  with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i,
24
33
  message: 'invalid e-mail address'
25
- }
34
+ },
35
+ unless: :ignore_email_format_validation?
26
36
  )
27
37
 
28
38
  validates(
29
39
  :username,
30
- format: { with: /\A[a-zA-Z0-9]+\Z/ },
31
40
  presence: true,
32
41
  uniqueness: { case_sensitive: false }
33
42
  )
34
43
 
44
+ validates(
45
+ :username,
46
+ format: { with: /\A[a-zA-Z0-9]+\Z/ },
47
+ unless: :ignore_username_format_validation?
48
+ )
49
+
35
50
  def attributes
36
51
  {
37
52
  'id' => id,
@@ -46,8 +61,28 @@ module TokenAuthenticateMe
46
61
  { user: super(options) }
47
62
  end
48
63
 
64
+ def ignore_username_format_validation?
65
+ false
66
+ end
67
+
68
+ def ignore_email_format_validation?
69
+ false
70
+ end
71
+
72
+ def ignore_email_confirmation_on_change?
73
+ true
74
+ end
75
+
49
76
  protected
50
77
 
78
+ def email_confirmation_required?
79
+ !ignore_email_confirmation_on_change? && attempting_to_change_email?
80
+ end
81
+
82
+ def attempting_to_change_email?
83
+ email_changed? && persisted?
84
+ end
85
+
51
86
  def downcase_email_and_username
52
87
  self.email = email.downcase
53
88
  self.username = username.downcase
@@ -7,18 +7,29 @@ module TokenAuthenticateMe
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
-
11
10
  has_secure_password validations: false
12
11
  attr_accessor :current_password
13
12
 
14
13
  validates(
15
14
  :password,
16
15
  presence: true,
17
- length: { in: 8..72 },
18
16
  confirmation: true,
19
17
  if: :password_required?
20
18
  )
21
19
 
20
+ validates(
21
+ :password_confirmation,
22
+ presence: true,
23
+ if: :password_required?
24
+ )
25
+
26
+ validates(
27
+ :password,
28
+ length: { in: 8..72 },
29
+ if: :password_required?,
30
+ unless: :ignore_password_length_validations?
31
+ )
32
+
22
33
  validate(
23
34
  :current_password_correct,
24
35
  if: :current_password_required?
@@ -56,6 +67,10 @@ module TokenAuthenticateMe
56
67
  reset_password_token_changed? && reset_password_token_exp_changed?
57
68
  end
58
69
 
70
+ def ignore_password_length_validations?
71
+ false
72
+ end
73
+
59
74
  def password_required?
60
75
  attempting_to_change_password? || new_record?
61
76
  end
@@ -1,3 +1,3 @@
1
1
  module TokenAuthenticateMe
2
- VERSION = '0.8.0'.freeze
2
+ VERSION = '0.9.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: token_authenticate_me
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Clopton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-01-24 00:00:00.000000000 Z
12
+ date: 2018-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -165,7 +165,6 @@ files:
165
165
  - test/dummy/config/locales/en.yml
166
166
  - test/dummy/config/routes.rb
167
167
  - test/dummy/config/secrets.yml
168
- - test/dummy/log/development.log
169
168
  - test/dummy/log/test.log
170
169
  - test/dummy/public/404.html
171
170
  - test/dummy/public/422.html
@@ -200,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
199
  version: '0'
201
200
  requirements: []
202
201
  rubyforge_project:
203
- rubygems_version: 2.5.1
202
+ rubygems_version: 2.5.2
204
203
  signing_key:
205
204
  specification_version: 4
206
205
  summary: This gem adds simple token authentication to users.
@@ -233,7 +232,6 @@ test_files:
233
232
  - test/dummy/config/routes.rb
234
233
  - test/dummy/config/secrets.yml
235
234
  - test/dummy/config.ru
236
- - test/dummy/log/development.log
237
235
  - test/dummy/log/test.log
238
236
  - test/dummy/public/404.html
239
237
  - test/dummy/public/422.html
File without changes