dm-validations 0.10.2 → 1.0.0.rc1
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/.gitignore +36 -0
- data/Gemfile +143 -0
- data/README.rdoc +52 -102
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/dm-validations.gemspec +126 -14
- data/lib/dm-validations.rb +78 -18
- data/lib/dm-validations/auto_validate.rb +27 -23
- data/lib/dm-validations/contextual_validators.rb +3 -3
- data/lib/dm-validations/formats/email.rb +3 -3
- data/lib/dm-validations/formats/url.rb +3 -3
- data/lib/dm-validations/support/context.rb +1 -1
- data/lib/dm-validations/validation_errors.rb +5 -7
- data/lib/dm-validations/validators/absent_field_validator.rb +13 -9
- data/lib/dm-validations/validators/acceptance_validator.rb +10 -7
- data/lib/dm-validations/validators/block_validator.rb +3 -3
- data/lib/dm-validations/validators/confirmation_validator.rb +10 -7
- data/lib/dm-validations/validators/format_validator.rb +14 -10
- data/lib/dm-validations/validators/generic_validator.rb +3 -3
- data/lib/dm-validations/validators/length_validator.rb +10 -7
- data/lib/dm-validations/validators/method_validator.rb +3 -3
- data/lib/dm-validations/validators/numeric_validator.rb +25 -14
- data/lib/dm-validations/validators/primitive_validator.rb +12 -8
- data/lib/dm-validations/validators/required_field_validator.rb +12 -9
- data/lib/dm-validations/validators/uniqueness_validator.rb +9 -6
- data/lib/dm-validations/validators/within_validator.rb +3 -3
- data/spec/fixtures/barcode.rb +10 -2
- data/spec/fixtures/basketball_court.rb +7 -7
- data/spec/fixtures/basketball_player.rb +3 -3
- data/spec/fixtures/beta_tester_account.rb +4 -4
- data/spec/fixtures/bill_of_landing.rb +7 -7
- data/spec/fixtures/boat_dock.rb +2 -2
- data/spec/fixtures/city.rb +1 -1
- data/spec/fixtures/company.rb +7 -7
- data/spec/fixtures/corporate_world.rb +24 -26
- data/spec/fixtures/country.rb +1 -1
- data/spec/fixtures/currency.rb +4 -4
- data/spec/fixtures/ethernet_frame.rb +5 -5
- data/spec/fixtures/event.rb +2 -2
- data/spec/fixtures/g3_concert.rb +3 -3
- data/spec/fixtures/jabberwock.rb +2 -2
- data/spec/fixtures/kayak.rb +2 -2
- data/spec/fixtures/lernean_hydra.rb +3 -3
- data/spec/fixtures/mathematical_function.rb +2 -2
- data/spec/fixtures/memory_object.rb +3 -3
- data/spec/fixtures/mittelschnauzer.rb +3 -3
- data/spec/fixtures/motor_launch.rb +1 -1
- data/spec/fixtures/page.rb +3 -3
- data/spec/fixtures/phone_number.rb +2 -2
- data/spec/fixtures/pirogue.rb +2 -2
- data/spec/fixtures/programming_language.rb +3 -3
- data/spec/fixtures/reservation.rb +5 -5
- data/spec/fixtures/scm_operation.rb +42 -45
- data/spec/fixtures/sms_message.rb +1 -1
- data/spec/fixtures/udp_packet.rb +3 -3
- data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +6 -6
- data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +3 -3
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +5 -5
- data/spec/integration/automatic_validation/spec_helper.rb +1 -1
- data/spec/integration/block_validator/block_validator_spec.rb +2 -2
- data/spec/integration/conditional_validation/if_condition_spec.rb +3 -3
- data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +3 -3
- data/spec/integration/datamapper_models/association_validation_spec.rb +5 -5
- data/spec/integration/datamapper_models/inheritance_spec.rb +6 -6
- data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +3 -3
- data/spec/integration/format_validator/email_format_validator_spec.rb +6 -6
- data/spec/integration/format_validator/format_validator_spec.rb +8 -8
- data/spec/integration/format_validator/regexp_validator_spec.rb +4 -4
- data/spec/integration/format_validator/url_format_validator_spec.rb +4 -4
- data/spec/integration/length_validator/default_value_spec.rb +3 -3
- data/spec/integration/length_validator/equality_spec.rb +4 -4
- data/spec/integration/length_validator/error_message_spec.rb +3 -3
- data/spec/integration/length_validator/maximum_spec.rb +3 -3
- data/spec/integration/length_validator/minimum_spec.rb +3 -3
- data/spec/integration/length_validator/range_spec.rb +3 -3
- data/spec/integration/method_validator/method_validator_spec.rb +8 -8
- data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +7 -7
- data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +5 -5
- data/spec/integration/numeric_validator/float_type_spec.rb +3 -3
- data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +3 -3
- data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +3 -3
- data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +3 -3
- data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +3 -3
- data/spec/integration/primitive_validator/primitive_validator_spec.rb +4 -4
- data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +4 -4
- data/spec/integration/required_field_validator/association_spec.rb +19 -51
- data/spec/integration/required_field_validator/boolean_type_value_spec.rb +4 -1
- data/spec/integration/required_field_validator/date_type_value_spec.rb +4 -2
- data/spec/integration/required_field_validator/datetime_type_value_spec.rb +4 -2
- data/spec/integration/required_field_validator/float_type_value_spec.rb +4 -2
- data/spec/integration/required_field_validator/integer_type_value_spec.rb +4 -2
- data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +6 -4
- data/spec/integration/required_field_validator/string_type_value_spec.rb +3 -1
- data/spec/integration/required_field_validator/text_type_value_spec.rb +3 -1
- data/spec/integration/shared/valid_and_invalid_model.rb +8 -0
- data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +29 -25
- data/spec/integration/within_validator/within_validator_spec.rb +6 -6
- data/spec/public/resource_spec.rb +47 -9
- data/spec/spec_helper.rb +13 -27
- data/spec/unit/contextual_validators/emptiness_spec.rb +4 -4
- data/spec/unit/contextual_validators/execution_spec.rb +6 -6
- data/spec/unit/contextual_validators/spec_helper.rb +3 -3
- data/spec/unit/generic_validator/equality_operator_spec.rb +7 -7
- data/spec/unit/validation_errors/adding_spec.rb +2 -2
- data/spec/unit/validation_errors/emptiness_spec.rb +2 -2
- data/spec/unit/validation_errors/enumerable_spec.rb +2 -2
- data/tasks/local_gemfile.rake +18 -0
- data/tasks/spec.rake +0 -3
- metadata +157 -25
@@ -1,5 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
|
-
module
|
2
|
+
module Validations
|
3
3
|
|
4
4
|
##
|
5
5
|
#
|
@@ -48,9 +48,9 @@ module DataMapper
|
|
48
48
|
#
|
49
49
|
def validates_within(*fields)
|
50
50
|
opts = opts_from_validator_args(fields)
|
51
|
-
add_validator_to_context(opts, fields, DataMapper::
|
51
|
+
add_validator_to_context(opts, fields, DataMapper::Validations::WithinValidator)
|
52
52
|
end
|
53
53
|
|
54
54
|
end # module ValidatesWithin
|
55
|
-
end # module
|
55
|
+
end # module Validations
|
56
56
|
end # module DataMapper
|
data/spec/fixtures/barcode.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module DataMapper
|
2
|
-
module
|
2
|
+
module Validations
|
3
3
|
module Fixtures
|
4
4
|
class Barcode
|
5
|
+
attr_accessor :valid_hook_call_count
|
5
6
|
|
6
7
|
#
|
7
8
|
# Behaviors
|
@@ -21,11 +22,18 @@ module DataMapper
|
|
21
22
|
# Validations
|
22
23
|
#
|
23
24
|
|
24
|
-
|
25
|
+
validates_length_of :code, :max => 10
|
25
26
|
|
26
27
|
def self.valid_instance
|
27
28
|
new(:code => "3600029145")
|
28
29
|
end
|
30
|
+
|
31
|
+
# measure the number of times #valid? is executed
|
32
|
+
before :valid? do
|
33
|
+
@valid_hook_call_count ||= 0
|
34
|
+
@valid_hook_call_count += 1
|
35
|
+
end
|
36
|
+
|
29
37
|
end # Barcode
|
30
38
|
end
|
31
39
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
class BasketballCourt
|
7
7
|
#
|
@@ -32,14 +32,14 @@ module DataMapper
|
|
32
32
|
#
|
33
33
|
|
34
34
|
# obviously these are all metrics
|
35
|
-
|
36
|
-
|
35
|
+
validates_numericality_of :length, :gte => 15.0, :lte => 15.24
|
36
|
+
validates_numericality_of :width, :gte => 25.28, :lte => 28.65
|
37
37
|
|
38
38
|
# 3 pt line distance may use :gte and :lte, but for
|
39
39
|
# sake of spec example we make it up a little
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
validates_numericality_of :three_point_line_distance, :gt => 6.7, :lt => 7.24
|
41
|
+
validates_numericality_of :free_throw_line_distance, :equals => 4.57
|
42
|
+
validates_numericality_of :rim_height, :eq => 3.05
|
43
43
|
|
44
44
|
def self.valid_instance(overrides = {})
|
45
45
|
defaults = {
|
@@ -54,5 +54,5 @@ module DataMapper
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end # Fixtures
|
57
|
-
end #
|
57
|
+
end # Validations
|
58
58
|
end # DataMapper
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
class BasketballPlayer
|
7
7
|
#
|
@@ -27,8 +27,8 @@ module DataMapper
|
|
27
27
|
#
|
28
28
|
|
29
29
|
# precision and scale need to be defined for length to be validated
|
30
|
-
|
30
|
+
validates_numericality_of :height, :weight, :precision => 10
|
31
31
|
end
|
32
32
|
end # Fixtures
|
33
|
-
end #
|
33
|
+
end # Validations
|
34
34
|
end # DataMapper
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
|
-
module
|
2
|
+
module Validations
|
3
3
|
module Fixtures
|
4
4
|
class BetaTesterAccount
|
5
5
|
#
|
@@ -24,9 +24,9 @@ module DataMapper
|
|
24
24
|
# Validations
|
25
25
|
#
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
validates_acceptance_of :user_agreement, :allow_nil => false
|
28
|
+
validates_acceptance_of :newsletter_signup
|
29
|
+
validates_acceptance_of :privacy_agreement, :accept => %w(agreed accept), :message => "You must accept this agreement in order to proceed"
|
30
30
|
end # BetaTesterAccount
|
31
31
|
end
|
32
32
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
class BillOfLading
|
7
7
|
#
|
@@ -27,16 +27,16 @@ module DataMapper
|
|
27
27
|
#
|
28
28
|
|
29
29
|
# this is a trivial example
|
30
|
-
|
30
|
+
validates_format_of :doc_no, :with => lambda { |code|
|
31
31
|
code =~ /\AA\d{4}\z/ || code =~ /\A[B-Z]\d{6}X12\z/
|
32
32
|
}
|
33
33
|
|
34
|
-
|
35
|
-
|
34
|
+
validates_format_of :email, :as => :email_address
|
35
|
+
validates_format_of :url, :as => :url, :allow_nil => false, :allow_blank => false
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
validates_format_of :username, :with => /[a-z]/, :message => 'Username must have at least one letter', :allow_nil => true
|
38
|
+
validates_format_of :code, :with => /\d{5,6}/, :message => 'Code format is invalid'
|
39
39
|
end
|
40
40
|
end # Fixtures
|
41
|
-
end #
|
41
|
+
end # Validations
|
42
42
|
end # DataMapper
|
data/spec/fixtures/boat_dock.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
|
-
module
|
2
|
+
module Validations
|
3
3
|
module Fixtures
|
4
4
|
class BoatDock
|
5
5
|
#
|
@@ -19,7 +19,7 @@ module DataMapper
|
|
19
19
|
# Validations
|
20
20
|
#
|
21
21
|
|
22
|
-
|
22
|
+
validates_length_of :name, :min => 3
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/spec/fixtures/city.rb
CHANGED
data/spec/fixtures/company.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
class Company
|
7
7
|
#
|
@@ -23,7 +23,7 @@ module DataMapper
|
|
23
23
|
# Validations
|
24
24
|
#
|
25
25
|
|
26
|
-
|
26
|
+
validates_presence_of :title, :message => "Company name is a required field"
|
27
27
|
|
28
28
|
end
|
29
29
|
|
@@ -41,7 +41,7 @@ module DataMapper
|
|
41
41
|
# Validations
|
42
42
|
#
|
43
43
|
|
44
|
-
|
44
|
+
validates_presence_of :area_of_expertise
|
45
45
|
end
|
46
46
|
|
47
47
|
class ProductCompany < Company
|
@@ -58,8 +58,8 @@ module DataMapper
|
|
58
58
|
# Validations
|
59
59
|
#
|
60
60
|
|
61
|
-
|
62
|
-
|
61
|
+
validates_presence_of :title, :message => "Product company must have a name"
|
62
|
+
validates_presence_of :flagship_product
|
63
63
|
end
|
64
64
|
|
65
65
|
class Product
|
@@ -80,13 +80,13 @@ module DataMapper
|
|
80
80
|
# Associations
|
81
81
|
#
|
82
82
|
|
83
|
-
belongs_to :company, :model => DataMapper::
|
83
|
+
belongs_to :company, :model => DataMapper::Validations::Fixtures::ProductCompany
|
84
84
|
|
85
85
|
#
|
86
86
|
# Validations
|
87
87
|
#
|
88
88
|
|
89
|
-
|
89
|
+
validates_presence_of :company
|
90
90
|
end
|
91
91
|
end
|
92
92
|
end
|
@@ -1,40 +1,38 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
|
4
|
-
module
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
include DataMapper::Resource
|
3
|
+
module DataMapper
|
4
|
+
module Validations
|
5
|
+
module Fixtures
|
6
|
+
class Organisation
|
7
|
+
include DataMapper::Resource
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
property :id, Serial
|
10
|
+
property :name, String
|
11
|
+
property :domain, String, :unique_index => true
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
validates_uniqueness_of :domain, :allow_nil => true
|
14
|
+
end
|
16
15
|
|
17
|
-
|
18
|
-
|
16
|
+
class Department
|
17
|
+
include DataMapper::Resource
|
19
18
|
|
20
|
-
|
21
|
-
|
19
|
+
property :id, Serial
|
20
|
+
property :name, String, :unique_index => true
|
22
21
|
|
23
|
-
|
24
|
-
|
22
|
+
validates_uniqueness_of :name
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
|
25
|
+
class User
|
26
|
+
include DataMapper::Resource
|
28
27
|
|
29
|
-
|
30
|
-
|
28
|
+
property :id, Serial
|
29
|
+
property :user_name, String
|
31
30
|
|
32
|
-
|
33
|
-
|
31
|
+
belongs_to :organisation
|
32
|
+
belongs_to :department
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
end
|
34
|
+
validates_uniqueness_of :user_name, :when => :signing_up_for_department_account, :scope => [:department]
|
35
|
+
validates_uniqueness_of :user_name, :when => :signing_up_for_organization_account, :scope => [:organisation]
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
data/spec/fixtures/country.rb
CHANGED
data/spec/fixtures/currency.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
|
-
module
|
2
|
+
module Validations
|
3
3
|
module Fixtures
|
4
4
|
class Currency
|
5
5
|
|
@@ -23,9 +23,9 @@ module DataMapper
|
|
23
23
|
# Validations
|
24
24
|
#
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
validates_length_of :name, :within => 1..50
|
27
|
+
validates_length_of :code, :is => 3
|
28
|
+
validates_length_of :symbol, :is => 1
|
29
29
|
|
30
30
|
def self.valid_instance(overrides = {})
|
31
31
|
defaults = {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
|
-
module
|
2
|
+
module Validations
|
3
3
|
module Fixtures
|
4
4
|
|
5
5
|
# for pedants: we refer to DIX Ethernet here
|
@@ -32,11 +32,11 @@ module DataMapper
|
|
32
32
|
# Validations
|
33
33
|
#
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
validates_length_of :destination_mac, :source_mac, :equals => 6
|
36
|
+
validates_length_of :ether_type, :equals => 2
|
37
|
+
validates_length_of :payload, :min => 46, :max => 1500, :unless => :link_support_fragmentation
|
38
38
|
# :is is alias for :equal
|
39
|
-
|
39
|
+
validates_length_of :crc, :is => 4
|
40
40
|
|
41
41
|
def self.valid_instance
|
42
42
|
# these are obvisouly not bits, and not in hexadecimal
|
data/spec/fixtures/event.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
|
7
7
|
class Event
|
@@ -40,5 +40,5 @@ module DataMapper
|
|
40
40
|
end
|
41
41
|
end # Event
|
42
42
|
end # Fixtures
|
43
|
-
end #
|
43
|
+
end # Validations
|
44
44
|
end # DataMapper
|
data/spec/fixtures/g3_concert.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
class G3Concert
|
7
7
|
#
|
8
8
|
# Bahaviors
|
9
9
|
#
|
10
10
|
|
11
|
-
include ::DataMapper::
|
11
|
+
include ::DataMapper::Validations
|
12
12
|
|
13
13
|
#
|
14
14
|
# Attributes
|
@@ -53,5 +53,5 @@ module DataMapper
|
|
53
53
|
end
|
54
54
|
end # G3Concert
|
55
55
|
end # Fixtures
|
56
|
-
end #
|
56
|
+
end # Validations
|
57
57
|
end # DataMapper
|
data/spec/fixtures/jabberwock.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module DataMapper
|
2
|
-
module
|
2
|
+
module Validations
|
3
3
|
module Fixtures
|
4
4
|
|
5
5
|
class Jabberwock
|
@@ -20,7 +20,7 @@ module DataMapper
|
|
20
20
|
# Validations
|
21
21
|
#
|
22
22
|
|
23
|
-
|
23
|
+
validates_length_of :snickersnack, :within => 3..40, :message => "worble warble"
|
24
24
|
end # Jabberwock
|
25
25
|
end
|
26
26
|
end
|
data/spec/fixtures/kayak.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
class Kayak
|
7
7
|
#
|
@@ -21,7 +21,7 @@ module DataMapper
|
|
21
21
|
# Validations
|
22
22
|
#
|
23
23
|
|
24
|
-
|
24
|
+
validates_absence_of :salesman, :on => :sale
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
module DataMapper
|
4
|
-
module
|
4
|
+
module Validations
|
5
5
|
module Fixtures
|
6
6
|
class LerneanHydra
|
7
7
|
#
|
@@ -24,7 +24,7 @@ module DataMapper
|
|
24
24
|
# Validations
|
25
25
|
#
|
26
26
|
|
27
|
-
|
27
|
+
validates_numericality_of :head_count, :eq => 9, :message => "Lernean hydra is said to have exactly 9 heads"
|
28
28
|
|
29
29
|
def self.valid_instance(overrides = {})
|
30
30
|
defaults = {
|
@@ -35,5 +35,5 @@ module DataMapper
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end # Fixtures
|
38
|
-
end #
|
38
|
+
end # Validations
|
39
39
|
end # DataMapper
|