sbf-dm-validations 1.3.0.beta
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.
- checksums.yaml +7 -0
- data/.gitignore +38 -0
- data/.rspec +1 -0
- data/.rubocop.yml +468 -0
- data/.travis.yml +51 -0
- data/Gemfile +60 -0
- data/LICENSE +21 -0
- data/README.rdoc +122 -0
- data/Rakefile +4 -0
- data/dm-validations.gemspec +20 -0
- data/lib/data_mapper/core.rb +1 -0
- data/lib/data_mapper/support/assertions.rb +1 -0
- data/lib/data_mapper/support/equalizer.rb +1 -0
- data/lib/data_mapper/support/ordered_set.rb +2 -0
- data/lib/data_mapper/validation/backward.rb +205 -0
- data/lib/data_mapper/validation/context.rb +57 -0
- data/lib/data_mapper/validation/contextual_rule_set.rb +210 -0
- data/lib/data_mapper/validation/exceptions.rb +7 -0
- data/lib/data_mapper/validation/inferred.rb +264 -0
- data/lib/data_mapper/validation/macros.rb +449 -0
- data/lib/data_mapper/validation/message_transformer.rb +111 -0
- data/lib/data_mapper/validation/model_extensions.rb +17 -0
- data/lib/data_mapper/validation/resource_extensions.rb +131 -0
- data/lib/data_mapper/validation/rule/absence.rb +31 -0
- data/lib/data_mapper/validation/rule/acceptance.rb +49 -0
- data/lib/data_mapper/validation/rule/block.rb +37 -0
- data/lib/data_mapper/validation/rule/confirmation.rb +47 -0
- data/lib/data_mapper/validation/rule/format/proc.rb +34 -0
- data/lib/data_mapper/validation/rule/format/regexp.rb +51 -0
- data/lib/data_mapper/validation/rule/format.rb +86 -0
- data/lib/data_mapper/validation/rule/formats/email.rb +54 -0
- data/lib/data_mapper/validation/rule/formats/url.rb +13 -0
- data/lib/data_mapper/validation/rule/length/equal.rb +48 -0
- data/lib/data_mapper/validation/rule/length/maximum.rb +50 -0
- data/lib/data_mapper/validation/rule/length/minimum.rb +50 -0
- data/lib/data_mapper/validation/rule/length/range.rb +50 -0
- data/lib/data_mapper/validation/rule/length.rb +96 -0
- data/lib/data_mapper/validation/rule/method.rb +42 -0
- data/lib/data_mapper/validation/rule/numericalness/equal.rb +34 -0
- data/lib/data_mapper/validation/rule/numericalness/greater_than.rb +34 -0
- data/lib/data_mapper/validation/rule/numericalness/greater_than_or_equal.rb +34 -0
- data/lib/data_mapper/validation/rule/numericalness/integer.rb +41 -0
- data/lib/data_mapper/validation/rule/numericalness/less_than.rb +34 -0
- data/lib/data_mapper/validation/rule/numericalness/less_than_or_equal.rb +34 -0
- data/lib/data_mapper/validation/rule/numericalness/not_equal.rb +34 -0
- data/lib/data_mapper/validation/rule/numericalness/numeric.rb +68 -0
- data/lib/data_mapper/validation/rule/numericalness.rb +91 -0
- data/lib/data_mapper/validation/rule/presence.rb +52 -0
- data/lib/data_mapper/validation/rule/primitive_type.rb +32 -0
- data/lib/data_mapper/validation/rule/uniqueness.rb +64 -0
- data/lib/data_mapper/validation/rule/within/range/bounded.rb +29 -0
- data/lib/data_mapper/validation/rule/within/range/unbounded_begin.rb +29 -0
- data/lib/data_mapper/validation/rule/within/range/unbounded_end.rb +29 -0
- data/lib/data_mapper/validation/rule/within/range.rb +55 -0
- data/lib/data_mapper/validation/rule/within/set.rb +45 -0
- data/lib/data_mapper/validation/rule/within.rb +32 -0
- data/lib/data_mapper/validation/rule.rb +232 -0
- data/lib/data_mapper/validation/rule_set.rb +157 -0
- data/lib/data_mapper/validation/support/object.rb +19 -0
- data/lib/data_mapper/validation/support/ordered_hash.rb +434 -0
- data/lib/data_mapper/validation/version.rb +5 -0
- data/lib/data_mapper/validation/violation.rb +136 -0
- data/lib/data_mapper/validation/violation_set.rb +115 -0
- data/lib/data_mapper/validation.rb +105 -0
- data/lib/dm-validations.rb +24 -0
- data/spec/data_mapper/validation/resource_extensions/save_spec.rb +56 -0
- data/spec/data_mapper/validation/resource_extensions/validate_spec.rb +103 -0
- data/spec/fixtures/barcode.rb +40 -0
- data/spec/fixtures/basketball_court.rb +58 -0
- data/spec/fixtures/basketball_player.rb +34 -0
- data/spec/fixtures/beta_tester_account.rb +33 -0
- data/spec/fixtures/bill_of_landing.rb +47 -0
- data/spec/fixtures/boat_dock.rb +26 -0
- data/spec/fixtures/city.rb +24 -0
- data/spec/fixtures/company.rb +93 -0
- data/spec/fixtures/corporate_world.rb +39 -0
- data/spec/fixtures/country.rb +24 -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/integer_dumped_as_string_property.rb +24 -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/llama_spaceship.rb +15 -0
- data/spec/fixtures/mathematical_function.rb +34 -0
- data/spec/fixtures/memory_object.rb +35 -0
- data/spec/fixtures/mittelschnauzer.rb +39 -0
- data/spec/fixtures/motor_launch.rb +21 -0
- data/spec/fixtures/multibyte.rb +16 -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 +56 -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 +90 -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 +57 -0
- data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
- data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
- data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
- data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
- data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
- data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
- data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
- data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +48 -0
- data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +35 -0
- data/spec/integration/automatic_validation/spec_helper.rb +57 -0
- data/spec/integration/block_validator/spec_helper.rb +5 -0
- data/spec/integration/conditional_validation/if_condition_spec.rb +63 -0
- data/spec/integration/conditional_validation/spec_helper.rb +5 -0
- data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
- data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
- data/spec/integration/datamapper_models/association_validation_spec.rb +29 -0
- data/spec/integration/datamapper_models/inheritance_spec.rb +82 -0
- data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
- data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
- data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
- data/spec/integration/format_validator/email_format_validator_spec.rb +139 -0
- data/spec/integration/format_validator/format_validator_spec.rb +64 -0
- data/spec/integration/format_validator/regexp_validator_spec.rb +33 -0
- data/spec/integration/format_validator/spec_helper.rb +5 -0
- data/spec/integration/format_validator/url_format_validator_spec.rb +91 -0
- data/spec/integration/length_validator/default_value_spec.rb +14 -0
- data/spec/integration/length_validator/equality_spec.rb +83 -0
- data/spec/integration/length_validator/error_message_spec.rb +22 -0
- data/spec/integration/length_validator/maximum_spec.rb +47 -0
- data/spec/integration/length_validator/minimum_spec.rb +54 -0
- data/spec/integration/length_validator/range_spec.rb +87 -0
- data/spec/integration/length_validator/spec_helper.rb +7 -0
- data/spec/integration/method_validator/method_validator_spec.rb +243 -0
- data/spec/integration/method_validator/spec_helper.rb +5 -0
- data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
- data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
- data/spec/integration/numeric_validator/float_type_spec.rb +90 -0
- data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +36 -0
- data/spec/integration/numeric_validator/integer_only_true_spec.rb +91 -0
- data/spec/integration/numeric_validator/integer_type_spec.rb +86 -0
- data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/spec_helper.rb +5 -0
- data/spec/integration/primitive_validator/primitive_validator_spec.rb +112 -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 +69 -0
- data/spec/integration/required_field_validator/boolean_type_value_spec.rb +164 -0
- data/spec/integration/required_field_validator/date_type_value_spec.rb +127 -0
- data/spec/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
- data/spec/integration/required_field_validator/float_type_value_spec.rb +131 -0
- data/spec/integration/required_field_validator/integer_type_value_spec.rb +99 -0
- data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
- data/spec/integration/required_field_validator/shared_examples.rb +27 -0
- data/spec/integration/required_field_validator/spec_helper.rb +7 -0
- data/spec/integration/required_field_validator/string_type_value_spec.rb +167 -0
- data/spec/integration/required_field_validator/text_type_value_spec.rb +49 -0
- data/spec/integration/shared/default_validation_context.rb +13 -0
- data/spec/integration/shared/valid_and_invalid_model.rb +35 -0
- data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
- data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
- data/spec/integration/within_validator/spec_helper.rb +5 -0
- data/spec/integration/within_validator/within_validator_spec.rb +168 -0
- data/spec/public/resource_spec.rb +113 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
- data/spec/unit/contextual_validators/execution_spec.rb +48 -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/generic_validator/optional_spec.rb +54 -0
- data/spec/unit/validators/within_validator_spec.rb +23 -0
- data/spec/unit/violation_set/adding_spec.rb +54 -0
- data/spec/unit/violation_set/emptiness_spec.rb +38 -0
- data/spec/unit/violation_set/enumerable_spec.rb +32 -0
- data/spec/unit/violation_set/reading_spec.rb +35 -0
- data/spec/unit/violation_set/respond_to_spec.rb +15 -0
- data/tasks/spec.rake +21 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +245 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BasketballPlayer' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BasketballPlayer.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BasketballPlayer.new(:name => "Michael Jordan", :height => 198.1, :weight => 97.2)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "with height as float" do
|
|
12
|
+
before :all do
|
|
13
|
+
# no op in this case
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it_behaves_like 'valid model'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "with height as integer" do
|
|
20
|
+
before :all do
|
|
21
|
+
@model.height = 198
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it_behaves_like 'valid model'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "with height as string containing only integers" do
|
|
28
|
+
before :all do
|
|
29
|
+
@model.height = "198"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it_behaves_like 'valid model'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "with height as string containing a float" do
|
|
36
|
+
before :all do
|
|
37
|
+
@model.height = "198.1"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it_behaves_like 'valid model'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "with height as string containing a float that will be represented in scientific notation" do
|
|
44
|
+
before :all do
|
|
45
|
+
@model.height = '0.00004'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it_behaves_like 'valid model'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "with height as string containing random alphanumeric characters" do
|
|
52
|
+
before :all do
|
|
53
|
+
@height = 'height=198.1'
|
|
54
|
+
@model.height = "height=198.1"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "it does not change the value" do
|
|
58
|
+
expect(@model.height).to eq @height
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it_behaves_like 'invalid model'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe "with height as string containing random punctuation characters" do
|
|
65
|
+
before :all do
|
|
66
|
+
@height = '$$ * $?'
|
|
67
|
+
@model.height = @height
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "it does not change the value" do
|
|
71
|
+
expect(@model.height).to eq @height
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it_behaves_like 'invalid model'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "with nil height" do
|
|
78
|
+
before :all do
|
|
79
|
+
@model.height = nil
|
|
80
|
+
@model.valid?
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# typecasting kicks in
|
|
84
|
+
it_behaves_like 'invalid model'
|
|
85
|
+
|
|
86
|
+
it "has a meaningful error message" do
|
|
87
|
+
expect(@model.errors.on(:height)).to eq [ 'Height must be a number' ]
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
|
|
9
|
+
@model.valid?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_behaves_like 'valid model'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
describe "with three point line distance of 7.2" do
|
|
16
|
+
before :all do
|
|
17
|
+
@model.three_point_line_distance = 7.2
|
|
18
|
+
@model.valid?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_behaves_like 'valid model'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
describe "with three point line distance of 3.5" do
|
|
26
|
+
before :all do
|
|
27
|
+
@model.three_point_line_distance = 3.5
|
|
28
|
+
@model.valid?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it_behaves_like 'invalid model'
|
|
32
|
+
|
|
33
|
+
it "has a meaningful error message" do
|
|
34
|
+
expect(@model.errors.on(:three_point_line_distance)).to eq [ 'Three point line distance must be greater than 6.7' ]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
|
|
9
|
+
@model.valid?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_behaves_like 'valid model'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
describe "with length of 15.0" do
|
|
16
|
+
before :all do
|
|
17
|
+
@model.length = 15.0
|
|
18
|
+
@model.valid?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_behaves_like 'valid model'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe 'with length of 14.0' do
|
|
25
|
+
before :all do
|
|
26
|
+
@model.length = 14.0
|
|
27
|
+
@model.valid?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it_behaves_like 'invalid model'
|
|
31
|
+
|
|
32
|
+
it "has a meaningful error message" do
|
|
33
|
+
expect(@model.errors.on(:length)).to eq [ 'Length must be greater than or equal to 15.0' ]
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'Country' do
|
|
5
|
+
before do
|
|
6
|
+
Country.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@country = Country.new(:name => "Italy", :area => "301318")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "with area as integer" do
|
|
12
|
+
before do
|
|
13
|
+
# no op in this case
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "is valid" do
|
|
17
|
+
expect(@country).to be_valid
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
describe "with area as integer" do
|
|
23
|
+
before do
|
|
24
|
+
@country.area = 1603
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "is valid" do
|
|
28
|
+
expect(@country).to be_valid
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
describe "with area as string containing only integers" do
|
|
34
|
+
before do
|
|
35
|
+
@country.area = "301318"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "is valid" do
|
|
39
|
+
expect(@country).to be_valid
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
describe "with area as string containing a float" do
|
|
45
|
+
before do
|
|
46
|
+
@country.area = "301318.6"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "IS valid" do
|
|
50
|
+
expect(@country).to be_valid
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
describe "with area as string containing random alphanumeric characters" do
|
|
56
|
+
before do
|
|
57
|
+
@country.area = "area=51"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "IS NOT valid" do
|
|
61
|
+
expect(@country).not_to be_valid
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
describe "with area as string containing random punctuation characters" do
|
|
67
|
+
before do
|
|
68
|
+
@country.area = "$$ * $?"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "IS NOT valid" do
|
|
72
|
+
expect(@country).not_to be_valid
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
describe "with unknown area" do
|
|
78
|
+
before do
|
|
79
|
+
@country.area = nil
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "is NOT valid" do
|
|
83
|
+
expect(@country).not_to be_valid
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "has a meaningful error message on for the property" do
|
|
87
|
+
@country.valid?
|
|
88
|
+
expect(@country.errors.on(:area)).to eq [ 'Please use integers to specify area' ]
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'City' do
|
|
5
|
+
before do
|
|
6
|
+
City.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@city = City.new(:name => "Tokyo", :founded_in => 1603)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "with foundation year as integer" do
|
|
12
|
+
before do
|
|
13
|
+
# no op in this case
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "is valid" do
|
|
17
|
+
expect(@city).to be_valid
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
describe "with foundation year as integer" do
|
|
23
|
+
before do
|
|
24
|
+
@city.founded_in = 1603
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "is valid" do
|
|
28
|
+
expect(@city).to be_valid
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
describe "with foundation year as string containing only integers" do
|
|
34
|
+
before do
|
|
35
|
+
@city.founded_in = "1603"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "is valid" do
|
|
39
|
+
expect(@city).to be_valid
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
describe "with foundation year as string containing a float" do
|
|
45
|
+
before do
|
|
46
|
+
@city.founded_in = "1603.6"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "is valid" do
|
|
50
|
+
expect(@city).to be_valid
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
describe "with foundation year as string that is not an integer or float" do
|
|
56
|
+
before do
|
|
57
|
+
@string = "founded-in=1603"
|
|
58
|
+
|
|
59
|
+
@city.founded_in = @string
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "is not altered" do
|
|
63
|
+
expect(@city.founded_in).to be(@string)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "IS NOT valid" do
|
|
67
|
+
expect(@city).not_to be_valid
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
describe "with unknown foundation date" do
|
|
73
|
+
before do
|
|
74
|
+
@city.founded_in = nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "is NOT valid" do
|
|
78
|
+
expect(@city).not_to be_valid
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "has a meaningful error message on for the property" do
|
|
82
|
+
@city.valid?
|
|
83
|
+
expect(@city.errors.on(:founded_in)).to eq [ 'Foundation year must be an integer' ]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
|
|
9
|
+
@model.valid?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_behaves_like 'valid model'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
describe "with three point line distance of 6.8" do
|
|
16
|
+
before :all do
|
|
17
|
+
@model.three_point_line_distance = 6.8
|
|
18
|
+
@model.valid?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_behaves_like 'valid model'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
describe "with three point line distance of 10.0" do
|
|
26
|
+
before :all do
|
|
27
|
+
@model.three_point_line_distance = 10.0
|
|
28
|
+
@model.valid?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it_behaves_like 'invalid model'
|
|
32
|
+
|
|
33
|
+
it "has a meaningful error message" do
|
|
34
|
+
expect(@model.errors.on(:three_point_line_distance)).to eq [ 'Three point line distance must be less than 7.24' ]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
|
|
9
|
+
@model.valid?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_behaves_like 'valid model'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
describe "with length of 15.24" do
|
|
16
|
+
before :all do
|
|
17
|
+
@model.length = 15.24
|
|
18
|
+
@model.valid?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_behaves_like 'valid model'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
describe "with length of 20.0" do
|
|
26
|
+
before :all do
|
|
27
|
+
@model.length = 20.0
|
|
28
|
+
@model.valid?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it_behaves_like 'invalid model'
|
|
32
|
+
|
|
33
|
+
it "has a meaningful error message" do
|
|
34
|
+
expect(@model.errors.on(:length)).to eq [ 'Length must be less than or equal to 15.24' ]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::MemoryObject' do
|
|
5
|
+
include DataMapper::Validations::Fixtures
|
|
6
|
+
|
|
7
|
+
before :all do
|
|
8
|
+
DataMapper::Validations::Fixtures::MemoryObject.auto_migrate!
|
|
9
|
+
|
|
10
|
+
@model = DataMapper::Validations::Fixtures::MemoryObject.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "with color given as a string" do
|
|
14
|
+
before :all do
|
|
15
|
+
@model.color = "grey"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "is valid" do
|
|
19
|
+
expect(@model).to be_valid
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
describe "with color given as an object" do
|
|
25
|
+
before :all do
|
|
26
|
+
# we have to go through the back door
|
|
27
|
+
# since writer= method does typecasting
|
|
28
|
+
# and Object is casted to String
|
|
29
|
+
@model.instance_variable_set(:@color, Object.new)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "is NOT valid" do
|
|
33
|
+
expect(@model).not_to be_valid
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "with stupid integer given as Integer" do
|
|
38
|
+
before :all do
|
|
39
|
+
@model.stupid_integer = 100
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "is valid" do
|
|
43
|
+
expect(@model).to be_valid
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "with stupid integer given as Object" do
|
|
48
|
+
before :all do
|
|
49
|
+
@model.stupid_integer = Object.new
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "is NOT valid" do
|
|
53
|
+
expect(@model).not_to be_valid
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
describe "with mark flag set to true" do
|
|
59
|
+
before :all do
|
|
60
|
+
@model.marked = true
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "is valid" do
|
|
64
|
+
expect(@model).to be_valid
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
describe "with mark flag set to false" do
|
|
70
|
+
before :all do
|
|
71
|
+
@model.marked = false
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "is valid" do
|
|
75
|
+
expect(@model).to be_valid
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "with mark flag set to an object" do
|
|
80
|
+
before :all do
|
|
81
|
+
# go through the back door to avoid typecasting
|
|
82
|
+
@model.instance_variable_set(:@marked, Object.new)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "is NOT valid" do
|
|
86
|
+
expect(@model).not_to be_valid
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
describe "with color set to nil" do
|
|
92
|
+
before :all do
|
|
93
|
+
# go through the back door to avoid typecasting
|
|
94
|
+
@model.color = nil
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "is valid" do
|
|
98
|
+
expect(@model).to be_valid
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
describe "with mark flag set to nil" do
|
|
104
|
+
before :all do
|
|
105
|
+
@model.marked = nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "is valid" do
|
|
109
|
+
expect(@model).to be_valid
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module PureRubyObjects
|
|
4
|
+
# notice that it is a pure Ruby class, not a DataMapper resource
|
|
5
|
+
class Country
|
|
6
|
+
#
|
|
7
|
+
# Behaviors
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
include DataMapper::Validations
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# Validations
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
validates_presence_of :name, :when => [:default, :adding_to_encyclopedia]
|
|
17
|
+
validates_presence_of :population, :when => :adding_to_encyclopedia, :message => Proc.new { |record|
|
|
18
|
+
"population really needs to be specified when adding %s to encyclopedia" % [record.class.name]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
validates_length_of :name, :in => (4..50)
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# API
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
attr_accessor :name, :population
|
|
28
|
+
|
|
29
|
+
def initialize(name, population = nil)
|
|
30
|
+
@name = name
|
|
31
|
+
@population = population
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'PureRubyObjects::Country' do
|
|
37
|
+
before do
|
|
38
|
+
# Powerset says so
|
|
39
|
+
@model = PureRubyObjects::Country.new("Italy", 58_147_733)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe "without name" do
|
|
43
|
+
before do
|
|
44
|
+
@model.name = nil
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it_behaves_like 'object invalid in default context'
|
|
48
|
+
|
|
49
|
+
it "is not valid in encyclopedia context" do
|
|
50
|
+
expect(@model).not_to be_valid(:adding_to_encyclopedia)
|
|
51
|
+
expect(@model).not_to be_valid_for_adding_to_encyclopedia
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
describe "without name and without population information" do
|
|
57
|
+
before do
|
|
58
|
+
@model.name = nil
|
|
59
|
+
@model.population = nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it_behaves_like 'object invalid in default context'
|
|
63
|
+
|
|
64
|
+
it "is not valid in encyclopedia context" do
|
|
65
|
+
expect(@model).not_to be_valid(:adding_to_encyclopedia)
|
|
66
|
+
expect(@model).not_to be_valid_for_adding_to_encyclopedia
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "has a meaningful error message" do
|
|
70
|
+
# trigger validation => have errors on the object
|
|
71
|
+
@model.valid_for_adding_to_encyclopedia?
|
|
72
|
+
expect(@model.errors.on(:population)).to eq ["population really needs to be specified when adding PureRubyObjects::Country to encyclopedia"]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
describe "with name and without population information" do
|
|
78
|
+
before do
|
|
79
|
+
@model.population = nil
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it_behaves_like 'object valid in default context'
|
|
83
|
+
|
|
84
|
+
it "is not valid in encyclopedia context" do
|
|
85
|
+
expect(@model).not_to be_valid(:adding_to_encyclopedia)
|
|
86
|
+
expect(@model).not_to be_valid_for_adding_to_encyclopedia
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
describe "with name and population information" do
|
|
92
|
+
it_behaves_like 'object valid in default context'
|
|
93
|
+
|
|
94
|
+
it "is valid in encyclopedia context" do
|
|
95
|
+
expect(@model).to be_valid(:adding_to_encyclopedia)
|
|
96
|
+
expect(@model).to be_valid_for_adding_to_encyclopedia
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
describe "with a 2 characters long name" do
|
|
102
|
+
before do
|
|
103
|
+
@model.name = "It"
|
|
104
|
+
@model.valid?
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it_behaves_like 'object invalid in default context'
|
|
108
|
+
|
|
109
|
+
it "has errors on name" do
|
|
110
|
+
expect(@model.errors.on(:name)).not_to be_empty
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "is valid in encyclopedia context" do
|
|
114
|
+
expect(@model).to be_valid(:adding_to_encyclopedia)
|
|
115
|
+
expect(@model).to be_valid_for_adding_to_encyclopedia
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|