valid8ors 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ class UrlFormatValidator < ActiveModel::EachValidator
4
+
5
+ URL_PATTERN = /^(http|https):\/\/[a-zA-Z0-9]+([\-\.]{1}[a-zA-Z0-9]+)*\.[a-zA-Z]{2,5}((:[0-9]{1,5})?\/.*)?$/
6
+
7
+ def validate_each(record, attribute, value)
8
+ unless value =~ URL_PATTERN
9
+ record.errors.add(attribute, options[:message] || invalid_message(record, attribute))
10
+ end
11
+ end
12
+
13
+ #######################
14
+ ### Private methods ###
15
+ #######################
16
+
17
+ private
18
+
19
+ def invalid_message(record, attribute)
20
+ I18n.t :improperly_formatted,
21
+ scope: "#{record.class.i18n_scope}.errors.models.#{record.class.model_name.i18n_key}.attributes.#{attribute}",
22
+ default: "is improperly formatted"
23
+ end
24
+
25
+ end
26
+
data/lib/valid8ors.rb CHANGED
@@ -2,3 +2,4 @@
2
2
 
3
3
  require 'valid8ors/email_format'
4
4
  require 'valid8ors/blacklist'
5
+ require 'valid8ors/url_format'
@@ -0,0 +1,93 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require_relative 'test_helper'
4
+
5
+ class TestSite < TestModel
6
+ validates :url, url_format: true
7
+ end
8
+
9
+ class TestSiteAllowsNilToTrue < TestModel
10
+ validates :url, url_format: { allow_nil: true }
11
+ end
12
+
13
+ class TestSiteAllowsNilToFalse < TestModel
14
+ validates :url, url_format: { allow_nil: false }
15
+ end
16
+
17
+ class TestSiteWithMessage < TestModel
18
+ validates :url, url_format: { message: 'is not well formatted' }
19
+ end
20
+
21
+ class TestUrlFormatValidator < MiniTest::Unit::TestCase
22
+
23
+ def test_valid_url
24
+ valid_urls.each { |url| assert TestSite.new(url: url).valid? }
25
+ end
26
+
27
+ def test_invalid_url
28
+ invalid_urls.each { |url| refute TestSite.new(url: url).valid? }
29
+ end
30
+
31
+ def test_default_message_on_error
32
+ test_site = TestSite.new(url: "invalid_url")
33
+ refute test_site.valid?
34
+ assert test_site.errors[:url].include?("is improperly formatted")
35
+ end
36
+
37
+ def test_custom_message_on_error
38
+ test_site = TestSiteWithMessage.new(url: "invalid_url")
39
+ refute test_site.valid?
40
+ assert test_site.errors[:url].include?("is not well formatted")
41
+ end
42
+
43
+ def test_nil_url_when_allow_nil_option_is_not_set
44
+ refute TestSite.new(url: nil).valid?
45
+ end
46
+
47
+ def test_nil_url_when_allow_nil_option_is_set_to_true
48
+ assert TestSiteAllowsNilToTrue.new(url: nil).valid?
49
+ end
50
+
51
+ def test_nil_url_when_allow_nil_option_is_set_to_false
52
+ refute TestSiteAllowsNilToFalse.new(url: nil).valid?
53
+ end
54
+
55
+ #######################
56
+ ### Private methods ###
57
+ #######################
58
+
59
+ private
60
+
61
+ def valid_urls
62
+ [
63
+ 'http://test.com',
64
+ 'http://www.test.ch',
65
+ 'https://super.long.url.with.many.subdomaim.com',
66
+ 'http://url.ch/resources',
67
+ 'http://url.ch/many/resources/after_path',
68
+ 'http://domain.com/?withparam=true',
69
+ 'http://domain.com/?withparam=true&otherparam=true',
70
+ 'http://domain.com/#with_anchor',
71
+ 'http://domain.com/#with_anchor?and=params',
72
+ 'http://domain.com/#with_anchor?and=param&other=params',
73
+ ]
74
+ end
75
+
76
+ def invalid_urls
77
+ [
78
+ '',
79
+ 'test',
80
+ 'http://s.c',
81
+ 'http://.ru',
82
+ 'test.ca',
83
+ 'http://test.ca.c',
84
+ 'http://test?xsxa',
85
+ 'bla://service.com',
86
+ 'http://test.toolongdomain',
87
+ 'http://énon.ch',
88
+ 'http://do main.com/#with_anchor',
89
+ ''
90
+ ]
91
+ end
92
+
93
+ end
data/valid8ors.gemspec CHANGED
@@ -3,9 +3,9 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "valid8ors"
6
- s.version = "0.0.2"
7
- s.authors = ["Axel Vergult"]
8
- s.email = ["axel@official.fm"]
6
+ s.version = "0.0.3"
7
+ s.authors = ["Axel Vergult", "Vincent Pochet"]
8
+ s.email = ["axel@official.fm", "vincent@official.fm"]
9
9
  s.homepage = ""
10
10
  s.summary = %q{Rails 3 awesome custom validators}
11
11
  s.description = %q{Rails 3 awesome custom validators}
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valid8ors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Axel Vergult
9
+ - Vincent Pochet
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2011-11-17 00:00:00.000000000Z
13
+ date: 2011-12-20 00:00:00.000000000Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: activemodel
16
- requirement: &70144094093240 !ruby/object:Gem::Requirement
17
+ requirement: &70335761002560 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -21,10 +22,11 @@ dependencies:
21
22
  version: '0'
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *70144094093240
25
+ version_requirements: *70335761002560
25
26
  description: Rails 3 awesome custom validators
26
27
  email:
27
28
  - axel@official.fm
29
+ - vincent@official.fm
28
30
  executables: []
29
31
  extensions: []
30
32
  extra_rdoc_files: []
@@ -38,9 +40,11 @@ files:
38
40
  - lib/valid8ors.rb
39
41
  - lib/valid8ors/blacklist.rb
40
42
  - lib/valid8ors/email_format.rb
43
+ - lib/valid8ors/url_format.rb
41
44
  - test/blacklist_test.rb
42
45
  - test/email_format_test.rb
43
46
  - test/test_helper.rb
47
+ - test/url_format_test.rb
44
48
  - valid8ors.gemspec
45
49
  homepage: ''
46
50
  licenses: []
@@ -70,3 +74,4 @@ test_files:
70
74
  - test/blacklist_test.rb
71
75
  - test/email_format_test.rb
72
76
  - test/test_helper.rb
77
+ - test/url_format_test.rb