ar-validations 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README +49 -0
- data/Rakefile +70 -0
- data/init.rb +2 -0
- data/lib/ar-validations.rb +96 -0
- data/tasks/validations_tasks.rake +4 -0
- data/test/test_helper.rb +110 -0
- data/test/validations_test.rb +295 -0
- metadata +69 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 [Nicolas Cavigneaux]
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
-*-markdown-*-
|
2
|
+
|
3
|
+
|
4
|
+
AR Validations
|
5
|
+
==============
|
6
|
+
|
7
|
+
This ActiveRecord extension provides more validation schemes. There are some useful validation missing added by this plugin to fill the gap.
|
8
|
+
|
9
|
+
Available validations are :
|
10
|
+
|
11
|
+
* *email*: It checks for presence, length, format and uniqueness. There is no guarantee that a validated email is real and deliverable.
|
12
|
+
* *URLs*: It checks for validity of the link by contacting it. If not protocol is not specified, it'll automatically add "http://" in front of the url.
|
13
|
+
|
14
|
+
Installation
|
15
|
+
------------
|
16
|
+
|
17
|
+
In your Rails app root, use the following command-line :
|
18
|
+
|
19
|
+
cd vendor/plugins
|
20
|
+
hg clone http://bitbucket.org/Bounga/ar-validations/
|
21
|
+
|
22
|
+
or install it system-wide :
|
23
|
+
|
24
|
+
$ sudo gem install ar-validations
|
25
|
+
|
26
|
+
and require it in Rails::Initializer (environment.rb) :
|
27
|
+
|
28
|
+
config.gem 'ar-validations'
|
29
|
+
|
30
|
+
|
31
|
+
Example
|
32
|
+
-------
|
33
|
+
|
34
|
+
In your model :
|
35
|
+
|
36
|
+
class User < ActiveRecord::Base
|
37
|
+
validates_email :email
|
38
|
+
validates_url :url
|
39
|
+
end
|
40
|
+
|
41
|
+
Other
|
42
|
+
-----
|
43
|
+
|
44
|
+
For more information see [Project homepage](http://www.bitbucket.org/Bounga/ar-validations/)
|
45
|
+
|
46
|
+
Problems, comments, and suggestions are welcome on the [ticket system](http://www.bitbucket.org/Bounga/ar-validations/issues/new/)
|
47
|
+
|
48
|
+
|
49
|
+
Copyright (c) 2009 Nicolas Cavigneaux, released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'rake/gempackagetask'
|
5
|
+
require 'rake/contrib/rubyforgepublisher'
|
6
|
+
require 'rubyforge'
|
7
|
+
|
8
|
+
SPEC = Gem::Specification.new do |s|
|
9
|
+
s.name = 'ar-validations'
|
10
|
+
s.rubyforge_project = 'ar-validations'
|
11
|
+
s.version = '1.1.0'
|
12
|
+
s.authors = ['Nicolas Cavigneaux']
|
13
|
+
s.email = 'nico@bounga.org'
|
14
|
+
s.homepage = 'http://www.bitbucket.org/Bounga/ar-validations'
|
15
|
+
s.summary = 'An ActiveRecord extension provides more validation schemes'
|
16
|
+
s.description = 'This ActiveRecord extension provides more validation schemes. There are some useful validation missing added by this plugin to fill the gap.'
|
17
|
+
s.files = [ "Rakefile", "init.rb", "README", "LICENSE"] +
|
18
|
+
Dir.glob("{bin,assets,doc,lib,tasks,test}/**/*")
|
19
|
+
s.test_file = "test/validations_test.rb"
|
20
|
+
s.has_rdoc = true
|
21
|
+
s.extra_rdoc_files = ['README']
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
s.add_dependency('activerecord')
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Default: run unit tests.'
|
27
|
+
task :default => :test
|
28
|
+
|
29
|
+
task :gem
|
30
|
+
Rake::GemPackageTask.new(SPEC) do |pkg|
|
31
|
+
pkg.need_zip = true
|
32
|
+
pkg.need_tar_bz2 = true
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Install gem file #{SPEC.name}-#{SPEC.version}.gem"
|
36
|
+
task :install => [:gem] do
|
37
|
+
sh "gem install pkg/#{SPEC.name}-#{SPEC.version}.gem"
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "Publish documentation to RubyForge"
|
41
|
+
task :publish_doc => [:rdoc] do
|
42
|
+
rf = Rake::RubyForgePublisher.new(SPEC.rubyforge_project, 'bounga')
|
43
|
+
rf.upload
|
44
|
+
puts "Published documentation to RubyForge"
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "Release gem #{SPEC.name}-#{SPEC.version}.gem"
|
48
|
+
task :release => [:gem, :publish_doc] do
|
49
|
+
rf = RubyForge.new.configure
|
50
|
+
puts "Logging in"
|
51
|
+
rf.login
|
52
|
+
|
53
|
+
puts "Releasing #{SPEC.name} v.#{SPEC.version}"
|
54
|
+
|
55
|
+
files = Dir.glob('pkg/*.{zip,bz2,gem}')
|
56
|
+
rf.add_release SPEC.rubyforge_project, SPEC.rubyforge_project, SPEC.version, *files
|
57
|
+
end
|
58
|
+
|
59
|
+
Rake::TestTask.new(:test) do |t|
|
60
|
+
t.libs << 'lib'
|
61
|
+
t.pattern = 'test/**/*_test.rb'
|
62
|
+
t.verbose = true
|
63
|
+
end
|
64
|
+
|
65
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
66
|
+
rdoc.title = 'AR Validations'
|
67
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
68
|
+
rdoc.rdoc_files.include('README')
|
69
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
70
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
module Bounga
|
4
|
+
module ActiveRecord
|
5
|
+
module Validations
|
6
|
+
RE_EMAIL_NAME = '[\w\.%\+\-]+' # what you actually see in practice
|
7
|
+
#RE_EMAIL_NAME = '0-9A-Z!#\$%\&\'\*\+_/=\?^\-`\{|\}~\.' # technically allowed by RFC-2822
|
8
|
+
RE_DOMAIN_HEAD = '(?:[A-Z0-9\-]+\.)+'
|
9
|
+
RE_DOMAIN_TLD = '(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)'
|
10
|
+
RE_EMAIL_OK = /\A#{RE_EMAIL_NAME}@#{RE_DOMAIN_HEAD}#{RE_DOMAIN_TLD}\z/i
|
11
|
+
MSG_EMAIL_BAD = "should look like an email address."
|
12
|
+
RE_URL_OK = /^(http|https|ftp)/i
|
13
|
+
MSG_URL_BAD = "should be a valid url."
|
14
|
+
|
15
|
+
def self.included(base)
|
16
|
+
base.extend ClassMethods
|
17
|
+
end
|
18
|
+
|
19
|
+
# This ActiveRecord extension provides more validation schemes.
|
20
|
+
# You can validate:
|
21
|
+
# * *email*: It checks for presence, length, format and uniqueness.
|
22
|
+
# There is no guarantee that a validated email is real and deliverable.
|
23
|
+
# * *URLs*: It checks for validity of the link by contacting it.
|
24
|
+
# If not protocol is not specified, it'll automatically add "http://" in front of the url.
|
25
|
+
#
|
26
|
+
# User example:
|
27
|
+
#
|
28
|
+
# class User < ActiveRecord::Base
|
29
|
+
# validates_email :email
|
30
|
+
# validates_url :url
|
31
|
+
# end
|
32
|
+
module ClassMethods
|
33
|
+
# Configuration options are:
|
34
|
+
#
|
35
|
+
# * <tt>:allow_blank</tt> - If set to <tt>true</tt>, skips this validation if the attribute is blank (default: <tt>false</tt>)
|
36
|
+
# * <tt>:allow_nil</tt> - If set to <tt>true</tt>, skips this validation if the attribute is nil (default: <tt>false</tt>)
|
37
|
+
# * <tt>:on</tt> - Specifies when this validation is active (default is <tt>:save</tt>, other options <tt>:create</tt>, <tt>:update</tt>)
|
38
|
+
# * <tt>:with</tt> - The regular expression used to validate the email format with (default: RFC-2822 compliant)
|
39
|
+
# * <tt>:uniq</tt> - If set to <tt>true</tt>, ensure uniqueness of the attribute (default: <tt>false</tt>)
|
40
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should occur (e.g.
|
41
|
+
# <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
|
42
|
+
# or string should return or evaluate to a true or false value.
|
43
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should not occur
|
44
|
+
# (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>).
|
45
|
+
# The method, proc or string should return or evaluate to a true or false value.
|
46
|
+
# * <tt>:message</tt> - A custom error message (default: <tt>"should look like an email address."</tt>)
|
47
|
+
def validates_email(*fields)
|
48
|
+
options = { :message => MSG_EMAIL_BAD, :on => :save, :with => RE_EMAIL_OK, :allow_blank => false, :allow_nil => false }
|
49
|
+
options.update(fields.extract_options!)
|
50
|
+
|
51
|
+
validates_each(fields, options) do |record, attr, value|
|
52
|
+
validates_presence_of(attr) unless options[:allow_nil] or options[:allow_blank]
|
53
|
+
|
54
|
+
with_options(:allow_blank => options[:allow_blank], :allow_nil => options[:allow_nil]) do |el|
|
55
|
+
el.validates_length_of attr, :within => 6..100
|
56
|
+
el.validates_uniqueness_of attr, :case_sensitive => false if options[:uniq]
|
57
|
+
el.validates_format_of attr, :with => options[:with], :message => options[:message]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Configuration options are:
|
63
|
+
#
|
64
|
+
# * <tt>:allow_blank</tt> - If set to <tt>true</tt>, skips this validation if the attribute is blank (default: <tt>false</tt>)
|
65
|
+
# * <tt>:allow_nil</tt> - If set to <tt>true</tt>, skips this validation if the attribute is nil (default: <tt>false</tt>)
|
66
|
+
# * <tt>:on</tt> - Specifies when this validation is active (default is <tt>:save</tt>, other options <tt>:create</tt>, <tt>:update</tt>)
|
67
|
+
# * <tt>:with</tt> - The regular expression used to validate the format with. Custom regexp will disable
|
68
|
+
# real URI verification (no contact with URI) (default: RE_URL_OK)
|
69
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should occur (e.g.
|
70
|
+
# <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
|
71
|
+
# or string should return or evaluate to a true or false value.
|
72
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should not occur
|
73
|
+
# (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>).
|
74
|
+
# The method, proc or string should return or evaluate to a true or false value.
|
75
|
+
# * <tt>:message</tt> - A custom error message (default: <tt>"should be a valid url."</tt>)
|
76
|
+
def validates_url(*fields)
|
77
|
+
options = { :message => MSG_URL_BAD, :on => :save, :with => RE_URL_OK, :allow_blank => false, :allow_nil => false }
|
78
|
+
options.update(fields.extract_options!)
|
79
|
+
|
80
|
+
validates_each(fields, options) do |record, attr, value|
|
81
|
+
validates_presence_of(attr) unless options[:allow_nil] or options[:allow_blank]
|
82
|
+
|
83
|
+
if options[:with] == RE_URL_OK
|
84
|
+
record.send(attr.to_s + "=", "http://#{value}") unless value =~ options[:with]
|
85
|
+
open(record.send(attr)) rescue record.errors.add(attr, options[:message]) unless value.blank?
|
86
|
+
else
|
87
|
+
record.errors.add(attr, options[:message]) unless value =~ options[:with]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
ActiveRecord::Base.send(:include, Bounga::ActiveRecord::Validations)
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
$KCODE = 'u'
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'active_record'
|
7
|
+
require "#{File.dirname(__FILE__)}/../init"
|
8
|
+
|
9
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
10
|
+
|
11
|
+
ActiveRecord::Schema.define :version => 0 do
|
12
|
+
create_table :users, :force => true do |t|
|
13
|
+
t.column :email, :string
|
14
|
+
t.column :email2, :string
|
15
|
+
t.column :url, :string
|
16
|
+
t.column :url2, :string
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Mixin < ActiveRecord::Base
|
21
|
+
def self.table_name() "users" end
|
22
|
+
end
|
23
|
+
|
24
|
+
class User < Mixin
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
class UserEmail < Mixin
|
29
|
+
validates_email :email
|
30
|
+
end
|
31
|
+
|
32
|
+
class UserEmailCustom < Mixin
|
33
|
+
validates_email :email, :message => "must be valid!"
|
34
|
+
end
|
35
|
+
|
36
|
+
class UserEmailUpdate < Mixin
|
37
|
+
validates_email :email, :on => :update
|
38
|
+
end
|
39
|
+
|
40
|
+
class UserEmailUniq < Mixin
|
41
|
+
validates_email :email, :uniq => true
|
42
|
+
end
|
43
|
+
|
44
|
+
class UserEmailAllowBlank < Mixin
|
45
|
+
validates_email :email, :allow_blank => true
|
46
|
+
end
|
47
|
+
|
48
|
+
class UserEmailAllowNil < Mixin
|
49
|
+
validates_email :email, :allow_nil => true
|
50
|
+
end
|
51
|
+
|
52
|
+
class UserMultipleEmail < Mixin
|
53
|
+
validates_email :email, :email2
|
54
|
+
end
|
55
|
+
|
56
|
+
class UserMultipleEmailAllowBlank < Mixin
|
57
|
+
validates_email :email, :email2, :allow_blank => true
|
58
|
+
end
|
59
|
+
|
60
|
+
class UserEmailIf < Mixin
|
61
|
+
validates_url :email, :if => Proc.new { |user| user.email.length > 10 }
|
62
|
+
end
|
63
|
+
|
64
|
+
class UserEmailUnless < Mixin
|
65
|
+
validates_url :email, :unless => Proc.new { |user| user.email.length < 10 }
|
66
|
+
end
|
67
|
+
|
68
|
+
class UserUrl < Mixin
|
69
|
+
validates_url :url
|
70
|
+
end
|
71
|
+
|
72
|
+
class UserUrlCustom < Mixin
|
73
|
+
validates_url :url, :message => "must be valid!"
|
74
|
+
end
|
75
|
+
|
76
|
+
class UserUrlCustomRe < Mixin
|
77
|
+
validates_url :url, :with => /^vnc/i
|
78
|
+
end
|
79
|
+
|
80
|
+
class UserUrlUpdate < Mixin
|
81
|
+
validates_url :url, :on => :update
|
82
|
+
end
|
83
|
+
|
84
|
+
class UserUrlAllowBlank < Mixin
|
85
|
+
validates_url :url, :allow_blank => true
|
86
|
+
end
|
87
|
+
|
88
|
+
class UserUrlAllowNil < Mixin
|
89
|
+
validates_url :url, :allow_nil => true
|
90
|
+
end
|
91
|
+
|
92
|
+
class UserMultipleUrl < Mixin
|
93
|
+
validates_url :url, :url2
|
94
|
+
end
|
95
|
+
|
96
|
+
class UserMultipleUrlAllowBlank < Mixin
|
97
|
+
validates_url :url, :url2, :allow_blank => true
|
98
|
+
end
|
99
|
+
|
100
|
+
class UserMultipleUrlAllowNil < Mixin
|
101
|
+
validates_url :url, :url2, :allow_nil => true
|
102
|
+
end
|
103
|
+
|
104
|
+
class UserUrlIf < Mixin
|
105
|
+
validates_url :url, :if => Proc.new { |user| user.url.length > 20 }
|
106
|
+
end
|
107
|
+
|
108
|
+
class UserUrlUnless < Mixin
|
109
|
+
validates_url :url, :unless => Proc.new { |user| user.url.length < 20 }
|
110
|
+
end
|
@@ -0,0 +1,295 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class ValidationsTest < Test::Unit::TestCase
|
4
|
+
def teardown
|
5
|
+
User.delete_all
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_without_url
|
9
|
+
user = UserUrl.create
|
10
|
+
assert_not_nil user.errors, user.errors.inspect
|
11
|
+
assert !user.valid?, user.inspect
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_bad_url
|
15
|
+
user = UserUrl.create :url => 'http://rorvalidations.com/'
|
16
|
+
assert_not_nil user.errors, user.errors.inspect
|
17
|
+
assert !user.valid?, user.inspect
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_good_url
|
21
|
+
user = UserUrl.create :url => 'http://www.google.com'
|
22
|
+
assert user.errors.empty?, user.errors.inspect
|
23
|
+
assert user.valid?, user.inspect
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_good_url_without_http
|
27
|
+
user = UserUrl.create :url => 'www.google.com'
|
28
|
+
assert user.errors.empty?, user.errors.inspect
|
29
|
+
assert user.valid?, user.inspect
|
30
|
+
assert user.url, "http://www.google.com"
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_bad_url_with_custom_message
|
34
|
+
user = UserUrlCustom.create :url => 'http://rorvalidations.com/'
|
35
|
+
assert_not_nil user.errors, user.errors.inspect
|
36
|
+
assert !user.valid?, user.inspect
|
37
|
+
assert_equal("must be valid!", user.errors['url'].to_s)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_bad_url_with_allow_blank
|
41
|
+
user = UserUrlAllowBlank.create :url => 'http://rorvalidations.com/'
|
42
|
+
assert_not_nil user.errors, user.errors.inspect
|
43
|
+
assert !user.valid?, user.inspect
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_good_url_with_allow_blank
|
47
|
+
user = UserUrlAllowBlank.create :url => 'http://www.google.com'
|
48
|
+
assert user.errors.empty?, user.errors.inspect
|
49
|
+
assert user.valid?, user.inspect
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_good_url_without_http_with_allow_blank
|
53
|
+
user = UserUrlAllowBlank.create :url => 'www.google.com'
|
54
|
+
assert user.errors.empty?, user.errors.inspect
|
55
|
+
assert user.valid?, user.inspect
|
56
|
+
assert user.url, "http://www.google.com"
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_without_url_with_allow_blank
|
60
|
+
user = UserUrlAllowBlank.create
|
61
|
+
assert user.errors.empty?, user.errors.inspect
|
62
|
+
assert user.valid?, user.inspect
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_multiple_urls
|
66
|
+
user = UserMultipleUrl.create :url => 'http://www.google.com', :url2 => 'http://www.yahoo.com'
|
67
|
+
assert user.errors.empty?, user.errors.inspect
|
68
|
+
assert user.valid?, user.inspect
|
69
|
+
|
70
|
+
user = UserMultipleUrl.create :url => 'http://rorvalidations.com/', :url2 => 'http://www.yahoo.com'
|
71
|
+
assert_not_nil user.errors, user.errors.inspect
|
72
|
+
assert !user.valid?, user.inspect
|
73
|
+
|
74
|
+
user = UserMultipleUrl.create :url => 'http://www.google.com'
|
75
|
+
assert_not_nil user.errors, user.errors.inspect
|
76
|
+
assert !user.valid?, user.inspect
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_multiple_urls_with_allow_blank
|
80
|
+
user = UserMultipleUrlAllowBlank.create :url => 'http://www.google.com', :url2 => 'http://www.yahoo.com'
|
81
|
+
assert user.errors.empty?, user.errors.inspect
|
82
|
+
assert user.valid?, user.inspect
|
83
|
+
|
84
|
+
user = UserMultipleUrlAllowBlank.create :url => 'http://rorvalidations.com/', :url2 => 'http://www.yahoo.com'
|
85
|
+
assert_not_nil user.errors, user.errors.inspect
|
86
|
+
assert !user.valid?, user.inspect
|
87
|
+
|
88
|
+
user = UserMultipleUrlAllowBlank.create :url => 'http://www.google.com'
|
89
|
+
assert user.errors.empty?, user.errors.inspect
|
90
|
+
assert user.valid?, user.inspect
|
91
|
+
|
92
|
+
user = UserMultipleUrlAllowBlank.create
|
93
|
+
assert user.errors.empty?, user.errors.inspect
|
94
|
+
assert user.valid?, user.inspect
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_without_url_with_allow_nil
|
98
|
+
user = UserUrlAllowNil.create
|
99
|
+
assert user.errors.empty?, user.errors.inspect
|
100
|
+
assert user.valid?, user.inspect
|
101
|
+
|
102
|
+
user = UserUrlAllowNil.create(:url => '')
|
103
|
+
assert_not_nil user.errors, user.errors.inspect
|
104
|
+
assert !user.valid?, user.inspect
|
105
|
+
|
106
|
+
user = UserMultipleUrlAllowNil.create
|
107
|
+
assert user.errors.empty?, user.errors.inspect
|
108
|
+
assert user.valid?, user.inspect
|
109
|
+
|
110
|
+
user = UserMultipleUrlAllowNil.create(:url => '')
|
111
|
+
assert_not_nil user.errors, user.errors.inspect
|
112
|
+
assert !user.valid?, user.inspect
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_without_url_on_update
|
116
|
+
user = UserUrlUpdate.create
|
117
|
+
assert user.errors.empty?, user.errors.inspect
|
118
|
+
assert user.valid?, user.errors.inspect
|
119
|
+
|
120
|
+
user.update_attribute(:email, 'test@example.com')
|
121
|
+
assert_not_nil user.errors, user.errors.inspect
|
122
|
+
assert !user.valid?, user.inspect
|
123
|
+
|
124
|
+
user = UserUrlUpdate.first
|
125
|
+
user.update_attribute(:url, 'http://www.google.com')
|
126
|
+
assert user.errors.empty?, user.errors.inspect
|
127
|
+
assert user.valid?, user.inspect
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_url_with_custom_regexp
|
131
|
+
user = UserUrlCustomRe.create(:url => 'http://www.google.com')
|
132
|
+
assert_not_nil user.errors, user.errors.inspect
|
133
|
+
assert !user.valid?, user.inspect
|
134
|
+
|
135
|
+
user = UserUrlCustomRe.create(:url => 'vnc://localhost')
|
136
|
+
assert user.errors.empty?, user.errors.inspect
|
137
|
+
assert user.valid?, user.inspect
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_url_with_if
|
141
|
+
user = UserUrlIf.create(:url => 'http://www.google.com')
|
142
|
+
assert user.errors.empty?, user.errors.inspect
|
143
|
+
assert user.valid?, user.inspect
|
144
|
+
|
145
|
+
user = UserUrlIf.create(:url => 'http://www.a.com')
|
146
|
+
assert user.errors.empty?, user.errors.inspect
|
147
|
+
assert user.valid?, user.inspect
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_url_with_unless
|
151
|
+
user = UserUrlUnless.create(:url => 'http://www.google.com')
|
152
|
+
assert user.errors.empty?, user.errors.inspect
|
153
|
+
assert user.valid?, user.inspect
|
154
|
+
|
155
|
+
user = UserUrlUnless.create(:url => 'http://www.a.com')
|
156
|
+
assert user.errors.empty?, user.errors.inspect
|
157
|
+
assert user.valid?, user.inspect
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_without_email
|
161
|
+
user = UserEmail.create
|
162
|
+
assert_not_nil user.errors, user.errors.inspect
|
163
|
+
assert !user.valid?, user.inspect
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_without_email_on_update
|
167
|
+
user = UserEmailUpdate.create
|
168
|
+
assert user.errors.empty?, user.errors.inspect
|
169
|
+
assert user.valid?, user.errors.inspect
|
170
|
+
|
171
|
+
user.update_attribute(:url, 'http://www.google.com')
|
172
|
+
assert_not_nil user.errors, user.errors.inspect
|
173
|
+
assert !user.valid?, user.inspect
|
174
|
+
|
175
|
+
user = UserEmailUpdate.first
|
176
|
+
user.update_attribute(:email, 'test@example.com')
|
177
|
+
assert user.errors.empty?, user.errors.inspect
|
178
|
+
assert user.valid?, user.inspect
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_good_email
|
182
|
+
user = UserEmail.create :email => 'test@example.com'
|
183
|
+
assert user.errors.empty?, user.errors.inspect
|
184
|
+
assert user.valid?, user.inspect
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_bad_email
|
188
|
+
user = UserEmail.create :email => 'test AT example.com'
|
189
|
+
assert_not_nil user.errors, user.errors.inspect
|
190
|
+
assert !user.valid?, user.inspect
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_email_uniqueness
|
194
|
+
user = UserEmailUniq.create :email => 'test@example.com'
|
195
|
+
assert user.errors.empty?, user.errors.inspect
|
196
|
+
assert user.valid?, user.inspect
|
197
|
+
|
198
|
+
user2 = UserEmailUniq.create :email => 'test@example.com'
|
199
|
+
assert_not_nil user2.errors, user2.errors.inspect
|
200
|
+
assert !user2.valid?, user2.inspect
|
201
|
+
|
202
|
+
assert_equal(1, User.count)
|
203
|
+
|
204
|
+
2.times do
|
205
|
+
user = UserEmail.create :email => 'test@example.com'
|
206
|
+
assert user.errors.empty?, user.errors.inspect
|
207
|
+
assert user.valid?, user.inspect
|
208
|
+
end
|
209
|
+
|
210
|
+
assert_equal(3, User.count)
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_bad_email_with_custom_message
|
214
|
+
user = UserEmailCustom.create :email => 'test AT example.com'
|
215
|
+
assert_not_nil user.errors, user.errors.inspect
|
216
|
+
assert !user.valid?, user.inspect
|
217
|
+
assert_equal("must be valid!", user.errors['email'].to_s)
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_multiple_emails
|
221
|
+
user = UserMultipleEmail.create :email => 'test@example.com', :email2 => 'test2@example.com'
|
222
|
+
assert user.errors.empty?, user.errors.inspect
|
223
|
+
assert user.valid?, user.inspect
|
224
|
+
|
225
|
+
user = UserMultipleEmail.create :email => 'test AT example.com', :email2 => 'test3@example.com'
|
226
|
+
assert_not_nil user.errors, user.errors.inspect
|
227
|
+
assert !user.valid?, user.inspect
|
228
|
+
|
229
|
+
user = UserMultipleEmail.create :email2 => 'test4@example.com'
|
230
|
+
assert_not_nil user.errors, user.errors.inspect
|
231
|
+
assert !user.valid?, user.inspect
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_multiple_emails_with_allow_blank
|
235
|
+
user = UserMultipleEmailAllowBlank.create :email => 'test@example.com', :email2 => 'test2@example.com'
|
236
|
+
assert user.errors.empty?, user.errors.inspect
|
237
|
+
assert user.valid?, user.inspect
|
238
|
+
|
239
|
+
user = UserMultipleEmailAllowBlank.create :email => 'test AT example.com', :email2 => 'test3@example.com'
|
240
|
+
assert_not_nil user.errors, user.errors.inspect
|
241
|
+
assert !user.valid?, user.inspect
|
242
|
+
|
243
|
+
user = UserMultipleEmailAllowBlank.create :email2 => 'test4@example.com'
|
244
|
+
assert user.errors.empty?, user.errors.inspect
|
245
|
+
assert user.valid?, user.inspect
|
246
|
+
end
|
247
|
+
|
248
|
+
def test_without_email_with_allow_blank
|
249
|
+
user = UserEmailAllowBlank.create
|
250
|
+
assert user.errors.empty?, user.errors.inspect
|
251
|
+
assert user.valid?, user.inspect
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_without_email_with_allow_nil
|
255
|
+
user = UserEmailAllowNil.create
|
256
|
+
assert user.errors.empty?, user.errors.inspect
|
257
|
+
assert user.valid?, user.inspect
|
258
|
+
|
259
|
+
user = UserEmailAllowNil.create(:email => '')
|
260
|
+
assert_not_nil user.errors, user.errors.inspect
|
261
|
+
assert !user.valid?, user.inspect
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_good_email_with_allow_blank
|
265
|
+
user = UserEmailAllowBlank.create :email => 'test@example.com'
|
266
|
+
assert user.errors.empty?, user.errors.inspect
|
267
|
+
assert user.valid?, user.inspect
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_bad_email_with_allow_blank
|
271
|
+
user = UserEmailAllowBlank.create :email => 'test AT example.com'
|
272
|
+
assert_not_nil user.errors, user.errors.inspect
|
273
|
+
assert !user.valid?, user.inspect
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_email_with_if
|
277
|
+
user = UserEmailIf.create(:email => 'test@example.com')
|
278
|
+
assert user.errors.empty?, user.errors.inspect
|
279
|
+
assert user.valid?, user.inspect
|
280
|
+
|
281
|
+
user = UserEmailIf.create(:email => 'tc.com')
|
282
|
+
assert user.errors.empty?, user.errors.inspect
|
283
|
+
assert user.valid?, user.inspect
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_email_with_unless
|
287
|
+
user = UserEmailIf.create(:email => 'test@example.com')
|
288
|
+
assert user.errors.empty?, user.errors.inspect
|
289
|
+
assert user.valid?, user.inspect
|
290
|
+
|
291
|
+
user = UserEmailIf.create(:email => 'tc.com')
|
292
|
+
assert user.errors.empty?, user.errors.inspect
|
293
|
+
assert user.valid?, user.inspect
|
294
|
+
end
|
295
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ar-validations
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nicolas Cavigneaux
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-24 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activerecord
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: This ActiveRecord extension provides more validation schemes. There are some useful validation missing added by this plugin to fill the gap.
|
26
|
+
email: nico@bounga.org
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README
|
33
|
+
files:
|
34
|
+
- Rakefile
|
35
|
+
- init.rb
|
36
|
+
- README
|
37
|
+
- LICENSE
|
38
|
+
- lib/ar-validations.rb
|
39
|
+
- tasks/validations_tasks.rake
|
40
|
+
- test/test_helper.rb
|
41
|
+
- test/validations_test.rb
|
42
|
+
has_rdoc: true
|
43
|
+
homepage: http://www.bitbucket.org/Bounga/ar-validations
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
rubyforge_project: ar-validations
|
64
|
+
rubygems_version: 1.3.1
|
65
|
+
signing_key:
|
66
|
+
specification_version: 2
|
67
|
+
summary: An ActiveRecord extension provides more validation schemes
|
68
|
+
test_files:
|
69
|
+
- test/validations_test.rb
|