ardm-validations 1.2.0

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.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +35 -0
  3. data/.travis.yml +11 -0
  4. data/Gemfile +51 -0
  5. data/LICENSE +21 -0
  6. data/README.rdoc +122 -0
  7. data/Rakefile +4 -0
  8. data/ardm-validations.gemspec +28 -0
  9. data/lib/ardm-validations.rb +1 -0
  10. data/lib/dm-validations.rb +169 -0
  11. data/lib/dm-validations/auto_validate.rb +252 -0
  12. data/lib/dm-validations/context.rb +66 -0
  13. data/lib/dm-validations/contextual_validators.rb +220 -0
  14. data/lib/dm-validations/exceptions.rb +5 -0
  15. data/lib/dm-validations/formats/email.rb +65 -0
  16. data/lib/dm-validations/formats/url.rb +27 -0
  17. data/lib/dm-validations/support/object.rb +18 -0
  18. data/lib/dm-validations/support/ordered_hash.rb +434 -0
  19. data/lib/dm-validations/validation_errors.rb +137 -0
  20. data/lib/dm-validations/validators/absent_field_validator.rb +58 -0
  21. data/lib/dm-validations/validators/acceptance_validator.rb +79 -0
  22. data/lib/dm-validations/validators/block_validator.rb +61 -0
  23. data/lib/dm-validations/validators/confirmation_validator.rb +92 -0
  24. data/lib/dm-validations/validators/format_validator.rb +124 -0
  25. data/lib/dm-validations/validators/generic_validator.rb +184 -0
  26. data/lib/dm-validations/validators/length_validator.rb +249 -0
  27. data/lib/dm-validations/validators/method_validator.rb +64 -0
  28. data/lib/dm-validations/validators/numeric_validator.rb +182 -0
  29. data/lib/dm-validations/validators/primitive_validator.rb +58 -0
  30. data/lib/dm-validations/validators/required_field_validator.rb +83 -0
  31. data/lib/dm-validations/validators/uniqueness_validator.rb +67 -0
  32. data/lib/dm-validations/validators/within_validator.rb +74 -0
  33. data/lib/dm-validations/version.rb +5 -0
  34. data/spec/fixtures/barcode.rb +40 -0
  35. data/spec/fixtures/basketball_court.rb +58 -0
  36. data/spec/fixtures/basketball_player.rb +34 -0
  37. data/spec/fixtures/beta_tester_account.rb +33 -0
  38. data/spec/fixtures/bill_of_landing.rb +47 -0
  39. data/spec/fixtures/boat_dock.rb +26 -0
  40. data/spec/fixtures/city.rb +24 -0
  41. data/spec/fixtures/company.rb +93 -0
  42. data/spec/fixtures/corporate_world.rb +39 -0
  43. data/spec/fixtures/country.rb +24 -0
  44. data/spec/fixtures/ethernet_frame.rb +56 -0
  45. data/spec/fixtures/event.rb +44 -0
  46. data/spec/fixtures/g3_concert.rb +57 -0
  47. data/spec/fixtures/jabberwock.rb +27 -0
  48. data/spec/fixtures/kayak.rb +28 -0
  49. data/spec/fixtures/lernean_hydra.rb +39 -0
  50. data/spec/fixtures/llama_spaceship.rb +15 -0
  51. data/spec/fixtures/mathematical_function.rb +34 -0
  52. data/spec/fixtures/memory_object.rb +30 -0
  53. data/spec/fixtures/mittelschnauzer.rb +39 -0
  54. data/spec/fixtures/motor_launch.rb +21 -0
  55. data/spec/fixtures/multibyte.rb +16 -0
  56. data/spec/fixtures/page.rb +32 -0
  57. data/spec/fixtures/phone_number.rb +28 -0
  58. data/spec/fixtures/pirogue.rb +28 -0
  59. data/spec/fixtures/programming_language.rb +83 -0
  60. data/spec/fixtures/reservation.rb +38 -0
  61. data/spec/fixtures/scm_operation.rb +56 -0
  62. data/spec/fixtures/sms_message.rb +22 -0
  63. data/spec/fixtures/udp_packet.rb +49 -0
  64. data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
  65. data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
  66. data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  67. data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
  68. data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
  69. data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
  70. data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
  71. data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
  72. data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
  73. data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
  74. data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
  75. data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
  76. data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
  77. data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +52 -0
  78. data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +39 -0
  79. data/spec/integration/automatic_validation/spec_helper.rb +57 -0
  80. data/spec/integration/block_validator/block_validator_spec.rb +32 -0
  81. data/spec/integration/block_validator/spec_helper.rb +5 -0
  82. data/spec/integration/conditional_validation/if_condition_spec.rb +63 -0
  83. data/spec/integration/conditional_validation/spec_helper.rb +5 -0
  84. data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
  85. data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
  86. data/spec/integration/datamapper_models/association_validation_spec.rb +29 -0
  87. data/spec/integration/datamapper_models/inheritance_spec.rb +82 -0
  88. data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
  89. data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
  90. data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
  91. data/spec/integration/format_validator/email_format_validator_spec.rb +139 -0
  92. data/spec/integration/format_validator/format_validator_spec.rb +64 -0
  93. data/spec/integration/format_validator/regexp_validator_spec.rb +33 -0
  94. data/spec/integration/format_validator/spec_helper.rb +5 -0
  95. data/spec/integration/format_validator/url_format_validator_spec.rb +93 -0
  96. data/spec/integration/length_validator/default_value_spec.rb +14 -0
  97. data/spec/integration/length_validator/equality_spec.rb +87 -0
  98. data/spec/integration/length_validator/error_message_spec.rb +22 -0
  99. data/spec/integration/length_validator/maximum_spec.rb +49 -0
  100. data/spec/integration/length_validator/minimum_spec.rb +54 -0
  101. data/spec/integration/length_validator/range_spec.rb +87 -0
  102. data/spec/integration/length_validator/spec_helper.rb +7 -0
  103. data/spec/integration/method_validator/method_validator_spec.rb +241 -0
  104. data/spec/integration/method_validator/spec_helper.rb +5 -0
  105. data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
  106. data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
  107. data/spec/integration/numeric_validator/float_type_spec.rb +90 -0
  108. data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
  109. data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +37 -0
  110. data/spec/integration/numeric_validator/integer_only_true_spec.rb +91 -0
  111. data/spec/integration/numeric_validator/integer_type_spec.rb +86 -0
  112. data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
  113. data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
  114. data/spec/integration/numeric_validator/spec_helper.rb +5 -0
  115. data/spec/integration/primitive_validator/primitive_validator_spec.rb +92 -0
  116. data/spec/integration/primitive_validator/spec_helper.rb +5 -0
  117. data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  118. data/spec/integration/required_field_validator/association_spec.rb +72 -0
  119. data/spec/integration/required_field_validator/boolean_type_value_spec.rb +155 -0
  120. data/spec/integration/required_field_validator/date_type_value_spec.rb +127 -0
  121. data/spec/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
  122. data/spec/integration/required_field_validator/float_type_value_spec.rb +131 -0
  123. data/spec/integration/required_field_validator/integer_type_value_spec.rb +99 -0
  124. data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
  125. data/spec/integration/required_field_validator/shared_examples.rb +26 -0
  126. data/spec/integration/required_field_validator/spec_helper.rb +7 -0
  127. data/spec/integration/required_field_validator/string_type_value_spec.rb +167 -0
  128. data/spec/integration/required_field_validator/text_type_value_spec.rb +49 -0
  129. data/spec/integration/shared/default_validation_context.rb +13 -0
  130. data/spec/integration/shared/valid_and_invalid_model.rb +35 -0
  131. data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
  132. data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
  133. data/spec/integration/within_validator/spec_helper.rb +5 -0
  134. data/spec/integration/within_validator/within_validator_spec.rb +168 -0
  135. data/spec/public/resource_spec.rb +105 -0
  136. data/spec/rcov.opts +6 -0
  137. data/spec/spec.opts +4 -0
  138. data/spec/spec_helper.rb +29 -0
  139. data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
  140. data/spec/unit/contextual_validators/execution_spec.rb +48 -0
  141. data/spec/unit/contextual_validators/spec_helper.rb +37 -0
  142. data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
  143. data/spec/unit/generic_validator/optional_spec.rb +54 -0
  144. data/spec/unit/validation_errors/adding_spec.rb +54 -0
  145. data/spec/unit/validation_errors/emptiness_spec.rb +38 -0
  146. data/spec/unit/validation_errors/enumerable_spec.rb +32 -0
  147. data/spec/unit/validation_errors/reading_spec.rb +35 -0
  148. data/spec/unit/validation_errors/respond_to_spec.rb +15 -0
  149. data/spec/unit/validators/within_validator_spec.rb +23 -0
  150. data/tasks/spec.rake +38 -0
  151. data/tasks/yard.rake +9 -0
  152. data/tasks/yardstick.rake +19 -0
  153. metadata +256 -0
