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,127 @@
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
3
+
4
+ describe 'required_field_validator/date_type_value_spec' do
5
+
6
+ class Holiday
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ property :id, Serial
18
+ property :on, Date, :auto_validation => false
19
+
20
+ #
21
+ # Validations
22
+ #
23
+
24
+ validates_presence_of :on
25
+ end
26
+
27
+ describe 'Holiday' do
28
+ before :all do
29
+ Holiday.auto_migrate!
30
+ end
31
+
32
+ before do
33
+ @ny09 = Holiday.new(:on => Date.new(2008, 12, 31))
34
+ @ny09.should be_valid
35
+ end
36
+
37
+
38
+ describe "with on = nil" do
39
+ before do
40
+ @ny09.on = nil
41
+ end
42
+
43
+ it "is NOT valid" do
44
+ # nil = missing for Date value
45
+ # and Holiday only has default validation context
46
+ @ny09.should_not be_valid
47
+
48
+ # sanity check
49
+ @ny09.on = Date.new(2008, 12, 31)
50
+ @ny09.should be_valid
51
+ end
52
+ end
53
+
54
+
55
+ describe "with on = valid date" do
56
+ before do
57
+ @ny09.on = 0.0
58
+ end
59
+
60
+ it "IS valid" do
61
+ # yes, presence validator does not care
62
+ @ny09.should be_valid
63
+ end
64
+ end
65
+
66
+
67
+
68
+ describe "with on = 0" do
69
+ before do
70
+ @ny09.on = 0
71
+ end
72
+
73
+ it "IS valid" do
74
+ # yes, presence validator does not care
75
+ @ny09.should be_valid
76
+ end
77
+ end
78
+
79
+
80
+
81
+ describe "with on = 100" do
82
+ before do
83
+ @ny09.on = 100
84
+ end
85
+
86
+ it "IS valid" do
87
+ @ny09.should be_valid
88
+ end
89
+ end
90
+
91
+
92
+ describe "with on = 100.0" do
93
+ before do
94
+ @ny09.on = 100.0
95
+ end
96
+
97
+ it "IS valid" do
98
+ @ny09.should be_valid
99
+ end
100
+ end
101
+
102
+
103
+ describe "with on = -1100" do
104
+ before do
105
+ # presence validator does not care
106
+ @ny09.on = -1100
107
+ end
108
+
109
+ it "IS valid" do
110
+ @ny09.should be_valid
111
+ end
112
+ end
113
+
114
+
115
+ describe "with on = -1100.5" do
116
+ before do
117
+ # presence validator does not care
118
+ @ny09.on = -1100.5
119
+ end
120
+
121
+ it "IS valid" do
122
+ @ny09.should be_valid
123
+ end
124
+ end
125
+ end
126
+
127
+ end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
3
+
4
+ describe 'required_field_validator/datetime_type_value_spec' do
5
+
6
+ class ScheduledOperation
7
+ #
8
+ # Behaviors
9
+ #
10
+
11
+ include DataMapper::Resource
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+ property :id, Serial
18
+ property :at, DateTime, :auto_validation => false
19
+
20
+ #
21
+ # Validations
22
+ #
23
+
24
+ validates_presence_of :at
25
+ end
26
+
27
+ describe 'ScheduledOperation' do
28
+ before :all do
29
+ ScheduledOperation.auto_migrate!
30
+ end
31
+
32
+ before do
33
+ @operation = ScheduledOperation.new(:at => DateTime.civil(2008, 06, 07, 15, 00, 00))
34
+ @operation.should be_valid
35
+ end
36
+
37
+
38
+ describe "with on = nil" do
39
+ before do
40
+ @operation.at = nil
41
+ end
42
+
43
+ it "is NOT valid" do
44
+ # nil = missing for Date value
45
+ # and ScheduledOperation only has default validation context
46
+ @operation.should_not be_valid
47
+
48
+ # sanity check
49
+ @operation.at = Date.new(2008, 12, 31)
50
+ @operation.should be_valid
51
+ end
52
+ end
53
+
54
+
55
+ describe "with on = valid date" do
56
+ before do
57
+ @operation.at = 0.0
58
+ end
59
+
60
+ it "IS valid" do
61
+ # yes, presence validator does not care
62
+ @operation.should be_valid
63
+ end
64
+ end
65
+
66
+
67
+
68
+ describe "with on = 0" do
69
+ before do
70
+ @operation.at = 0
71
+ end
72
+
73
+ it "IS valid" do
74
+ # yes, presence validator does not care
75
+ @operation.should be_valid
76
+ end
77
+ end
78
+
79
+
80
+
81
+ describe "with on = 100" do
82
+ before do
83
+ @operation.at = 100
84
+ end
85
+
86
+ it "IS valid" do
87
+ @operation.should be_valid
88
+ end
89
+ end
90
+
91
+
92
+ describe "with on = 100.0" do
93
+ before do
94
+ @operation.at = 100.0
95
+ end
96
+
97
+ it "IS valid" do
98
+ @operation.should be_valid
99
+ end
100
+ end
101
+
102
+
103
+ describe "with on = -1100" do
104
+ before do
105
+ # presence validator does not care
106
+ @operation.at = -1100
107
+ end
108
+
109
+ it "IS valid" do
110
+ @operation.should be_valid
111
+ end
112
+ end
113
+
114
+
115
+ describe "with on = -1100.5" do
116
+ before do
117
+ # presence validator does not care
118
+ @operation.at = -1100.5
119
+ end
120
+
121
+ it "IS valid" do
122
+ @operation.should be_valid
123
+ end
124
+ end
125
+ end
126
+
127
+ end
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
3
+
4
+ describe 'required_field_validator/float_type_value_spec' do
5
+
6
+ #
7
+ # Especially stupid example since Hg adds local repository revision
8
+ # to each new commit, but lets roll on with this SCM-ish classes and
9
+ # still show how Integer type values are validated for presence
10
+ #
11
+ class CpuConsumption
12
+ #
13
+ # Behaviors
14
+ #
15
+
16
+ include DataMapper::Resource
17
+
18
+ #
19
+ # Properties
20
+ #
21
+
22
+ property :id, Serial
23
+ property :percent, Float, :auto_validation => false
24
+
25
+ #
26
+ # Validations
27
+ #
28
+
29
+ validates_presence_of :percent
30
+ end
31
+
32
+ describe 'CpuConsumption' do
33
+ before :all do
34
+ CpuConsumption.auto_migrate!
35
+ end
36
+
37
+ before do
38
+ @metric = CpuConsumption.new(:percent => 20.0)
39
+ @metric.should be_valid
40
+ end
41
+
42
+ describe "with percentage = 0.0" do
43
+ before do
44
+ @metric.percent = 0.0
45
+ end
46
+
47
+ it "IS valid" do
48
+ # yes, presence validator does not care
49
+ @metric.should be_valid
50
+ end
51
+ end
52
+
53
+
54
+
55
+ describe "with percentage = 0" do
56
+ before do
57
+ @metric.percent = 0
58
+ end
59
+
60
+ it "IS valid" do
61
+ # yes, presence validator does not care
62
+ @metric.should be_valid
63
+ end
64
+ end
65
+
66
+
67
+
68
+ describe "with percentage = 100" do
69
+ before do
70
+ @metric.percent = 100
71
+ end
72
+
73
+ it "IS valid" do
74
+ @metric.should be_valid
75
+ end
76
+ end
77
+
78
+
79
+ describe "with percentage = 100.0" do
80
+ before do
81
+ @metric.percent = 100.0
82
+ end
83
+
84
+ it "IS valid" do
85
+ @metric.should be_valid
86
+ end
87
+ end
88
+
89
+
90
+ describe "with percentage = -1100" do
91
+ before do
92
+ # presence validator does not care
93
+ @metric.percent = -1100
94
+ end
95
+
96
+ it "IS valid" do
97
+ @metric.should be_valid
98
+ end
99
+ end
100
+
101
+
102
+ describe "with percentage = -1100.5" do
103
+ before do
104
+ # presence validator does not care
105
+ @metric.percent = -1100.5
106
+ end
107
+
108
+ it "IS valid" do
109
+ @metric.should be_valid
110
+ end
111
+ end
112
+
113
+
114
+ describe "with percentage = nil" do
115
+ before do
116
+ @metric.percent = nil
117
+ end
118
+
119
+ it "is NOT valid" do
120
+ # nil = missing for float value
121
+ # and CpuConsumption only has default validation context
122
+ @metric.should_not be_valid
123
+
124
+ # sanity check
125
+ @metric.percent = 100
126
+ @metric.should be_valid
127
+ end
128
+ end
129
+ end
130
+
131
+ end
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
3
+
4
+ describe 'required_field_validator/integer_type_value_spec' do
5
+
6
+ #
7
+ # Especially stupid example since Hg adds local repository revision
8
+ # to each new commit, but lets roll on with this SCM-ish classes and
9
+ # still show how Integer type values are validated for presence
10
+ #
11
+ class HgCommit < ScmOperation
12
+ #
13
+ # Properties
14
+ #
15
+
16
+ property :local_repo_revision_num, Integer, :auto_validation => false
17
+
18
+ #
19
+ # Validations
20
+ #
21
+
22
+ validates_presence_of :local_repo_revision_num
23
+ end
24
+
25
+ describe 'HgCommit' do
26
+ before :all do
27
+ HgCommit.auto_migrate!
28
+ end
29
+
30
+ before do
31
+ @operation = HgCommit.new(:local_repo_revision_num => 90, :name => "ci")
32
+ @operation.should be_valid
33
+ end
34
+
35
+ describe "with local revision number = 0" do
36
+ before do
37
+ @operation.local_repo_revision_num = 0
38
+ end
39
+
40
+ it "IS valid" do
41
+ # yes, presence validator does not care
42
+ @operation.should be_valid
43
+ end
44
+ end
45
+
46
+
47
+
48
+ describe "with local revision number = 100" do
49
+ before do
50
+ @operation.local_repo_revision_num = 100
51
+ end
52
+
53
+ it "IS valid" do
54
+ @operation.should be_valid
55
+ end
56
+ end
57
+
58
+
59
+ describe "with local revision number = 100.0 (float!)" do
60
+ before do
61
+ @operation.local_repo_revision_num = 100.0
62
+ end
63
+
64
+ it "IS valid" do
65
+ @operation.should be_valid
66
+ end
67
+ end
68
+
69
+
70
+ describe "with local revision number = -1100" do
71
+ before do
72
+ # presence validator does not care
73
+ @operation.local_repo_revision_num = -1100
74
+ end
75
+
76
+ it "IS valid" do
77
+ @operation.should be_valid
78
+ end
79
+ end
80
+
81
+
82
+ describe "with local revision number = nil" do
83
+ before do
84
+ @operation.local_repo_revision_num = nil
85
+ end
86
+
87
+ it "is NOT valid" do
88
+ # nil = missing for integer value
89
+ # and HgCommit only has default validation context
90
+ @operation.should_not be_valid
91
+
92
+ # sanity check
93
+ @operation.local_repo_revision_num = 100
94
+ @operation.should be_valid
95
+ end
96
+ end
97
+ end
98
+
99
+ end