dm-validations 0.9.9 → 0.9.10
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/History.txt +15 -0
- data/Manifest.txt +21 -2
- data/lib/dm-validations.rb +14 -14
- data/lib/dm-validations/absent_field_validator.rb +3 -4
- data/lib/dm-validations/acceptance_validator.rb +6 -10
- data/lib/dm-validations/confirmation_validator.rb +5 -5
- data/lib/dm-validations/contextual_validators.rb +1 -1
- data/lib/dm-validations/custom_validator.rb +1 -1
- data/lib/dm-validations/format_validator.rb +6 -5
- data/lib/dm-validations/generic_validator.rb +7 -10
- data/lib/dm-validations/length_validator.rb +7 -7
- data/lib/dm-validations/method_validator.rb +2 -2
- data/lib/dm-validations/numeric_validator.rb +4 -4
- data/lib/dm-validations/primitive_validator.rb +4 -4
- data/lib/dm-validations/required_field_validator.rb +5 -5
- data/lib/dm-validations/uniqueness_validator.rb +2 -2
- data/lib/dm-validations/validation_errors.rb +34 -2
- data/lib/dm-validations/version.rb +1 -1
- data/lib/dm-validations/within_validator.rb +15 -13
- data/spec/integration/absent_field_validator_spec.rb +4 -2
- data/spec/integration/acceptance_validator_spec.rb +3 -3
- data/spec/integration/auto_validate_spec.rb +16 -9
- data/spec/integration/block_validator_spec.rb +2 -8
- data/spec/integration/confirmation_validator_spec.rb +11 -8
- data/spec/integration/contextual_validators_spec.rb +2 -1
- data/spec/integration/format_validator_spec.rb +1 -1
- data/spec/integration/length_validator/error_message_spec.rb +23 -0
- data/spec/integration/length_validator/maximum_spec.rb +31 -0
- data/spec/integration/length_validator/minimum_spec.rb +31 -0
- data/spec/integration/length_validator/range_spec.rb +95 -0
- data/spec/integration/length_validator/spec_helper.rb +12 -0
- data/spec/integration/length_validator/valid_objects_spec.rb +13 -0
- data/spec/integration/method_validator_spec.rb +3 -3
- data/spec/integration/numeric_validator/float_type_spec.rb +102 -0
- data/spec/integration/numeric_validator/integer_only_true_spec.rb +92 -0
- data/spec/integration/numeric_validator/integer_type_spec.rb +100 -0
- data/spec/integration/numeric_validator/spec_helper.rb +77 -0
- data/spec/integration/numeric_validator_spec.rb +19 -6
- data/spec/integration/primitive_validator_spec.rb +2 -1
- data/spec/integration/required_field_validator/association_spec.rb +98 -0
- data/spec/integration/required_field_validator/boolean_type_value_spec.rb +149 -0
- data/spec/integration/required_field_validator/date_type_value_spec.rb +126 -0
- data/spec/integration/required_field_validator/datetime_type_value_spec.rb +126 -0
- data/spec/integration/required_field_validator/float_type_value_spec.rb +130 -0
- data/spec/integration/required_field_validator/integer_type_value_spec.rb +98 -0
- data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +36 -0
- data/spec/integration/required_field_validator/shared_examples.rb +24 -0
- data/spec/integration/required_field_validator/spec_helper.rb +68 -0
- data/spec/integration/required_field_validator/string_type_value_spec.rb +164 -0
- data/spec/integration/required_field_validator/text_type_value_spec.rb +46 -0
- data/spec/integration/uniqueness_validator_spec.rb +10 -8
- data/spec/integration/validation_spec.rb +25 -25
- data/spec/integration/within_validator_spec.rb +36 -11
- data/tasks/spec.rb +1 -1
- metadata +24 -5
- data/spec/integration/length_validator_spec.rb +0 -115
- data/spec/integration/required_field_validator_spec.rb +0 -93
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
__dir__ = Pathname(__FILE__).dirname.expand_path
|
3
|
+
|
4
|
+
# global first, then local to length validators
|
5
|
+
require __dir__.parent.parent + "spec_helper"
|
6
|
+
require __dir__ + 'spec_helper'
|
7
|
+
|
8
|
+
describe DataMapper::Validate::LengthValidator do
|
9
|
+
it "lets user specify a minimum length of a string field" do
|
10
|
+
class ::MotorLaunch
|
11
|
+
validates_length :name, :min => 3
|
12
|
+
end
|
13
|
+
|
14
|
+
launch = MotorLaunch.new
|
15
|
+
launch.name = 'Ab'
|
16
|
+
launch.should_not be_valid
|
17
|
+
launch.errors.on(:name).should include('Name must be more than 3 characters long')
|
18
|
+
end
|
19
|
+
|
20
|
+
it "aliases :minimum for :min" do
|
21
|
+
class ::MotorLaunch
|
22
|
+
validators.clear!
|
23
|
+
validates_length :name, :minimum => 3
|
24
|
+
end
|
25
|
+
|
26
|
+
launch = MotorLaunch.new
|
27
|
+
launch.name = 'Ab'
|
28
|
+
launch.should_not be_valid
|
29
|
+
launch.errors.on(:name).should include('Name must be more than 3 characters long')
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
__dir__ = Pathname(__FILE__).dirname.expand_path
|
3
|
+
|
4
|
+
# global first, then local to length validators
|
5
|
+
require __dir__.parent.parent + "spec_helper"
|
6
|
+
require __dir__ + 'spec_helper'
|
7
|
+
|
8
|
+
class MotorLaunch
|
9
|
+
validators.clear!
|
10
|
+
validates_length :name, :in => (3..5)
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
describe MotorLaunch do
|
15
|
+
before :each do
|
16
|
+
@launch = MotorLaunch.new
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "with a value that is out of range bounds (too long)" do
|
20
|
+
before :each do
|
21
|
+
@launch.name = 'a'
|
22
|
+
@launch.valid?
|
23
|
+
end
|
24
|
+
|
25
|
+
it "is invalid" do
|
26
|
+
@launch.should_not be_valid
|
27
|
+
end
|
28
|
+
it "includes range bounds and field name in error message" do
|
29
|
+
@launch.errors.on(:name).should include('Name must be between 3 and 5 characters long')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
describe "with a value that is out of range bounds (too short)" do
|
35
|
+
before :each do
|
36
|
+
@launch.name = 'L'
|
37
|
+
@launch.valid?
|
38
|
+
end
|
39
|
+
|
40
|
+
it "is invalid" do
|
41
|
+
@launch.should_not be_valid
|
42
|
+
end
|
43
|
+
it "includes range bounds and field name in error message" do
|
44
|
+
@launch.errors.on(:name).should include('Name must be between 3 and 5 characters long')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# arguable but reasonable for 80% of cases
|
50
|
+
# to treat nil as a 0 lengh value
|
51
|
+
# reported in
|
52
|
+
# http://datamapper.lighthouseapp.com/projects/20609/tickets/646
|
53
|
+
describe "with a nil value" do
|
54
|
+
before :each do
|
55
|
+
@launch.name = nil
|
56
|
+
@launch.valid?
|
57
|
+
end
|
58
|
+
|
59
|
+
it "is invalid" do
|
60
|
+
@launch.should_not be_valid
|
61
|
+
end
|
62
|
+
it "includes range bounds and field name in error message" do
|
63
|
+
@launch.errors.on(:name).should include('Name must be between 3 and 5 characters long')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
describe "with a value that is within range bounds" do
|
70
|
+
before :each do
|
71
|
+
@launch.name = 'Lisp'
|
72
|
+
@launch.valid?
|
73
|
+
end
|
74
|
+
|
75
|
+
it "is valid" do
|
76
|
+
@launch.should be_valid
|
77
|
+
end
|
78
|
+
it "has blank error message" do
|
79
|
+
@launch.errors.on(:name).should be_blank
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
it "aliases :within for :in" do
|
86
|
+
class ::MotorLaunch
|
87
|
+
validators.clear!
|
88
|
+
validates_length :name, :within => (3..5)
|
89
|
+
end
|
90
|
+
|
91
|
+
launch = MotorLaunch.new
|
92
|
+
launch.name = 'Ride'
|
93
|
+
launch.valid?.should == true
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class MotorLaunch
|
2
|
+
include DataMapper::Resource
|
3
|
+
property :id, Integer, :serial => true
|
4
|
+
property :name, String, :auto_validation => false
|
5
|
+
end
|
6
|
+
|
7
|
+
class BoatDock
|
8
|
+
include DataMapper::Resource
|
9
|
+
property :id, Integer, :serial => true
|
10
|
+
property :name, String, :auto_validation => false, :default => "I'm a long string"
|
11
|
+
validates_length :name, :min => 3
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
__dir__ = Pathname(__FILE__).dirname.expand_path
|
3
|
+
|
4
|
+
# global first, then local to length validators
|
5
|
+
require __dir__.parent.parent + "spec_helper"
|
6
|
+
require __dir__ + 'spec_helper'
|
7
|
+
|
8
|
+
describe DataMapper::Validate::LengthValidator do
|
9
|
+
it "passes if a default fulfills the requirements" do
|
10
|
+
doc = BoatDock.new
|
11
|
+
doc.should be_valid
|
12
|
+
end
|
13
|
+
end
|
@@ -3,7 +3,7 @@ require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
|
3
3
|
|
4
4
|
describe DataMapper::Validate::MethodValidator do
|
5
5
|
before(:all) do
|
6
|
-
class Ship
|
6
|
+
class ::Ship
|
7
7
|
include DataMapper::Resource
|
8
8
|
property :id, Integer, :key => true
|
9
9
|
property :name, String
|
@@ -41,13 +41,13 @@ describe DataMapper::Validate::MethodValidator do
|
|
41
41
|
Ship.new.valid_for_testing_success?.should == true
|
42
42
|
ship = Ship.new
|
43
43
|
ship.valid_for_testing_failure?.should == false
|
44
|
-
ship.errors.
|
44
|
+
ship.errors.on(:fail_validation).should include('Validation failed')
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should run multiple validation methods" do
|
48
48
|
ship = Ship.new
|
49
49
|
ship.valid_for_multiple_validations?.should == false
|
50
|
-
ship.errors.
|
50
|
+
ship.errors.on(:second_validation).should include('Second Validation was false')
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should validate via a method and add error to field" do
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
__dir__ = Pathname(__FILE__).dirname.expand_path
|
3
|
+
|
4
|
+
require __dir__.parent.parent + 'spec_helper'
|
5
|
+
require __dir__ + 'spec_helper'
|
6
|
+
|
7
|
+
describe BasketballPlayer do
|
8
|
+
before(:each) do
|
9
|
+
@mj = BasketballPlayer.new(:name => "Michael Jordan", :height => 198.1, :weight => 97.2)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "with height as float" do
|
13
|
+
before(:each) do
|
14
|
+
# no op in this case
|
15
|
+
end
|
16
|
+
|
17
|
+
it "is valid" do
|
18
|
+
@mj.should be_valid
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe "with height as integer" do
|
24
|
+
before(:each) do
|
25
|
+
@mj.height = 198
|
26
|
+
end
|
27
|
+
|
28
|
+
it "is valid" do
|
29
|
+
@mj.should be_valid
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
describe "with height as string containing only integers" do
|
35
|
+
before(:each) do
|
36
|
+
@mj.height = "198"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "is valid" do
|
40
|
+
@mj.should be_valid
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe "with height as string containing a float" do
|
46
|
+
before(:each) do
|
47
|
+
@mj.height = "198.1"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "is valid" do
|
51
|
+
@mj.should be_valid
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
describe "with height as string containing random alphanumeric characters" do
|
57
|
+
before(:each) do
|
58
|
+
@mj.height = "height=198.1"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "is set to 0.0" do
|
62
|
+
@mj.height.should == 0.0
|
63
|
+
end
|
64
|
+
|
65
|
+
it "IS valid" do
|
66
|
+
# float property is set to 0.0 here
|
67
|
+
@mj.should be_valid
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
describe "with height as string containing random punctuation characters" do
|
73
|
+
before(:each) do
|
74
|
+
@mj.height = "$$ * $?"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "is set to 0.0" do
|
78
|
+
@mj.height.should == 0.0
|
79
|
+
end
|
80
|
+
|
81
|
+
it "IS valid" do
|
82
|
+
# float property is set to 0.0 here
|
83
|
+
@mj.should be_valid
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
describe "with nil height" do
|
89
|
+
before(:each) do
|
90
|
+
@mj.height = nil
|
91
|
+
end
|
92
|
+
|
93
|
+
it "is NOT valid" do
|
94
|
+
@mj.should_not be_valid
|
95
|
+
end
|
96
|
+
|
97
|
+
it "has a meaningful error message on for the property" do
|
98
|
+
@mj.valid?
|
99
|
+
@mj.errors.on(:height).should include("Height must be a number")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
__dir__ = Pathname(__FILE__).dirname.expand_path
|
3
|
+
|
4
|
+
require __dir__.parent.parent + 'spec_helper'
|
5
|
+
require __dir__ + 'spec_helper'
|
6
|
+
|
7
|
+
describe Country do
|
8
|
+
before(:each) do
|
9
|
+
@country = Country.new(:name => "Italy", :area => "301318")
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "with area as integer" do
|
13
|
+
before(:each) do
|
14
|
+
# no op in this case
|
15
|
+
end
|
16
|
+
|
17
|
+
it "is valid" do
|
18
|
+
@country.should be_valid
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe "with area as integer" do
|
24
|
+
before(:each) do
|
25
|
+
@country.area = 1603
|
26
|
+
end
|
27
|
+
|
28
|
+
it "is valid" do
|
29
|
+
@country.should be_valid
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
describe "with area as string containing only integers" do
|
35
|
+
before(:each) do
|
36
|
+
@country.area = "301318"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "is valid" do
|
40
|
+
@country.should be_valid
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe "with area as string containing a float" do
|
46
|
+
before(:each) do
|
47
|
+
@country.area = "301318.6"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "IS valid" do
|
51
|
+
@country.should be_valid
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
describe "with area as string containing random alphanumeric characters" do
|
57
|
+
before(:each) do
|
58
|
+
@country.area = "area=51"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "IS NOT valid" do
|
62
|
+
@country.should_not be_valid
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
describe "with area as string containing random punctuation characters" do
|
68
|
+
before(:each) do
|
69
|
+
@country.area = "$$ * $?"
|
70
|
+
end
|
71
|
+
|
72
|
+
it "IS NOT valid" do
|
73
|
+
@country.should_not be_valid
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
describe "with unknown area" do
|
79
|
+
before(:each) do
|
80
|
+
@country.area = nil
|
81
|
+
end
|
82
|
+
|
83
|
+
it "is NOT valid" do
|
84
|
+
@country.should_not be_valid
|
85
|
+
end
|
86
|
+
|
87
|
+
it "has a meaningful error message on for the property" do
|
88
|
+
@country.valid?
|
89
|
+
@country.errors.on(:area).should include("Please use integers to specify area")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
__dir__ = Pathname(__FILE__).dirname.expand_path
|
3
|
+
|
4
|
+
require __dir__.parent.parent + 'spec_helper'
|
5
|
+
require __dir__ + 'spec_helper'
|
6
|
+
|
7
|
+
describe City do
|
8
|
+
before(:each) do
|
9
|
+
@city = City.new(:name => "Tokyo", :founded_in => 1603)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "with foundation year as integer" do
|
13
|
+
before(:each) do
|
14
|
+
# no op in this case
|
15
|
+
end
|
16
|
+
|
17
|
+
it "is valid" do
|
18
|
+
@city.should be_valid
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe "with foundation year as integer" do
|
24
|
+
before(:each) do
|
25
|
+
@city.founded_in = 1603
|
26
|
+
end
|
27
|
+
|
28
|
+
it "is valid" do
|
29
|
+
@city.should be_valid
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
describe "with foundation year as string containing only integers" do
|
35
|
+
before(:each) do
|
36
|
+
@city.founded_in = "1603"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "is valid" do
|
40
|
+
@city.should be_valid
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe "with foundation year as string containing a float" do
|
46
|
+
before(:each) do
|
47
|
+
@city.founded_in = "1603.6"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "is valid" do
|
51
|
+
@city.should be_valid
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
describe "with foundation year as string containing random alphanumeric characters" do
|
57
|
+
before(:each) do
|
58
|
+
@city.founded_in = "founded-in=1603"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "is set to nil" do
|
62
|
+
@city.founded_in.should be(nil)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "IS NOT valid" do
|
66
|
+
@city.should_not be_valid
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
describe "with foundation year as string containing random punctuation characters" do
|
72
|
+
before(:each) do
|
73
|
+
@city.founded_in = "$$ * $?"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "is set to nil" do
|
77
|
+
@city.founded_in.should be(nil)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "IS NOT valid" do
|
81
|
+
@city.should_not be_valid
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
describe "with unknown foundation date" do
|
87
|
+
before(:each) do
|
88
|
+
@city.founded_in = nil
|
89
|
+
end
|
90
|
+
|
91
|
+
it "is NOT valid" do
|
92
|
+
@city.should_not be_valid
|
93
|
+
end
|
94
|
+
|
95
|
+
it "has a meaningful error message on for the property" do
|
96
|
+
@city.valid?
|
97
|
+
@city.errors.on(:founded_in).should include("Foundation year must be an integer")
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|