@@ -0,0 +1,5 @@
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
7
+ end
8
+
9
+ describe "with valid set of attributes" do
10
+ before :all do
11
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
12
+ @model.valid?
13
+ end
14
+
15
+ it_should_behave_like "valid model"
16
+ end
17
+
18
+
19
+ describe "with rim height of 3.05" do
20
+ before :all do
21
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance(:rim_height => 3.05)
22
+ @model.valid?
23
+ end
24
+
25
+ it_should_behave_like "valid model"
26
+ end
27
+
28
+
29
+ describe "with rim height of 3.30" do
30
+ before :all do
31
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance(:rim_height => 3.30)
32
+ @model.valid?
33
+ end
34
+
35
+ it_should_behave_like "invalid model"
36
+
37
+ it "has a meaningful error message" do
38
+ @model.errors.on(:rim_height).should == [ 'Rim height must be equal to 3.05' ]
39
+ end
40
+ end
41
+
42
+
43
+ describe "with free throw line distance of 4.57" do
44
+ before :all do
45
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance(:free_throw_line_distance => 4.57)
46
+ @model.valid?
47
+ end
48
+
49
+ it_should_behave_like "valid model"
50
+ end
51
+
52
+
53
+ describe "with free throw line distance of 3.10" do
54
+ before :all do
55
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance(:free_throw_line_distance => 3.10)
56
+ @model.valid?
57
+ end
58
+
59
+ it_should_behave_like "invalid model"
60
+
61
+ it "has a meaningful error message" do
62
+ @model.errors.on(:free_throw_line_distance).should == [ 'Free throw line distance must be equal to 4.57' ]
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::LerneanHydra' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::LerneanHydra.auto_migrate!
7
+ end
8
+
9
+ describe "with valid set of attributes" do
10
+ before :all do
11
+ @model = DataMapper::Validations::Fixtures::LerneanHydra.valid_instance
12
+ @model.valid?
13
+ end
14
+
15
+ it_should_behave_like "valid model"
16
+ end
17
+
18
+
19
+ describe "with 9 heads" do
20
+ before :all do
21
+ @model = DataMapper::Validations::Fixtures::LerneanHydra.valid_instance(:head_count => 9)
22
+ @model.valid?
23
+ end
24
+
25
+ it_should_behave_like "valid model"
26
+ end
27
+
28
+
29
+ describe "with only 3 heads" do
30
+ before :all do
31
+ @model = DataMapper::Validations::Fixtures::LerneanHydra.valid_instance(:head_count => 3)
32
+ @model.valid?
33
+ end
34
+
35
+ it_should_behave_like "invalid model"
36
+
37
+ it "has a meaningful error message" do
38
+ @model.errors.on(:head_count).should == [ 'Lernean hydra is said to have exactly 9 heads' ]
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/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_should_behave_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_should_behave_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_should_behave_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_should_behave_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_should_behave_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 "is should not change the value" do
58
+ @model.height.should == @height
59
+ end
60
+
61
+ it_should_behave_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 "is should not change the value" do
71
+ @model.height.should == @height
72
+ end
73
+
74
+ it_should_behave_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_should_behave_like "invalid model"
85
+
86
+ it "has a meaningful error message" do
87
+ @model.errors.on(:height).should == [ 'Height must be a number' ]
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/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_should_behave_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_should_behave_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_should_behave_like "invalid model"
32
+
33
+ it "has a meaningful error message" do
34
+ @model.errors.on(:three_point_line_distance).should == [ 'Three point line distance must be greater than 6.7' ]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/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_should_behave_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_should_behave_like "valid model"
22
+ end
23
+
24
+
25
+ describe "with length of 14.0" do
26
+ before :all do
27
+ @model.length = 14.0
28
+ @model.valid?
29
+ end
30
+
31
+ it_should_behave_like "invalid model"
32
+
33
+ it "has a meaningful error message" do
34
+ @model.errors.on(:length).should == [ 'Length must be greater than or equal to 15.0' ]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/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
+ @country.should 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
+ @country.should 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
+ @country.should 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
+ @country.should 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
+ @country.should_not 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
+ @country.should_not 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
+ @country.should_not be_valid
84
+ end
85
+
86
+ it "has a meaningful error message on for the property" do
87
+ @country.valid?
88
+ @country.errors.on(:area).should == [ 'Please use integers to specify area' ]
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/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
+ @city.should 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
+ @city.should 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
+ @city.should 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
+ @city.should 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
+ @city.founded_in.should be(@string)
64
+ end
65
+
66
+ it "IS NOT valid" do
67
+ @city.should_not 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
+ @city.should_not be_valid
79
+ end
80
+
81
+ it "has a meaningful error message on for the property" do
82
+ @city.valid?
83
+ @city.errors.on(:founded_in).should == [ 'Foundation year must be an integer' ]
84
+ end
85
+ end
86
+ end