activevalidators 1.2.3 → 1.2.4
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.
- data/Gemfile.lock +1 -1
- data/README.md +5 -4
- data/activevalidators.gemspec +1 -1
- data/lib/active_model/validations/twitter_validator.rb +22 -0
- data/lib/activevalidators.rb +1 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/validations/twitter_spec.rb +154 -0
- metadata +17 -3
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -10,10 +10,6 @@ In your Gemfile ( >>= 1.1.0 ):
|
|
|
10
10
|
|
|
11
11
|
gem 'activevalidators'
|
|
12
12
|
|
|
13
|
-
**N.B: if you use version <= 1.0.2, use this instead:**
|
|
14
|
-
|
|
15
|
-
gem 'activevalidators', :require => 'active_validators'
|
|
16
|
-
|
|
17
13
|
In your models, the gem provides new validators like `email`, or `url`:
|
|
18
14
|
|
|
19
15
|
class User
|
|
@@ -21,6 +17,9 @@ In your models, the gem provides new validators like `email`, or `url`:
|
|
|
21
17
|
validates :link_url, :url => true
|
|
22
18
|
validates :user_phone, :phone => true
|
|
23
19
|
validates :password, :password => { :strength => :medium }
|
|
20
|
+
validates :twitter_at, :twitter => { :format => :username_with_at }
|
|
21
|
+
validates :twitter_url, :twitter => { :format => :url }
|
|
22
|
+
validates :twitter, :twitter => true
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
class Article
|
|
@@ -48,6 +47,7 @@ Exhaustive list of supported validators and their implementation:
|
|
|
48
47
|
* `email` : based on the `mail` gem
|
|
49
48
|
* `url` : based on a regular expression
|
|
50
49
|
* `phone` : based on a regular expression
|
|
50
|
+
* `twitter` : based on a regular expression
|
|
51
51
|
* `slug` : based on `ActiveSupport::String#parameterize`
|
|
52
52
|
* `ip` : based on `Resolv::IPv[4|6]::Regex`
|
|
53
53
|
* `credit_card` : based on the `Luhn` algorithm
|
|
@@ -80,6 +80,7 @@ Contributors
|
|
|
80
80
|
* Franck Verrot
|
|
81
81
|
* Oriol Gual
|
|
82
82
|
* Paco Guzmán
|
|
83
|
+
* Garrett Bjerkhoel
|
|
83
84
|
|
|
84
85
|
Copyright
|
|
85
86
|
---------
|
data/activevalidators.gemspec
CHANGED
|
@@ -4,7 +4,7 @@ $:.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.4'
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
|
9
9
|
s.authors = ["Franck Verrot", "Paco Guzmán", "Oriol Gual", "Garrett Bjerkhoel"]
|
|
10
10
|
s.email = ["franck@verrot.fr"]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module ActiveModel
|
|
2
|
+
module Validations
|
|
3
|
+
|
|
4
|
+
class TwitterValidator < EachValidator
|
|
5
|
+
def validate_each(record, attribute, value)
|
|
6
|
+
format = options[:format].to_sym if options[:format]
|
|
7
|
+
|
|
8
|
+
if value.nil?
|
|
9
|
+
record.errors.add_on_blank(attribute)
|
|
10
|
+
elsif format == :url
|
|
11
|
+
match = value.match(/^https?:\/\/(www\.)?twitter.com\/([A-Za-z0-9_]{1,15})$/i)
|
|
12
|
+
record.errors.add(attribute) unless match && !match[2].nil? # www. is first capture
|
|
13
|
+
elsif format == :username_with_at
|
|
14
|
+
record.errors.add(attribute) unless value.match(/^@([A-Za-z0-9_]{1,15})$/i)
|
|
15
|
+
else
|
|
16
|
+
record.errors.add(attribute) unless value.match(/^([A-Za-z0-9_]{1,15})$/i)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/activevalidators.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
|
2
|
+
|
|
3
|
+
describe "Twitter Validation" do
|
|
4
|
+
before(:each) do
|
|
5
|
+
TestRecord.reset_callbacks(:validate)
|
|
6
|
+
TestRecord.validates :twitter_username, :twitter => true
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
subject { TestRecord.new }
|
|
10
|
+
|
|
11
|
+
it "rejects invalid urls" do
|
|
12
|
+
subject.should_not be_valid
|
|
13
|
+
subject.should have(1).error
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "generates an error message of type blank" do
|
|
17
|
+
subject.should_not be_valid
|
|
18
|
+
subject.errors[:twitter_username].should include subject.errors.generate_message(:twitter_username, :blank)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "for twitter url validator" do
|
|
22
|
+
before do
|
|
23
|
+
TestRecord.reset_callbacks(:validate)
|
|
24
|
+
TestRecord.validates :twitter_username, :twitter => { :format => :url }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "validates with http" do
|
|
28
|
+
subject.twitter_username = 'http://twitter.com/garrettb'
|
|
29
|
+
subject.should be_valid
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "validates with https protocol" do
|
|
33
|
+
subject.twitter_username = 'https://twitter.com/garrettb'
|
|
34
|
+
subject.should be_valid
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "generate error with ftp protocol" do
|
|
38
|
+
subject.twitter_username = 'ftp://twitter.com/garrettb'
|
|
39
|
+
subject.should_not be_valid
|
|
40
|
+
subject.should have(1).error
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "validates with www and http" do
|
|
44
|
+
subject.twitter_username = 'http://www.twitter.com/garrettb'
|
|
45
|
+
subject.should be_valid
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "generate error without www dot" do
|
|
49
|
+
subject.twitter_username = 'http://wwwtwitter.com/garrettb'
|
|
50
|
+
subject.should_not be_valid
|
|
51
|
+
subject.should have(1).error
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "generate error without no username" do
|
|
55
|
+
subject.twitter_username = 'http://twitter.com'
|
|
56
|
+
subject.should_not be_valid
|
|
57
|
+
subject.should have(1).error
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "generate error without no username and trailing slash" do
|
|
61
|
+
subject.twitter_username = 'http://twitter.com/'
|
|
62
|
+
subject.should_not be_valid
|
|
63
|
+
subject.should have(1).error
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "generate error with too long of username" do
|
|
67
|
+
subject.twitter_username = 'http://twitter.com/garrettbjerkhoelwashere'
|
|
68
|
+
subject.should_not be_valid
|
|
69
|
+
subject.should have(1).error
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "generate error with invalid character" do
|
|
73
|
+
subject.twitter_username = 'http://twitter.com/garrettbjerkhoé'
|
|
74
|
+
subject.should_not be_valid
|
|
75
|
+
subject.should have(1).error
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "for twitter at sign validator" do
|
|
80
|
+
before do
|
|
81
|
+
TestRecord.reset_callbacks(:validate)
|
|
82
|
+
TestRecord.validates :twitter_username, :twitter => { :format => :username_with_at }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "validate with valid username" do
|
|
86
|
+
subject.twitter_username = '@garrettb'
|
|
87
|
+
subject.should be_valid
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "validate with one character" do
|
|
91
|
+
subject.twitter_username = '@a'
|
|
92
|
+
subject.should be_valid
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "generate error with too long of username" do
|
|
96
|
+
subject.twitter_username = '@garrettbjerkhoelwashere'
|
|
97
|
+
subject.should_not be_valid
|
|
98
|
+
subject.should have(1).error
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "generate error with no username" do
|
|
102
|
+
subject.twitter_username = '@'
|
|
103
|
+
subject.should_not be_valid
|
|
104
|
+
subject.should have(1).error
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "generate error with invalid character" do
|
|
108
|
+
subject.twitter_username = '@érik'
|
|
109
|
+
subject.should_not be_valid
|
|
110
|
+
subject.should have(1).error
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe "for twitter without at sign validator" do
|
|
115
|
+
before do
|
|
116
|
+
TestRecord.reset_callbacks(:validate)
|
|
117
|
+
TestRecord.validates :twitter_username, :twitter => true
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "validate with valid username" do
|
|
121
|
+
subject.twitter_username = 'garrettb'
|
|
122
|
+
subject.should be_valid
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "validate with one character" do
|
|
126
|
+
subject.twitter_username = 'a'
|
|
127
|
+
subject.should be_valid
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "generate error with too long of username" do
|
|
131
|
+
subject.twitter_username = 'garrettbjerkhoelwashere'
|
|
132
|
+
subject.should_not be_valid
|
|
133
|
+
subject.should have(1).error
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "generate error with no username" do
|
|
137
|
+
subject.twitter_username = ''
|
|
138
|
+
subject.should_not be_valid
|
|
139
|
+
subject.should have(1).error
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "generate error with invalid character" do
|
|
143
|
+
subject.twitter_username = 'érik'
|
|
144
|
+
subject.should_not be_valid
|
|
145
|
+
subject.should have(1).error
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "generate error with at sign character" do
|
|
149
|
+
subject.twitter_username = '@garrettb'
|
|
150
|
+
subject.should_not be_valid
|
|
151
|
+
subject.should have(1).error
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
metadata
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activevalidators
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 23
|
|
4
5
|
prerelease: false
|
|
5
6
|
segments:
|
|
6
7
|
- 1
|
|
7
8
|
- 2
|
|
8
|
-
-
|
|
9
|
-
version: 1.2.
|
|
9
|
+
- 4
|
|
10
|
+
version: 1.2.4
|
|
10
11
|
platform: ruby
|
|
11
12
|
authors:
|
|
12
13
|
- Franck Verrot
|
|
@@ -17,7 +18,7 @@ autorequire:
|
|
|
17
18
|
bindir: bin
|
|
18
19
|
cert_chain: []
|
|
19
20
|
|
|
20
|
-
date: 2010-12-
|
|
21
|
+
date: 2010-12-11 00:00:00 +01:00
|
|
21
22
|
default_executable:
|
|
22
23
|
dependencies:
|
|
23
24
|
- !ruby/object:Gem::Dependency
|
|
@@ -28,6 +29,7 @@ dependencies:
|
|
|
28
29
|
requirements:
|
|
29
30
|
- - ">="
|
|
30
31
|
- !ruby/object:Gem::Version
|
|
32
|
+
hash: 3
|
|
31
33
|
segments:
|
|
32
34
|
- 0
|
|
33
35
|
version: "0"
|
|
@@ -41,6 +43,7 @@ dependencies:
|
|
|
41
43
|
requirements:
|
|
42
44
|
- - ">="
|
|
43
45
|
- !ruby/object:Gem::Version
|
|
46
|
+
hash: 3
|
|
44
47
|
segments:
|
|
45
48
|
- 0
|
|
46
49
|
version: "0"
|
|
@@ -54,6 +57,7 @@ dependencies:
|
|
|
54
57
|
requirements:
|
|
55
58
|
- - ">="
|
|
56
59
|
- !ruby/object:Gem::Version
|
|
60
|
+
hash: 3
|
|
57
61
|
segments:
|
|
58
62
|
- 0
|
|
59
63
|
version: "0"
|
|
@@ -67,6 +71,7 @@ dependencies:
|
|
|
67
71
|
requirements:
|
|
68
72
|
- - ">="
|
|
69
73
|
- !ruby/object:Gem::Version
|
|
74
|
+
hash: 3
|
|
70
75
|
segments:
|
|
71
76
|
- 0
|
|
72
77
|
version: "0"
|
|
@@ -80,6 +85,7 @@ dependencies:
|
|
|
80
85
|
requirements:
|
|
81
86
|
- - ">="
|
|
82
87
|
- !ruby/object:Gem::Version
|
|
88
|
+
hash: 7
|
|
83
89
|
segments:
|
|
84
90
|
- 3
|
|
85
91
|
- 0
|
|
@@ -95,6 +101,7 @@ dependencies:
|
|
|
95
101
|
requirements:
|
|
96
102
|
- - ">="
|
|
97
103
|
- !ruby/object:Gem::Version
|
|
104
|
+
hash: 7
|
|
98
105
|
segments:
|
|
99
106
|
- 3
|
|
100
107
|
- 0
|
|
@@ -110,6 +117,7 @@ dependencies:
|
|
|
110
117
|
requirements:
|
|
111
118
|
- - ">="
|
|
112
119
|
- !ruby/object:Gem::Version
|
|
120
|
+
hash: 3
|
|
113
121
|
segments:
|
|
114
122
|
- 0
|
|
115
123
|
version: "0"
|
|
@@ -123,6 +131,7 @@ dependencies:
|
|
|
123
131
|
requirements:
|
|
124
132
|
- - "="
|
|
125
133
|
- !ruby/object:Gem::Version
|
|
134
|
+
hash: 25
|
|
126
135
|
segments:
|
|
127
136
|
- 0
|
|
128
137
|
- 5
|
|
@@ -156,6 +165,7 @@ files:
|
|
|
156
165
|
- lib/active_model/validations/phone_validator.rb
|
|
157
166
|
- lib/active_model/validations/respond_to_validator.rb
|
|
158
167
|
- lib/active_model/validations/slug_validator.rb
|
|
168
|
+
- lib/active_model/validations/twitter_validator.rb
|
|
159
169
|
- lib/active_model/validations/url_validator.rb
|
|
160
170
|
- lib/activevalidators.rb
|
|
161
171
|
- spec/spec_helper.rb
|
|
@@ -166,6 +176,7 @@ files:
|
|
|
166
176
|
- spec/validations/phone_spec.rb
|
|
167
177
|
- spec/validations/respond_to_spec.rb
|
|
168
178
|
- spec/validations/slug_spec.rb
|
|
179
|
+
- spec/validations/twitter_spec.rb
|
|
169
180
|
- spec/validations/url_spec.rb
|
|
170
181
|
has_rdoc: true
|
|
171
182
|
homepage: http://github.com/cesario/activevalidators
|
|
@@ -181,6 +192,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
181
192
|
requirements:
|
|
182
193
|
- - ">="
|
|
183
194
|
- !ruby/object:Gem::Version
|
|
195
|
+
hash: 3
|
|
184
196
|
segments:
|
|
185
197
|
- 0
|
|
186
198
|
version: "0"
|
|
@@ -189,6 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
189
201
|
requirements:
|
|
190
202
|
- - ">="
|
|
191
203
|
- !ruby/object:Gem::Version
|
|
204
|
+
hash: 3
|
|
192
205
|
segments:
|
|
193
206
|
- 0
|
|
194
207
|
version: "0"
|
|
@@ -208,4 +221,5 @@ test_files:
|
|
|
208
221
|
- spec/validations/phone_spec.rb
|
|
209
222
|
- spec/validations/respond_to_spec.rb
|
|
210
223
|
- spec/validations/slug_spec.rb
|
|
224
|
+
- spec/validations/twitter_spec.rb
|
|
211
225
|
- spec/validations/url_spec.rb
|