activevalidators 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +10 -1
- data/activevalidators.gemspec +2 -2
- data/lib/active_model/validations/password_validator.rb +18 -0
- data/lib/activevalidators.rb +1 -0
- data/spec/spec_helper.rb +2 -1
- data/spec/validations/password_spec.rb +44 -0
- metadata +8 -3
data/README.md
CHANGED
@@ -20,6 +20,7 @@ In your models, the gem provides new validators like `email`, or `url`:
|
|
20
20
|
validates :email_address, :email => true
|
21
21
|
validates :link_url, :url => true
|
22
22
|
validates :user_phone, :phone => true
|
23
|
+
validates :password, :password => { :strength => :medium }
|
23
24
|
end
|
24
25
|
|
25
26
|
class Article
|
@@ -49,8 +50,9 @@ Exhaustive list of supported validators and their implementation:
|
|
49
50
|
* `phone` : based on a regular expression
|
50
51
|
* `slug` : based on `ActiveSupport::String#parameterize`
|
51
52
|
* `ip` : based on `Resolv::IPv[4|6]::Regex`
|
52
|
-
* `credit_card` : based on the `
|
53
|
+
* `credit_card` : based on the `Luhn` algorithm
|
53
54
|
* `date` : based on the `DateValidator` gem
|
55
|
+
* `password` : based on a set of regular expressions
|
54
56
|
|
55
57
|
Todo
|
56
58
|
----
|
@@ -72,6 +74,13 @@ Note on Patches/Pull Requests
|
|
72
74
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
73
75
|
* Send me a pull request. Bonus points for topic branches.
|
74
76
|
|
77
|
+
|
78
|
+
Contributors
|
79
|
+
------------
|
80
|
+
* Franck Verrot
|
81
|
+
* Oriol Gual
|
82
|
+
* Paco Guzmán
|
83
|
+
|
75
84
|
Copyright
|
76
85
|
---------
|
77
86
|
|
data/activevalidators.gemspec
CHANGED
@@ -4,9 +4,9 @@ $:.unshift lib unless $:.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "activevalidators"
|
7
|
-
s.version = '1.2.
|
7
|
+
s.version = '1.2.2'
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Franck Verrot"]
|
9
|
+
s.authors = ["Franck Verrot", "Paco Guzmán", "Oriol Gual"]
|
10
10
|
s.email = ["franck@verrot.fr"]
|
11
11
|
s.homepage = "http://github.com/cesario/activevalidators"
|
12
12
|
s.summary = %q{Collection of ActiveModel/ActiveRecord validations}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ActiveModel
|
2
|
+
module Validations
|
3
|
+
class PasswordValidator < EachValidator
|
4
|
+
REGEXES = {
|
5
|
+
:weak => /(?=.{6,}).*/, # 6 characters
|
6
|
+
:medium => /^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$/, #len=7 chars and numbers
|
7
|
+
:strong => /^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W]).*$/#len=8 chars and numbers and special chars
|
8
|
+
}
|
9
|
+
|
10
|
+
def validate_each(record, attribute, value)
|
11
|
+
required_strength = options.fetch(:strength, :weak)
|
12
|
+
if (REGEXES[required_strength] !~ value)
|
13
|
+
record.errors.add(attribute)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/activevalidators.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -9,5 +9,6 @@ end
|
|
9
9
|
|
10
10
|
class TestRecord
|
11
11
|
include ActiveModel::Validations
|
12
|
-
attr_accessor :ip, :url, :slug, :responder, :global_condition,
|
12
|
+
attr_accessor :ip, :url, :slug, :responder, :global_condition,
|
13
|
+
:local_condition, :phone, :email, :card, :password
|
13
14
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
2
|
+
|
3
|
+
describe "Password Validation" do
|
4
|
+
STRENGTHS = {
|
5
|
+
:weak => { :valid => 'sixchr', :invalid => 'foo' },
|
6
|
+
:medium => { :valid => 'chrs123', :invalid => 'sixchr' },
|
7
|
+
:strong => { :valid => 'HQSij2323#$%', :invalid => 'chrs123' }
|
8
|
+
}
|
9
|
+
|
10
|
+
subject { TestRecord.new }
|
11
|
+
|
12
|
+
STRENGTHS.each_pair do |strength, passwords|
|
13
|
+
describe "#{strength} mode" do
|
14
|
+
before(:each) do
|
15
|
+
TestRecord.reset_callbacks(:validate)
|
16
|
+
TestRecord.validates :password, :password => { :strength => strength }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "valid passwords" do
|
20
|
+
it "accepts a #{strength} password like #{passwords[:valid]}" do
|
21
|
+
subject.password = passwords[:valid]
|
22
|
+
subject.should be_valid
|
23
|
+
subject.should have(0).errors
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "invalid passwords" do
|
28
|
+
before :each do
|
29
|
+
subject.password = passwords[:invalid]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "rejects invalid passwords like #{passwords[:invalid]}" do
|
33
|
+
subject.should_not be_valid
|
34
|
+
subject.should have(1).error
|
35
|
+
end
|
36
|
+
|
37
|
+
it "generates an error message of type invalid" do
|
38
|
+
subject.should_not be_valid
|
39
|
+
subject.errors[:password].should include subject.errors.generate_message(:password, :invalid)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -5,16 +5,18 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 1.2.
|
8
|
+
- 2
|
9
|
+
version: 1.2.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Franck Verrot
|
13
|
+
- "Paco Guzm\xC3\xA1n"
|
14
|
+
- Oriol Gual
|
13
15
|
autorequire:
|
14
16
|
bindir: bin
|
15
17
|
cert_chain: []
|
16
18
|
|
17
|
-
date: 2010-12-
|
19
|
+
date: 2010-12-06 00:00:00 +01:00
|
18
20
|
default_executable:
|
19
21
|
dependencies:
|
20
22
|
- !ruby/object:Gem::Dependency
|
@@ -149,6 +151,7 @@ files:
|
|
149
151
|
- lib/active_model/validations/credit_card_validator.rb
|
150
152
|
- lib/active_model/validations/email_validator.rb
|
151
153
|
- lib/active_model/validations/ip_validator.rb
|
154
|
+
- lib/active_model/validations/password_validator.rb
|
152
155
|
- lib/active_model/validations/phone_validator.rb
|
153
156
|
- lib/active_model/validations/respond_to_validator.rb
|
154
157
|
- lib/active_model/validations/slug_validator.rb
|
@@ -158,6 +161,7 @@ files:
|
|
158
161
|
- spec/validations/credit_card_spec.rb
|
159
162
|
- spec/validations/email_spec.rb
|
160
163
|
- spec/validations/ip_spec.rb
|
164
|
+
- spec/validations/password_spec.rb
|
161
165
|
- spec/validations/phone_spec.rb
|
162
166
|
- spec/validations/respond_to_spec.rb
|
163
167
|
- spec/validations/slug_spec.rb
|
@@ -199,6 +203,7 @@ test_files:
|
|
199
203
|
- spec/validations/credit_card_spec.rb
|
200
204
|
- spec/validations/email_spec.rb
|
201
205
|
- spec/validations/ip_spec.rb
|
206
|
+
- spec/validations/password_spec.rb
|
202
207
|
- spec/validations/phone_spec.rb
|
203
208
|
- spec/validations/respond_to_spec.rb
|
204
209
|
- spec/validations/slug_spec.rb
|