dm-validations 0.9.11 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/{History.txt → History.rdoc} +10 -3
- data/LICENSE +1 -0
- data/Manifest.txt +103 -33
- data/README.rdoc +172 -0
- data/Rakefile +4 -5
- data/lib/dm-validations.rb +73 -75
- data/lib/dm-validations/auto_validate.rb +98 -56
- data/lib/dm-validations/contextual_validators.rb +37 -14
- data/lib/dm-validations/exceptions.rb +3 -0
- data/lib/dm-validations/formats/url.rb +3 -1
- data/lib/dm-validations/support/context.rb +54 -0
- data/lib/dm-validations/validation_errors.rb +51 -27
- data/lib/dm-validations/{absent_field_validator.rb → validators/absent_field_validator.rb} +2 -8
- data/lib/dm-validations/{acceptance_validator.rb → validators/acceptance_validator.rb} +7 -7
- data/lib/dm-validations/{block_validator.rb → validators/block_validator.rb} +0 -0
- data/lib/dm-validations/{confirmation_validator.rb → validators/confirmation_validator.rb} +7 -7
- data/lib/dm-validations/{format_validator.rb → validators/format_validator.rb} +10 -16
- data/lib/dm-validations/{generic_validator.rb → validators/generic_validator.rb} +28 -6
- data/lib/dm-validations/validators/length_validator.rb +214 -0
- data/lib/dm-validations/validators/method_validator.rb +68 -0
- data/lib/dm-validations/validators/numeric_validator.rb +171 -0
- data/lib/dm-validations/{primitive_validator.rb → validators/primitive_validator.rb} +2 -7
- data/lib/dm-validations/{required_field_validator.rb → validators/required_field_validator.rb} +0 -6
- data/lib/dm-validations/{uniqueness_validator.rb → validators/uniqueness_validator.rb} +9 -20
- data/lib/dm-validations/{within_validator.rb → validators/within_validator.rb} +4 -4
- data/lib/dm-validations/version.rb +1 -1
- data/spec/fixtures/barcode.rb +32 -0
- data/spec/fixtures/basketball_court.rb +58 -0
- data/spec/fixtures/basketball_player.rb +37 -0
- data/spec/fixtures/beta_tester_account.rb +33 -0
- data/spec/fixtures/bill_of_landing.rb +42 -0
- data/spec/fixtures/boat_dock.rb +26 -0
- data/spec/fixtures/city.rb +25 -0
- data/spec/fixtures/company.rb +95 -0
- data/spec/fixtures/corporate_world.rb +47 -0
- data/spec/fixtures/country.rb +25 -0
- data/spec/fixtures/currency.rb +42 -0
- data/spec/fixtures/ethernet_frame.rb +56 -0
- data/spec/fixtures/event.rb +44 -0
- data/spec/fixtures/g3_concert.rb +57 -0
- data/spec/fixtures/jabberwock.rb +27 -0
- data/spec/fixtures/kayak.rb +28 -0
- data/spec/fixtures/lernean_hydra.rb +39 -0
- data/spec/fixtures/mathematical_function.rb +34 -0
- data/spec/fixtures/memory_object.rb +30 -0
- data/spec/fixtures/mittelschnauzer.rb +35 -0
- data/spec/fixtures/motor_launch.rb +21 -0
- data/spec/fixtures/page.rb +32 -0
- data/spec/fixtures/phone_number.rb +28 -0
- data/spec/fixtures/pirogue.rb +28 -0
- data/spec/fixtures/programming_language.rb +83 -0
- data/spec/fixtures/reservation.rb +38 -0
- data/spec/fixtures/scm_operation.rb +67 -0
- data/spec/fixtures/sms_message.rb +22 -0
- data/spec/fixtures/udp_packet.rb +49 -0
- data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +86 -0
- data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
- data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
- data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
- data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +47 -0
- data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +41 -0
- data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +104 -0
- data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +35 -0
- data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +33 -0
- data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +73 -0
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +121 -0
- data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +41 -0
- data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +20 -0
- data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +33 -0
- data/spec/integration/automatic_validation/spec_helper.rb +74 -0
- data/spec/integration/block_validator/block_validator_spec.rb +32 -0
- data/spec/integration/block_validator/spec_helper.rb +5 -0
- data/spec/integration/conditional_validation/if_condition_spec.rb +61 -0
- data/spec/integration/conditional_validation/spec_helper.rb +5 -0
- data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +74 -0
- data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
- data/spec/integration/datamapper_models/association_validation_spec.rb +23 -0
- data/spec/integration/datamapper_models/inheritance_spec.rb +78 -0
- data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +22 -0
- data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
- data/spec/integration/format_validator/email_format_validator_spec.rb +113 -0
- data/spec/integration/format_validator/format_validator_spec.rb +60 -0
- data/spec/integration/format_validator/regexp_validator_spec.rb +29 -0
- data/spec/integration/format_validator/spec_helper.rb +5 -0
- data/spec/integration/format_validator/url_format_validator_spec.rb +63 -0
- data/spec/integration/length_validator/default_value_spec.rb +12 -0
- data/spec/integration/length_validator/equality_spec.rb +79 -0
- data/spec/integration/length_validator/error_message_spec.rb +15 -18
- data/spec/integration/length_validator/maximum_spec.rb +40 -24
- data/spec/integration/length_validator/minimum_spec.rb +32 -21
- data/spec/integration/length_validator/range_spec.rb +50 -60
- data/spec/integration/length_validator/spec_helper.rb +7 -12
- data/spec/integration/method_validator/method_validator_spec.rb +239 -0
- data/spec/integration/method_validator/spec_helper.rb +5 -0
- data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +61 -0
- data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/float_type_spec.rb +42 -56
- data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/integer_only_true_spec.rb +3 -6
- data/spec/integration/numeric_validator/integer_type_spec.rb +8 -24
- data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +35 -0
- data/spec/integration/numeric_validator/spec_helper.rb +5 -77
- data/spec/integration/primitive_validator/primitive_validator_spec.rb +90 -0
- data/spec/integration/primitive_validator/spec_helper.rb +5 -0
- data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
- data/spec/integration/required_field_validator/association_spec.rb +5 -8
- data/spec/integration/required_field_validator/boolean_type_value_spec.rb +4 -7
- data/spec/integration/required_field_validator/date_type_value_spec.rb +3 -6
- data/spec/integration/required_field_validator/datetime_type_value_spec.rb +3 -6
- data/spec/integration/required_field_validator/float_type_value_spec.rb +3 -6
- data/spec/integration/required_field_validator/integer_type_value_spec.rb +2 -5
- data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +5 -8
- data/spec/integration/required_field_validator/shared_examples.rb +1 -1
- data/spec/integration/required_field_validator/spec_helper.rb +6 -67
- data/spec/integration/required_field_validator/string_type_value_spec.rb +2 -5
- data/spec/integration/required_field_validator/text_type_value_spec.rb +2 -5
- data/spec/integration/shared/default_validation_context.rb +13 -0
- data/spec/integration/shared/valid_and_invalid_model.rb +27 -0
- data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
- data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +114 -0
- data/spec/integration/within_validator/spec_helper.rb +5 -0
- data/spec/integration/within_validator/within_validator_spec.rb +164 -0
- data/spec/public/resource_spec.rb +68 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +12 -4
- data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
- data/spec/unit/contextual_validators/execution_spec.rb +55 -0
- data/spec/unit/contextual_validators/spec_helper.rb +37 -0
- data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
- data/spec/unit/validation_errors/adding_spec.rb +54 -0
- data/spec/unit/validation_errors/emptiness_spec.rb +38 -0
- data/spec/unit/validation_errors/enumerable_spec.rb +32 -0
- data/tasks/install.rb +1 -1
- data/tasks/spec.rb +4 -4
- metadata +118 -55
- data/README.txt +0 -72
- data/lib/dm-validations/custom_validator.rb +0 -72
- data/lib/dm-validations/length_validator.rb +0 -113
- data/lib/dm-validations/method_validator.rb +0 -68
- data/lib/dm-validations/numeric_validator.rb +0 -83
- data/spec/integration/absent_field_validator_spec.rb +0 -36
- data/spec/integration/acceptance_validator_spec.rb +0 -87
- data/spec/integration/auto_validate_spec.rb +0 -342
- data/spec/integration/block_validator_spec.rb +0 -30
- data/spec/integration/confirmation_validator_spec.rb +0 -105
- data/spec/integration/contextual_validators_spec.rb +0 -27
- data/spec/integration/custom_validator_spec.rb +0 -9
- data/spec/integration/format_validator_spec.rb +0 -193
- data/spec/integration/generic_validator_spec.rb +0 -17
- data/spec/integration/length_validator/valid_objects_spec.rb +0 -13
- data/spec/integration/method_validator_spec.rb +0 -58
- data/spec/integration/numeric_validator_spec.rb +0 -253
- data/spec/integration/primitive_validator_spec.rb +0 -30
- data/spec/integration/uniqueness_validator_spec.rb +0 -97
- data/spec/integration/validation_errors_spec.rb +0 -18
- data/spec/integration/validation_spec.rb +0 -404
- data/spec/integration/within_validator_spec.rb +0 -79
@@ -0,0 +1,171 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Validate
|
3
|
+
|
4
|
+
##
|
5
|
+
#
|
6
|
+
# @author Guy van den Berg
|
7
|
+
# @since 0.9
|
8
|
+
class NumericValidator < GenericValidator
|
9
|
+
|
10
|
+
def call(target)
|
11
|
+
value = target.send(field_name)
|
12
|
+
return true if allow_nil? && value.blank?
|
13
|
+
|
14
|
+
errors = []
|
15
|
+
|
16
|
+
validate_with(integer_only? ? :integer : :numeric, value, errors)
|
17
|
+
|
18
|
+
add_errors(target, errors)
|
19
|
+
|
20
|
+
# if the number is invalid, skip further tests
|
21
|
+
return false if errors.any?
|
22
|
+
|
23
|
+
[ :gt, :lt, :gte, :lte, :eq, :ne ].each do |validation_type|
|
24
|
+
validate_with(validation_type, value, errors)
|
25
|
+
end
|
26
|
+
|
27
|
+
add_errors(target, errors)
|
28
|
+
|
29
|
+
errors.empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def allow_nil?
|
35
|
+
options.fetch(:allow_nil, false)
|
36
|
+
end
|
37
|
+
|
38
|
+
def integer_only?
|
39
|
+
options.fetch(:integer_only, false)
|
40
|
+
end
|
41
|
+
|
42
|
+
def value_as_string(value)
|
43
|
+
case value
|
44
|
+
when Float then value.to_d.to_s('F') # Avoid Scientific Notation in Float to_s
|
45
|
+
when BigDecimal then value.to_s('F')
|
46
|
+
else value.to_s
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_errors(target, errors)
|
51
|
+
return if errors.empty?
|
52
|
+
|
53
|
+
if options.key?(:message)
|
54
|
+
add_error(target, options[:message], field_name)
|
55
|
+
else
|
56
|
+
errors.each do |error_message|
|
57
|
+
add_error(target, error_message, field_name)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def validate_with(validation_type, value, errors)
|
63
|
+
send("validate_#{validation_type}", value, errors)
|
64
|
+
end
|
65
|
+
|
66
|
+
def validate_with_comparison(value, cmp, expected, error_message_name, errors, negated = false)
|
67
|
+
return if expected.nil?
|
68
|
+
|
69
|
+
comparison = value.send(cmp, expected)
|
70
|
+
return if negated ? !comparison : comparison
|
71
|
+
|
72
|
+
errors << ValidationErrors.default_error_message(error_message_name, field_name, expected)
|
73
|
+
end
|
74
|
+
|
75
|
+
def validate_integer(value, errors)
|
76
|
+
validate_with_comparison(value_as_string(value), :=~, /\A[+-]?\d+\z/, :not_an_integer, errors)
|
77
|
+
end
|
78
|
+
|
79
|
+
def validate_numeric(value, errors)
|
80
|
+
precision = options[:precision]
|
81
|
+
scale = options[:scale]
|
82
|
+
|
83
|
+
regexp = if precision && scale
|
84
|
+
if precision > scale && scale == 0
|
85
|
+
/\A[+-]?(?:\d{1,#{precision}}(?:\.0)?)\z/
|
86
|
+
elsif precision > scale
|
87
|
+
/\A[+-]?(?:\d{1,#{precision - scale}}|\d{0,#{precision - scale}}\.\d{1,#{scale}})\z/
|
88
|
+
elsif precision == scale
|
89
|
+
/\A[+-]?(?:0(?:\.\d{1,#{scale}})?)\z/
|
90
|
+
else
|
91
|
+
raise ArgumentError, "Invalid precision #{precision.inspect} and scale #{scale.inspect} for #{field_name} (value: #{value.inspect} #{value.class})"
|
92
|
+
end
|
93
|
+
else
|
94
|
+
/\A[+-]?(?:\d+|\d*\.\d+)\z/
|
95
|
+
end
|
96
|
+
|
97
|
+
validate_with_comparison(value_as_string(value), :=~, regexp, :not_a_number, errors)
|
98
|
+
end
|
99
|
+
|
100
|
+
def validate_gt(value, errors)
|
101
|
+
validate_with_comparison(value, :>, options[:gt], :greater_than, errors)
|
102
|
+
end
|
103
|
+
|
104
|
+
def validate_lt(value, errors)
|
105
|
+
validate_with_comparison(value, :<, options[:lt], :less_than, errors)
|
106
|
+
end
|
107
|
+
|
108
|
+
def validate_gte(value, errors)
|
109
|
+
validate_with_comparison(value, :>=, options[:gte], :greater_than_or_equal_to, errors)
|
110
|
+
end
|
111
|
+
|
112
|
+
def validate_lte(value, errors)
|
113
|
+
validate_with_comparison(value, :<=, options[:lte], :less_than_or_equal_to, errors)
|
114
|
+
end
|
115
|
+
|
116
|
+
def validate_eq(value, errors)
|
117
|
+
eq = options[:eq] || options[:equal] || options[:equals] || options[:exactly]
|
118
|
+
validate_with_comparison(value, :==, eq, :equal_to, errors)
|
119
|
+
end
|
120
|
+
|
121
|
+
def validate_ne(value, errors)
|
122
|
+
validate_with_comparison(value, :==, options[:ne], :not_equal_to, errors, true)
|
123
|
+
end
|
124
|
+
end # class NumericValidator
|
125
|
+
|
126
|
+
module ValidatesIsNumber
|
127
|
+
|
128
|
+
# Validate whether a field is numeric
|
129
|
+
#
|
130
|
+
# @details
|
131
|
+
#
|
132
|
+
# Options are:
|
133
|
+
#
|
134
|
+
# :message => "Error message for %s"
|
135
|
+
# Custom error message, also can be a callable object that takes
|
136
|
+
# an object (for pure Ruby objects) or object and property (for DM resources)
|
137
|
+
#
|
138
|
+
# :precision => 2
|
139
|
+
# Required precision of a value
|
140
|
+
#
|
141
|
+
# :scale => 2
|
142
|
+
# Required scale of a value
|
143
|
+
#
|
144
|
+
# :gte => 5.75
|
145
|
+
# 'Greater than or greater' requirement
|
146
|
+
#
|
147
|
+
# :lte => 5.75
|
148
|
+
# 'Less than or greater' requirement
|
149
|
+
#
|
150
|
+
# :lt => 5.75
|
151
|
+
# 'Less than' requirement
|
152
|
+
#
|
153
|
+
# :gt => 5.75
|
154
|
+
# 'Greater than' requirement
|
155
|
+
#
|
156
|
+
# :eq => 5.75
|
157
|
+
# 'Equal' requirement
|
158
|
+
#
|
159
|
+
# :ne => 5.75
|
160
|
+
# 'Not equal' requirement
|
161
|
+
#
|
162
|
+
# :integer_only => true
|
163
|
+
# Use to restrict allowed values to integers
|
164
|
+
def validates_is_number(*fields)
|
165
|
+
opts = opts_from_validator_args(fields)
|
166
|
+
add_validator_to_context(opts, fields, DataMapper::Validate::NumericValidator)
|
167
|
+
end
|
168
|
+
|
169
|
+
end # module ValidatesIsNumber
|
170
|
+
end # module Validate
|
171
|
+
end # module DataMapper
|
@@ -6,15 +6,10 @@ module DataMapper
|
|
6
6
|
# @author Dirkjan Bussink
|
7
7
|
# @since 0.9
|
8
8
|
class PrimitiveValidator < GenericValidator
|
9
|
-
|
10
|
-
def initialize(field_name, options={})
|
11
|
-
super
|
12
|
-
@field_name, @options = field_name, options
|
13
|
-
end
|
14
|
-
|
15
9
|
def call(target)
|
16
|
-
value
|
10
|
+
value = target.validation_property_value(field_name)
|
17
11
|
property = target.validation_property(field_name)
|
12
|
+
|
18
13
|
return true if value.nil? || value.kind_of?(property.primitive) || property.primitive == TrueClass && value.kind_of?(FalseClass)
|
19
14
|
|
20
15
|
error_message = @options[:message] || default_error(property)
|
data/lib/dm-validations/{required_field_validator.rb → validators/required_field_validator.rb}
RENAMED
@@ -6,12 +6,6 @@ module DataMapper
|
|
6
6
|
# @author Guy van den Berg
|
7
7
|
# @since 0.9
|
8
8
|
class RequiredFieldValidator < GenericValidator
|
9
|
-
|
10
|
-
def initialize(field_name, options={})
|
11
|
-
super
|
12
|
-
@field_name, @options = field_name, options
|
13
|
-
end
|
14
|
-
|
15
9
|
def call(target)
|
16
10
|
value = target.validation_property_value(field_name)
|
17
11
|
property = target.validation_property(field_name)
|
@@ -11,42 +11,31 @@ module DataMapper
|
|
11
11
|
def initialize(field_name, options = {})
|
12
12
|
assert_kind_of 'scope', options[:scope], Array, Symbol if options.has_key?(:scope)
|
13
13
|
super
|
14
|
-
|
14
|
+
|
15
|
+
@options[:allow_nil] = true unless @options.include?(:allow_nil)
|
15
16
|
end
|
16
17
|
|
17
18
|
def call(target)
|
18
|
-
|
19
|
-
|
20
|
-
return true if @options[:allow_nil] && target.send(field_name).nil?
|
19
|
+
value = target.send(field_name)
|
21
20
|
|
22
|
-
|
21
|
+
return true if @options[:allow_nil] && value.blank?
|
23
22
|
|
24
23
|
opts = {
|
25
24
|
:fields => target.model.key,
|
26
|
-
field_name =>
|
25
|
+
field_name => value,
|
27
26
|
}
|
28
27
|
|
29
|
-
scope.each
|
30
|
-
if target.model.properties(repository_name).has_property?(item)
|
31
|
-
opts[item] = target.validation_property_value(item)
|
32
|
-
elsif target.model.relationships(repository_name).has_key?(item)
|
33
|
-
target.validation_association_keys(item).each do |key|
|
34
|
-
opts[key] = target.validation_property_value(key)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
28
|
+
Array(@options[:scope]).each { |subject| opts[subject] = target.send(subject) }
|
38
29
|
|
39
|
-
resource = repository(
|
30
|
+
resource = DataMapper.repository(target.repository.name) { target.model.first(opts) }
|
40
31
|
|
41
32
|
return true if resource.nil?
|
42
|
-
|
43
|
-
# is target and found resource identic? same instance... but not ==
|
44
|
-
return true if !target.new_record? && resource.repository.name == repository_name && resource.model == target.model && resource.key == target.key
|
33
|
+
return true if target.saved? && resource.key == target.key
|
45
34
|
|
46
35
|
error_message = @options[:message] || ValidationErrors.default_error_message(:taken, field_name)
|
47
36
|
add_error(target, error_message, field_name)
|
48
37
|
|
49
|
-
|
38
|
+
false
|
50
39
|
end
|
51
40
|
end # class UniquenessValidator
|
52
41
|
|
@@ -9,13 +9,13 @@ module DataMapper
|
|
9
9
|
|
10
10
|
def initialize(field_name, options={})
|
11
11
|
super
|
12
|
-
|
12
|
+
|
13
13
|
@options[:set] = [] unless @options.has_key?(:set)
|
14
14
|
end
|
15
15
|
|
16
16
|
def call(target)
|
17
17
|
value = target.send(field_name)
|
18
|
-
return true if @options[:allow_nil] && value.
|
18
|
+
return true if @options[:allow_nil] && value.blank?
|
19
19
|
return true if @options[:set].include?(value)
|
20
20
|
|
21
21
|
set = @options[:set]
|
@@ -29,7 +29,7 @@ module DataMapper
|
|
29
29
|
error_message = msg || ValidationErrors.default_error_message(:greater_than_or_equal_to, field_name, set.first)
|
30
30
|
end
|
31
31
|
else
|
32
|
-
error_message = ValidationErrors.default_error_message(:inclusion, field_name, set.join(', '))
|
32
|
+
error_message = msg || ValidationErrors.default_error_message(:inclusion, field_name, set.join(', '))
|
33
33
|
end
|
34
34
|
|
35
35
|
add_error(target, error_message, field_name)
|
@@ -43,7 +43,7 @@ module DataMapper
|
|
43
43
|
|
44
44
|
module ValidatesWithin
|
45
45
|
|
46
|
-
# Validate
|
46
|
+
# Validate that value of a field if within a range/set
|
47
47
|
#
|
48
48
|
def validates_within(*fields)
|
49
49
|
opts = opts_from_validator_args(fields)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Validate
|
3
|
+
module Fixtures
|
4
|
+
class Barcode
|
5
|
+
|
6
|
+
#
|
7
|
+
# Behaviors
|
8
|
+
#
|
9
|
+
|
10
|
+
include DataMapper::Resource
|
11
|
+
|
12
|
+
#
|
13
|
+
# Properties
|
14
|
+
#
|
15
|
+
|
16
|
+
without_auto_validations do
|
17
|
+
property :code, String, :key => true
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# Validations
|
22
|
+
#
|
23
|
+
|
24
|
+
validates_length :code, :max => 10
|
25
|
+
|
26
|
+
def self.valid_instance
|
27
|
+
new(:code => "3600029145")
|
28
|
+
end
|
29
|
+
end # Barcode
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
class BasketballCourt
|
7
|
+
#
|
8
|
+
# Behaviors
|
9
|
+
#
|
10
|
+
|
11
|
+
include DataMapper::Resource
|
12
|
+
|
13
|
+
#
|
14
|
+
# Properties
|
15
|
+
#
|
16
|
+
|
17
|
+
property :id, Serial
|
18
|
+
|
19
|
+
without_auto_validations do
|
20
|
+
property :name, String
|
21
|
+
|
22
|
+
property :length, Float
|
23
|
+
property :width, Float
|
24
|
+
|
25
|
+
property :three_point_line_distance, Float
|
26
|
+
property :free_throw_line_distance, Float
|
27
|
+
property :rim_height, Float
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
# Validations
|
32
|
+
#
|
33
|
+
|
34
|
+
# obviously these are all metrics
|
35
|
+
validates_is_number :length, :gte => 15.0, :lte => 15.24
|
36
|
+
validates_is_number :width, :gte => 25.28, :lte => 28.65
|
37
|
+
|
38
|
+
# 3 pt line distance may use :gte and :lte, but for
|
39
|
+
# sake of spec example we make it up a little
|
40
|
+
validates_is_number :three_point_line_distance, :gt => 6.7, :lt => 7.24
|
41
|
+
validates_is_number :free_throw_line_distance, :equals => 4.57
|
42
|
+
validates_is_number :rim_height, :eq => 3.05
|
43
|
+
|
44
|
+
def self.valid_instance(overrides = {})
|
45
|
+
defaults = {
|
46
|
+
:length => 15.24,
|
47
|
+
:width => 28.65,
|
48
|
+
:free_throw_line_distance => 4.57,
|
49
|
+
:rim_height => 3.05,
|
50
|
+
:three_point_line_distance => 6.9
|
51
|
+
}
|
52
|
+
|
53
|
+
new(defaults.merge(overrides))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end # Fixtures
|
57
|
+
end # Validate
|
58
|
+
end # DataMapper
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Validate
|
5
|
+
module Fixtures
|
6
|
+
class BasketballPlayer
|
7
|
+
#
|
8
|
+
# Behaviors
|
9
|
+
#
|
10
|
+
|
11
|
+
include DataMapper::Resource
|
12
|
+
|
13
|
+
#
|
14
|
+
# Properties
|
15
|
+
#
|
16
|
+
|
17
|
+
property :id, Serial
|
18
|
+
|
19
|
+
without_auto_validations do
|
20
|
+
property :name, String
|
21
|
+
property :height, Float
|
22
|
+
property :weight, Float
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# Validations
|
27
|
+
#
|
28
|
+
|
29
|
+
# precision and scale need to be defined for length to be validated
|
30
|
+
validates_is_number :height, :weight, :precision => 10
|
31
|
+
end
|
32
|
+
BasketballPlayer.auto_migrate!
|
33
|
+
|
34
|
+
|
35
|
+
end # Fixtures
|
36
|
+
end # Validate
|
37
|
+
end # DataMapper
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Validate
|
3
|
+
module Fixtures
|
4
|
+
class BetaTesterAccount
|
5
|
+
#
|
6
|
+
# Behaviors
|
7
|
+
#
|
8
|
+
|
9
|
+
include ::DataMapper::Resource
|
10
|
+
|
11
|
+
#
|
12
|
+
# Properties
|
13
|
+
#
|
14
|
+
|
15
|
+
property :id, Serial
|
16
|
+
property :full_name, String, :auto_validation => false
|
17
|
+
property :email, String, :auto_validation => false
|
18
|
+
|
19
|
+
property :user_agreement, Boolean, :auto_validation => false
|
20
|
+
property :newsletter_signup, String, :auto_validation => false
|
21
|
+
property :privacy_agreement, String, :auto_validation => false
|
22
|
+
|
23
|
+
#
|
24
|
+
# Validations
|
25
|
+
#
|
26
|
+
|
27
|
+
validates_is_accepted :user_agreement, :allow_nil => false
|
28
|
+
validates_is_accepted :newsletter_signup
|
29
|
+
validates_is_accepted :privacy_agreement, :accept => %w(agreed accept), :message => "You must accept this agreement in order to proceed"
|
30
|
+
end # BetaTesterAccount
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|