url_validator 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/url_validator/version.rb +1 -1
- data/lib/url_validator.rb +5 -3
- data/spec/models/user_spec.rb +45 -0
- data/spec/resources/user_with_preffered_schema.rb +8 -0
- data/spec/spec_helper.rb +1 -0
- metadata +4 -3
data/lib/url_validator.rb
CHANGED
@@ -7,14 +7,16 @@ module ActiveModel
|
|
7
7
|
class UrlValidator < ActiveModel::Validator
|
8
8
|
|
9
9
|
def validate(record)
|
10
|
-
schemes = options[:schemes] || %w(http https).join('|')
|
11
10
|
message = options[:message] || "is not a valid URL"
|
12
|
-
|
11
|
+
schemes = options[:schemes] || %w(http https)
|
12
|
+
url_regexp = /^((#{schemes.join('|')}):\/\/){0,1}[a-z0-9]+([a-z0-9\-\.]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
|
13
|
+
preffered_schema = options[:preffered_schema] || "#{schemes.first}://"
|
13
14
|
|
14
15
|
options[:attributes].each do |attribute|
|
15
16
|
value = record.send(attribute).to_s
|
16
17
|
next if value.blank? && (options[:allow_blank] || options[:allow_nil])
|
17
|
-
|
18
|
+
record.send("#{attribute}=", preffered_schema << value) if !value.start_with?(*schemes)
|
19
|
+
normalized_value = record.send("#{attribute}_normalized")
|
18
20
|
begin
|
19
21
|
uri = Addressable::URI.parse(value)
|
20
22
|
unless url_regexp =~ normalized_value
|
data/spec/models/user_spec.rb
CHANGED
@@ -236,5 +236,50 @@ describe "User" do
|
|
236
236
|
@user.errors[:website].to_s.should == 'is not a valid URL'
|
237
237
|
end
|
238
238
|
end
|
239
|
+
|
240
|
+
context "automated preffilling prefix - preffill if didnt exists" do
|
241
|
+
before do
|
242
|
+
@user = User.new
|
243
|
+
@user.website = 'website.com'
|
244
|
+
@user_with_s = UserWithPrefferedSchema.new
|
245
|
+
@user_with_s.website = 'website.com'
|
246
|
+
end
|
247
|
+
|
248
|
+
it "should preffill http:// to url" do
|
249
|
+
@user.should be_valid
|
250
|
+
@user.website.start_with?('http://').should be_true
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should preffill https:// to url" do
|
254
|
+
@user_with_s.should be_valid
|
255
|
+
@user_with_s.website.start_with?('https://').should be_true
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context "automated preffilling prefix - dont preffill if exist" do
|
260
|
+
before do
|
261
|
+
@user = User.new
|
262
|
+
@user.website = 'http://website.com'
|
263
|
+
@user_with_s = UserWithPrefferedSchema.new
|
264
|
+
@user_with_s.website = 'https://website.com'
|
265
|
+
end
|
266
|
+
|
267
|
+
it "should not preffill http://" do
|
268
|
+
@user.should be_valid
|
269
|
+
@user.website.should == 'http://website.com'
|
270
|
+
@user.website = 'https://website.com'
|
271
|
+
@user.valid?
|
272
|
+
@user.website.should == 'https://website.com'
|
273
|
+
end
|
274
|
+
|
275
|
+
it "should not preffill https://" do
|
276
|
+
@user_with_s.should be_valid
|
277
|
+
@user_with_s.website.should == 'https://website.com'
|
278
|
+
@user_with_s.website = 'http://website.com'
|
279
|
+
@user.valid?
|
280
|
+
@user_with_s.website.should == 'http://website.com'
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
239
284
|
end
|
240
285
|
|
data/spec/spec_helper.rb
CHANGED
@@ -22,4 +22,5 @@ autoload :User ,'resources/user'
|
|
22
22
|
autoload :UserWithBlank ,'resources/user_with_blank'
|
23
23
|
autoload :UserWithAr ,'resources/user_with_ar'
|
24
24
|
autoload :UserWithCustomScheme ,'resources/user_with_custom_scheme'
|
25
|
+
autoload :UserWithPrefferedSchema ,'resources/user_with_preffered_schema'
|
25
26
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: url_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Zdenko Nevrala
|
@@ -112,6 +112,7 @@ files:
|
|
112
112
|
- spec/resources/user_with_ar.rb
|
113
113
|
- spec/resources/user_with_blank.rb
|
114
114
|
- spec/resources/user_with_custom_scheme.rb
|
115
|
+
- spec/resources/user_with_preffered_schema.rb
|
115
116
|
- spec/spec.opts
|
116
117
|
- spec/spec_helper.rb
|
117
118
|
- url_validator.gemspec
|