dm-validations 0.9.5 → 0.9.6
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/Manifest.txt +2 -0
- data/Rakefile +1 -1
- data/lib/dm-validations.rb +1 -1
- data/lib/dm-validations/format_validator.rb +3 -0
- data/lib/dm-validations/formats/url.rb +20 -0
- data/lib/dm-validations/generic_validator.rb +1 -0
- data/lib/dm-validations/primitive_validator.rb +1 -1
- data/lib/dm-validations/required_field_validator.rb +2 -2
- data/lib/dm-validations/version.rb +1 -1
- data/lib/dm-validations/within_validator.rb +5 -5
- data/spec/integration/format_validator_spec.rb +35 -1
- data/spec/integration/generic_validator_spec.rb +12 -4
- data/spec/integration/primitive_validator_spec.rb +0 -2
- data/spec/integration/validation_spec.rb +12 -0
- data/spec/integration/within_validator_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- metadata +4 -3
data/Manifest.txt
CHANGED
@@ -25,6 +25,8 @@ lib/dm-validations/uniqueness_validator.rb
|
|
25
25
|
lib/dm-validations/validation_errors.rb
|
26
26
|
lib/dm-validations/version.rb
|
27
27
|
lib/dm-validations/within_validator.rb
|
28
|
+
lib/dm-validations/formats/url.rb
|
29
|
+
lib/dm-validations/formats/email.rb
|
28
30
|
spec/integration/absent_field_validator_spec.rb
|
29
31
|
spec/integration/acceptance_validator_spec.rb
|
30
32
|
spec/integration/auto_validate_spec.rb
|
data/Rakefile
CHANGED
@@ -53,7 +53,7 @@ end
|
|
53
53
|
desc 'Run specifications'
|
54
54
|
Spec::Rake::SpecTask.new(:spec) do |t|
|
55
55
|
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
56
|
-
t.spec_files = Pathname.glob(
|
56
|
+
t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
|
57
57
|
|
58
58
|
begin
|
59
59
|
t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
|
data/lib/dm-validations.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'pathname'
|
4
4
|
require Pathname(__FILE__).dirname.expand_path + 'formats/email'
|
5
|
+
require Pathname(__FILE__).dirname.expand_path + 'formats/url'
|
5
6
|
|
6
7
|
module DataMapper
|
7
8
|
module Validate
|
@@ -14,6 +15,7 @@ module DataMapper
|
|
14
15
|
|
15
16
|
FORMATS = {}
|
16
17
|
include DataMapper::Validate::Format::Email
|
18
|
+
include DataMapper::Validate::Format::Url
|
17
19
|
|
18
20
|
def initialize(field_name, options = {}, &b)
|
19
21
|
super(field_name, options)
|
@@ -66,6 +68,7 @@ module DataMapper
|
|
66
68
|
#
|
67
69
|
# @details [Pre-defined Formats]
|
68
70
|
# :email_address (format is specified in DataMapper::Validate::Format::Email)
|
71
|
+
# :url (format is specified in DataMapper::Validate::Format::Url)
|
69
72
|
#
|
70
73
|
# @example [Usage]
|
71
74
|
# require 'dm-validations'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Validate
|
3
|
+
module Format
|
4
|
+
module Url
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
DataMapper::Validate::FormatValidator::FORMATS.merge!(
|
8
|
+
:url => [ Url, lambda { |field, value| '%s is not a valid URL'.t(value) }]
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
Url = begin
|
13
|
+
# Regex from http://www.igvita.com/2006/09/07/validating-url-in-ruby-on-rails/
|
14
|
+
/(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix
|
15
|
+
end
|
16
|
+
|
17
|
+
end # module Url
|
18
|
+
end # module Format
|
19
|
+
end # module Validate
|
20
|
+
end # module DataMapper
|
@@ -89,6 +89,7 @@ module DataMapper
|
|
89
89
|
def ==(other)
|
90
90
|
self.class == other.class &&
|
91
91
|
self.field_name == other.field_name &&
|
92
|
+
self.class == other.class &&
|
92
93
|
self.if_clause == other.if_clause &&
|
93
94
|
self.unless_clause == other.unless_clause &&
|
94
95
|
self.instance_variable_get(:@options) == other.instance_variable_get(:@options)
|
@@ -26,7 +26,7 @@ module DataMapper
|
|
26
26
|
protected
|
27
27
|
|
28
28
|
def default_error(property)
|
29
|
-
"%s must be of type
|
29
|
+
"%s must be of type %s".t(Extlib::Inflection.humanize(@field_name), property.primitive)
|
30
30
|
end
|
31
31
|
|
32
32
|
end # class PrimitiveValidator
|
@@ -33,8 +33,8 @@ module DataMapper
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def default_error(property)
|
36
|
-
actual = boolean_type?(property) ? "nil" : "blank"
|
37
|
-
"%s must not be
|
36
|
+
actual = boolean_type?(property) ? "nil".t : "blank".t
|
37
|
+
"%s must not be %s".t(Extlib::Inflection.humanize(@field_name), actual)
|
38
38
|
end
|
39
39
|
|
40
40
|
# Is +property+ a boolean property?
|
@@ -17,19 +17,19 @@ module DataMapper
|
|
17
17
|
includes = @options[:set].include?(target.send(field_name))
|
18
18
|
return true if includes
|
19
19
|
|
20
|
+
field_name = Extlib::Inflection.humanize(@field_name)
|
20
21
|
if @options[:set].is_a?(Range)
|
21
22
|
if @options[:set].first != -n && @options[:set].last != n
|
22
|
-
|
23
|
+
error_message = @options[:message] || "%s must be between %s and %s".t(field_name, @options[:set].first, @options[:set].last)
|
23
24
|
elsif @options[:set].first == -n
|
24
|
-
|
25
|
+
error_message = @options[:message] || "%s must be less than %s".t(field_name, @options[:set].last)
|
25
26
|
elsif @options[:set].last == n
|
26
|
-
|
27
|
+
error_message = @options[:message] || "%s must be greater than %s".t(field_name, @options[:set].first)
|
27
28
|
end
|
28
29
|
else
|
29
|
-
|
30
|
+
error_message = "%s must be one of [%s]".t(field_name, @options[:set].join(', '))
|
30
31
|
end
|
31
32
|
|
32
|
-
error_message = @options[:message] || message.t(Extlib::Inflection.humanize(@field_name))
|
33
33
|
add_error(target, error_message , @field_name)
|
34
34
|
return false
|
35
35
|
end
|
@@ -10,6 +10,7 @@ describe DataMapper::Validate::FormatValidator do
|
|
10
10
|
property :doc_no, String, :auto_validation => false
|
11
11
|
property :email, String, :auto_validation => false
|
12
12
|
property :username, String, :auto_validation => false
|
13
|
+
property :url, String, :auto_validation => false
|
13
14
|
|
14
15
|
# this is a trivial example
|
15
16
|
validates_format :doc_no, :with => lambda { |code|
|
@@ -17,13 +18,14 @@ describe DataMapper::Validate::FormatValidator do
|
|
17
18
|
}
|
18
19
|
|
19
20
|
validates_format :email, :as => :email_address
|
21
|
+
validates_format :url, :as => :url
|
20
22
|
|
21
23
|
validates_format :username, :with => /[a-z]/, :message => 'Username must have at least one letter', :allow_nil => true
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
27
|
def valid_attributes
|
26
|
-
{ :id => 1, :doc_no => 'A1234', :email => 'user@example.com' }
|
28
|
+
{ :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
|
27
29
|
end
|
28
30
|
|
29
31
|
it 'should validate the format of a value on an instance of a resource' do
|
@@ -81,6 +83,38 @@ describe DataMapper::Validate::FormatValidator do
|
|
81
83
|
|
82
84
|
end
|
83
85
|
|
86
|
+
it 'should have a pre-defined URL format' do
|
87
|
+
bad = [ 'http:// example.com',
|
88
|
+
'ftp://example.com',
|
89
|
+
'http://.com',
|
90
|
+
'http://',
|
91
|
+
'test',
|
92
|
+
'...'
|
93
|
+
]
|
94
|
+
|
95
|
+
good = [
|
96
|
+
'http://example.com',
|
97
|
+
'http://www.example.com',
|
98
|
+
]
|
99
|
+
|
100
|
+
bol = BillOfLading.new(valid_attributes.except(:url))
|
101
|
+
bol.should_not be_valid
|
102
|
+
bol.errors.on(:url).should include('Url has an invalid format')
|
103
|
+
|
104
|
+
bad.map do |e|
|
105
|
+
bol.url = e
|
106
|
+
bol.valid?
|
107
|
+
bol.errors.on(:url).should include('Url has an invalid format')
|
108
|
+
end
|
109
|
+
|
110
|
+
good.map do |e|
|
111
|
+
bol.url = e
|
112
|
+
bol.valid?
|
113
|
+
bol.errors.on(:url).should be_nil
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
84
118
|
describe 'with a regexp' do
|
85
119
|
before do
|
86
120
|
@bol = BillOfLading.new(valid_attributes)
|
@@ -1,9 +1,17 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
module DataMapper
|
5
|
+
module Validate
|
6
|
+
describe DataMapper::Validate::GenericValidator do
|
7
|
+
describe "#==" do
|
8
|
+
it "should return true if types and fields are equal" do
|
9
|
+
RequiredFieldValidator.new(:name).should == RequiredFieldValidator.new(:name)
|
10
|
+
end
|
11
|
+
it "should return false of types differ" do
|
12
|
+
RequiredFieldValidator.new(:name).should_not == UniquenessValidator.new(:name)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
8
16
|
end
|
9
17
|
end
|
@@ -12,6 +12,18 @@ describe DataMapper::Validate do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
describe '#validations' do
|
16
|
+
it 'should support more different validations of a different type' do
|
17
|
+
number_of_validators_before = Yacht.validators.contexts[:default].length
|
18
|
+
class Yacht
|
19
|
+
validates_is_unique :name
|
20
|
+
end
|
21
|
+
number_of_validators_after = Yacht.validators.contexts[:default].length
|
22
|
+
(number_of_validators_after - number_of_validators_before).should == 1
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
15
27
|
it 'should respond to save' do
|
16
28
|
Yacht.new.should respond_to(:save)
|
17
29
|
end
|
@@ -21,7 +21,7 @@ describe DataMapper::Validate::WithinValidator do
|
|
21
21
|
validates_within :between, :set => (10..20)
|
22
22
|
end
|
23
23
|
|
24
|
-
class
|
24
|
+
class Receiver
|
25
25
|
include DataMapper::Resource
|
26
26
|
property :id, Integer, :serial => true
|
27
27
|
property :holder, String, :auto_validation => false, :default => 'foo'
|
@@ -48,7 +48,7 @@ describe DataMapper::Validate::WithinValidator do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should validate a value by its default" do
|
51
|
-
tel =
|
51
|
+
tel = Receiver.new
|
52
52
|
tel.should be_valid
|
53
53
|
end
|
54
54
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,7 +9,7 @@ def load_driver(name, default_uri)
|
|
9
9
|
lib = "do_#{name}"
|
10
10
|
|
11
11
|
begin
|
12
|
-
gem lib, '
|
12
|
+
gem lib, '>=0.9.5'
|
13
13
|
require lib
|
14
14
|
DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
|
15
15
|
DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guy van den Berg
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-12 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.9.
|
23
|
+
version: 0.9.6
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hoe
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/dm-validations/validation_errors.rb
|
72
72
|
- lib/dm-validations/version.rb
|
73
73
|
- lib/dm-validations/within_validator.rb
|
74
|
+
- lib/dm-validations/formats/url.rb
|
74
75
|
- spec/integration/absent_field_validator_spec.rb
|
75
76
|
- spec/integration/acceptance_validator_spec.rb
|
76
77
|
- spec/integration/auto_validate_spec.rb
|