aequitas 0.0.1

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 (216) hide show
  1. data/.gitignore +4 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE +21 -0
  5. data/README.rdoc +125 -0
  6. data/Rakefile +25 -0
  7. data/VERSION +1 -0
  8. data/aequitas.gemspec +20 -0
  9. data/lib/aequitas.rb +80 -0
  10. data/lib/aequitas/class_methods.rb +26 -0
  11. data/lib/aequitas/context.rb +53 -0
  12. data/lib/aequitas/contextual_rule_set.rb +221 -0
  13. data/lib/aequitas/exceptions.rb +10 -0
  14. data/lib/aequitas/macros.rb +466 -0
  15. data/lib/aequitas/message_transformer.rb +127 -0
  16. data/lib/aequitas/rule.rb +153 -0
  17. data/lib/aequitas/rule/absence.rb +14 -0
  18. data/lib/aequitas/rule/absence/blank.rb +21 -0
  19. data/lib/aequitas/rule/absence/nil.rb +21 -0
  20. data/lib/aequitas/rule/acceptance.rb +36 -0
  21. data/lib/aequitas/rule/block.rb +33 -0
  22. data/lib/aequitas/rule/confirmation.rb +41 -0
  23. data/lib/aequitas/rule/format.rb +81 -0
  24. data/lib/aequitas/rule/format/proc.rb +28 -0
  25. data/lib/aequitas/rule/format/regexp.rb +44 -0
  26. data/lib/aequitas/rule/formats/email.rb +52 -0
  27. data/lib/aequitas/rule/formats/url.rb +14 -0
  28. data/lib/aequitas/rule/guard.rb +51 -0
  29. data/lib/aequitas/rule/length.rb +87 -0
  30. data/lib/aequitas/rule/length/equal.rb +46 -0
  31. data/lib/aequitas/rule/length/maximum.rb +46 -0
  32. data/lib/aequitas/rule/length/minimum.rb +46 -0
  33. data/lib/aequitas/rule/length/range.rb +46 -0
  34. data/lib/aequitas/rule/method.rb +31 -0
  35. data/lib/aequitas/rule/numericalness.rb +85 -0
  36. data/lib/aequitas/rule/numericalness/equal.rb +30 -0
  37. data/lib/aequitas/rule/numericalness/greater_than.rb +30 -0
  38. data/lib/aequitas/rule/numericalness/greater_than_or_equal.rb +30 -0
  39. data/lib/aequitas/rule/numericalness/integer.rb +37 -0
  40. data/lib/aequitas/rule/numericalness/less_than.rb +30 -0
  41. data/lib/aequitas/rule/numericalness/less_than_or_equal.rb +30 -0
  42. data/lib/aequitas/rule/numericalness/non_integer.rb +64 -0
  43. data/lib/aequitas/rule/numericalness/not_equal.rb +30 -0
  44. data/lib/aequitas/rule/presence.rb +14 -0
  45. data/lib/aequitas/rule/presence/not_blank.rb +21 -0
  46. data/lib/aequitas/rule/presence/not_nil.rb +21 -0
  47. data/lib/aequitas/rule/primitive_type.rb +28 -0
  48. data/lib/aequitas/rule/skip_condition.rb +104 -0
  49. data/lib/aequitas/rule/within.rb +28 -0
  50. data/lib/aequitas/rule/within/range.rb +53 -0
  51. data/lib/aequitas/rule/within/range/bounded.rb +25 -0
  52. data/lib/aequitas/rule/within/range/unbounded_begin.rb +25 -0
  53. data/lib/aequitas/rule/within/range/unbounded_end.rb +25 -0
  54. data/lib/aequitas/rule/within/set.rb +39 -0
  55. data/lib/aequitas/rule_set.rb +80 -0
  56. data/lib/aequitas/support/blank.rb +22 -0
  57. data/lib/aequitas/support/equalizable.rb +113 -0
  58. data/lib/aequitas/support/ordered_hash.rb +438 -0
  59. data/lib/aequitas/version.rb +5 -0
  60. data/lib/aequitas/violation.rb +116 -0
  61. data/lib/aequitas/violation_set.rb +123 -0
  62. data/lib/aequitas/virtus.rb +29 -0
  63. data/lib/aequitas/virtus/inline_attribute_rule_extractor.rb +41 -0
  64. data/lib/aequitas/virtus/inline_attribute_rule_extractor/boolean.rb +17 -0
  65. data/lib/aequitas/virtus/inline_attribute_rule_extractor/object.rb +25 -0
  66. data/lib/aequitas/virtus/inline_attribute_rule_extractor/string.rb +27 -0
  67. data/spec/integration/aequitas/macros/validates_absence_of_spec.rb +19 -0
  68. data/spec/integration/aequitas/macros/validates_acceptance_of_spec.rb +19 -0
  69. data/spec/integration/aequitas/macros/validates_confirmation_of_spec.rb +25 -0
  70. data/spec/integration/aequitas/macros/validates_format_of_spec.rb +87 -0
  71. data/spec/integration/aequitas/macros/validates_length_of.rb +77 -0
  72. data/spec/integration/aequitas/macros/validates_numericalness_of_spec.rb +221 -0
  73. data/spec/integration/aequitas/macros/validates_presence_of_spec.rb +19 -0
  74. data/spec/integration/aequitas/macros/validates_with_block.rb +23 -0
  75. data/spec/integration/aequitas/macros/validates_with_method.rb +19 -0
  76. data/spec/integration/aequitas/macros/validates_within.rb +87 -0
  77. data/spec/integration/shared/macros/integration_spec.rb +67 -0
  78. data/spec/integration/virtus/boolean/presence_spec.rb +49 -0
  79. data/spec/integration/virtus/string/format/email_address_spec.rb +55 -0
  80. data/spec/integration/virtus/string/format/regexp_spec.rb +55 -0
  81. data/spec/integration/virtus/string/format/url_spec.rb +55 -0
  82. data/spec/integration/virtus/string/length/equal_spec.rb +49 -0
  83. data/spec/integration/virtus/string/length/range_spec.rb +49 -0
  84. data/spec/integration/virtus/string/presence_spec.rb +49 -0
  85. data/spec/rcov.opts +6 -0
  86. data/spec/spec_helper.rb +5 -0
  87. data/spec/suite.rb +5 -0
  88. data/spec/unit/aequitas/rule/absence/blank_spec.rb +45 -0
  89. data/spec/unit/aequitas/rule/acceptance_spec.rb +71 -0
  90. data/spec/unit/aequitas/rule/confirmation_spec.rb +80 -0
  91. data/spec/unit/aequitas/rule/guard_spec.rb +120 -0
  92. data/spec/unit/aequitas/rule/skip_condition_spec.rb +170 -0
  93. data/spec/unit/aequitas/rule_spec.rb +40 -0
  94. data/spec/unit/aequitas/support/blank_spec.rb +83 -0
  95. data/spec/unit/aequitas/support/equalizable/equalizer_spec.rb +21 -0
  96. data/spec/unit/aequitas/support/equalizable_spec.rb +67 -0
  97. data/spec/unit/aequitas/violation_set_spec.rb +154 -0
  98. data/spec_legacy/fixtures/barcode.rb +40 -0
  99. data/spec_legacy/fixtures/basketball_court.rb +58 -0
  100. data/spec_legacy/fixtures/basketball_player.rb +34 -0
  101. data/spec_legacy/fixtures/beta_tester_account.rb +33 -0
  102. data/spec_legacy/fixtures/bill_of_landing.rb +47 -0
  103. data/spec_legacy/fixtures/boat_dock.rb +26 -0
  104. data/spec_legacy/fixtures/city.rb +24 -0
  105. data/spec_legacy/fixtures/company.rb +93 -0
  106. data/spec_legacy/fixtures/corporate_world.rb +39 -0
  107. data/spec_legacy/fixtures/country.rb +24 -0
  108. data/spec_legacy/fixtures/ethernet_frame.rb +56 -0
  109. data/spec_legacy/fixtures/event.rb +44 -0
  110. data/spec_legacy/fixtures/g3_concert.rb +57 -0
  111. data/spec_legacy/fixtures/jabberwock.rb +27 -0
  112. data/spec_legacy/fixtures/kayak.rb +28 -0
  113. data/spec_legacy/fixtures/lernean_hydra.rb +39 -0
  114. data/spec_legacy/fixtures/llama_spaceship.rb +15 -0
  115. data/spec_legacy/fixtures/mathematical_function.rb +34 -0
  116. data/spec_legacy/fixtures/memory_object.rb +30 -0
  117. data/spec_legacy/fixtures/mittelschnauzer.rb +39 -0
  118. data/spec_legacy/fixtures/motor_launch.rb +21 -0
  119. data/spec_legacy/fixtures/multibyte.rb +16 -0
  120. data/spec_legacy/fixtures/page.rb +32 -0
  121. data/spec_legacy/fixtures/phone_number.rb +28 -0
  122. data/spec_legacy/fixtures/pirogue.rb +28 -0
  123. data/spec_legacy/fixtures/programming_language.rb +83 -0
  124. data/spec_legacy/fixtures/reservation.rb +38 -0
  125. data/spec_legacy/fixtures/scm_operation.rb +56 -0
  126. data/spec_legacy/fixtures/sms_message.rb +22 -0
  127. data/spec_legacy/fixtures/udp_packet.rb +49 -0
  128. data/spec_legacy/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
  129. data/spec_legacy/integration/absent_field_validator/spec_helper.rb +7 -0
  130. data/spec_legacy/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  131. data/spec_legacy/integration/acceptance_validator/spec_helper.rb +7 -0
  132. data/spec_legacy/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
  133. data/spec_legacy/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
  134. data/spec_legacy/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
  135. data/spec_legacy/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
  136. data/spec_legacy/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
  137. data/spec_legacy/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
  138. data/spec_legacy/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
  139. data/spec_legacy/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
  140. data/spec_legacy/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
  141. data/spec_legacy/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +48 -0
  142. data/spec_legacy/integration/automatic_validation/inferred_within_validation_spec.rb +35 -0
  143. data/spec_legacy/integration/automatic_validation/spec_helper.rb +57 -0
  144. data/spec_legacy/integration/block_validator/block_validator_spec.rb +32 -0
  145. data/spec_legacy/integration/block_validator/spec_helper.rb +5 -0
  146. data/spec_legacy/integration/conditional_validation/if_condition_spec.rb +63 -0
  147. data/spec_legacy/integration/conditional_validation/spec_helper.rb +5 -0
  148. data/spec_legacy/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
  149. data/spec_legacy/integration/confirmation_validator/spec_helper.rb +5 -0
  150. data/spec_legacy/integration/datamapper_models/association_validation_spec.rb +29 -0
  151. data/spec_legacy/integration/datamapper_models/inheritance_spec.rb +82 -0
  152. data/spec_legacy/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
  153. data/spec_legacy/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
  154. data/spec_legacy/integration/duplicated_validations/spec_helper.rb +5 -0
  155. data/spec_legacy/integration/format_validator/email_format_validator_spec.rb +139 -0
  156. data/spec_legacy/integration/format_validator/format_validator_spec.rb +64 -0
  157. data/spec_legacy/integration/format_validator/regexp_validator_spec.rb +33 -0
  158. data/spec_legacy/integration/format_validator/spec_helper.rb +5 -0
  159. data/spec_legacy/integration/format_validator/url_format_validator_spec.rb +93 -0
  160. data/spec_legacy/integration/length_validator/default_value_spec.rb +14 -0
  161. data/spec_legacy/integration/length_validator/equality_spec.rb +87 -0
  162. data/spec_legacy/integration/length_validator/error_message_spec.rb +22 -0
  163. data/spec_legacy/integration/length_validator/maximum_spec.rb +49 -0
  164. data/spec_legacy/integration/length_validator/minimum_spec.rb +54 -0
  165. data/spec_legacy/integration/length_validator/range_spec.rb +87 -0
  166. data/spec_legacy/integration/length_validator/spec_helper.rb +7 -0
  167. data/spec_legacy/integration/method_validator/method_validator_spec.rb +242 -0
  168. data/spec_legacy/integration/method_validator/spec_helper.rb +5 -0
  169. data/spec_legacy/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
  170. data/spec_legacy/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
  171. data/spec_legacy/integration/numeric_validator/float_type_spec.rb +90 -0
  172. data/spec_legacy/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
  173. data/spec_legacy/integration/numeric_validator/gte_with_float_type_spec.rb +37 -0
  174. data/spec_legacy/integration/numeric_validator/integer_only_true_spec.rb +91 -0
  175. data/spec_legacy/integration/numeric_validator/integer_type_spec.rb +86 -0
  176. data/spec_legacy/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
  177. data/spec_legacy/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
  178. data/spec_legacy/integration/numeric_validator/spec_helper.rb +5 -0
  179. data/spec_legacy/integration/primitive_validator/primitive_validator_spec.rb +92 -0
  180. data/spec_legacy/integration/primitive_validator/spec_helper.rb +5 -0
  181. data/spec_legacy/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  182. data/spec_legacy/integration/required_field_validator/association_spec.rb +69 -0
  183. data/spec_legacy/integration/required_field_validator/boolean_type_value_spec.rb +164 -0
  184. data/spec_legacy/integration/required_field_validator/date_type_value_spec.rb +127 -0
  185. data/spec_legacy/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
  186. data/spec_legacy/integration/required_field_validator/float_type_value_spec.rb +131 -0
  187. data/spec_legacy/integration/required_field_validator/integer_type_value_spec.rb +99 -0
  188. data/spec_legacy/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
  189. data/spec_legacy/integration/required_field_validator/shared_examples.rb +26 -0
  190. data/spec_legacy/integration/required_field_validator/spec_helper.rb +7 -0
  191. data/spec_legacy/integration/required_field_validator/string_type_value_spec.rb +167 -0
  192. data/spec_legacy/integration/required_field_validator/text_type_value_spec.rb +49 -0
  193. data/spec_legacy/integration/shared/default_validation_context.rb +13 -0
  194. data/spec_legacy/integration/shared/valid_and_invalid_model.rb +35 -0
  195. data/spec_legacy/integration/uniqueness_validator/spec_helper.rb +5 -0
  196. data/spec_legacy/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
  197. data/spec_legacy/integration/within_validator/spec_helper.rb +5 -0
  198. data/spec_legacy/integration/within_validator/within_validator_spec.rb +168 -0
  199. data/spec_legacy/public/resource_spec.rb +105 -0
  200. data/spec_legacy/spec.opts +4 -0
  201. data/spec_legacy/spec_helper.rb +29 -0
  202. data/spec_legacy/unit/contextual_validators/emptiness_spec.rb +50 -0
  203. data/spec_legacy/unit/contextual_validators/execution_spec.rb +48 -0
  204. data/spec_legacy/unit/contextual_validators/spec_helper.rb +37 -0
  205. data/spec_legacy/unit/generic_validator/equality_operator_spec.rb +26 -0
  206. data/spec_legacy/unit/generic_validator/optional_spec.rb +54 -0
  207. data/spec_legacy/unit/validators/within_validator_spec.rb +23 -0
  208. data/spec_legacy/unit/violation_set/adding_spec.rb +54 -0
  209. data/spec_legacy/unit/violation_set/emptiness_spec.rb +38 -0
  210. data/spec_legacy/unit/violation_set/enumerable_spec.rb +32 -0
  211. data/spec_legacy/unit/violation_set/reading_spec.rb +35 -0
  212. data/spec_legacy/unit/violation_set/respond_to_spec.rb +15 -0
  213. data/tasks/spec.rake +38 -0
  214. data/tasks/yard.rake +9 -0
  215. data/tasks/yardstick.rake +19 -0
  216. metadata +302 -0
@@ -0,0 +1,87 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../../shared/macros/integration_spec'
3
+ require 'aequitas'
4
+
5
+ Aequitas::Macros::IntegrationSpec.describe Aequitas::Macros, '#validates_format_of' do
6
+ describe 'with a Proc' do
7
+ before do
8
+ class_under_test.validates_format_of attribute_name, :with => lambda { |value| value.valid? }
9
+ end
10
+
11
+ describe 'when format proc returns true' do
12
+ let(:attribute_value) do
13
+ val = MiniTest::Mock.new
14
+ val.expect(:nil?, false)
15
+ val.expect(:valid?, true)
16
+ val
17
+ end
18
+
19
+ it_should_be_a_valid_instance
20
+ end
21
+
22
+ describe 'when validated attribute is absent' do
23
+ let(:attribute_value) do
24
+ val = MiniTest::Mock.new
25
+ val.expect(:nil?, false)
26
+ val.expect(:valid?, false)
27
+ val
28
+ end
29
+
30
+ it_should_be_an_invalid_instance
31
+ end
32
+ end
33
+
34
+ describe 'with a Regexp' do
35
+ before do
36
+ class_under_test.validates_format_of attribute_name, :with => /foo/
37
+ end
38
+
39
+ describe 'when validated attribute is present' do
40
+ let(:attribute_value) { 'foo' }
41
+
42
+ it_should_be_a_valid_instance
43
+ end
44
+
45
+ describe 'when validated attribute is absent' do
46
+ let(:attribute_value) { 'bar' }
47
+
48
+ it_should_be_an_invalid_instance
49
+ end
50
+ end
51
+
52
+ describe 'with :url' do
53
+ before do
54
+ class_under_test.validates_format_of attribute_name, :as => :url
55
+ end
56
+
57
+ describe 'when validated attribute is a URL' do
58
+ let(:attribute_value) { 'http://www.example.com' }
59
+
60
+ it_should_be_a_valid_instance
61
+ end
62
+
63
+ describe 'when validated attribute is not a URL' do
64
+ let(:attribute_value) { 'not a url' }
65
+
66
+ it_should_be_an_invalid_instance
67
+ end
68
+ end
69
+
70
+ describe 'with :email_address' do
71
+ before do
72
+ class_under_test.validates_format_of attribute_name, :as => :email_address
73
+ end
74
+
75
+ describe 'when validated attribute is an email address' do
76
+ let(:attribute_value) { 'address@example.com' }
77
+
78
+ it_should_be_a_valid_instance
79
+ end
80
+
81
+ describe 'when validated attribute is not an email address' do
82
+ let(:attribute_value) { 'not an email' }
83
+
84
+ it_should_be_an_invalid_instance
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,77 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../../shared/macros/integration_spec'
3
+ require 'aequitas'
4
+
5
+ Aequitas::Macros::IntegrationSpec.describe Aequitas::Macros, '#validates_length_of' do
6
+ describe 'with :is or :equal options' do
7
+ before do
8
+ class_under_test.validates_length_of attribute_name, :is => 3
9
+ end
10
+
11
+ describe 'when validated attribute value is expected length' do
12
+ let(:attribute_value) { 'foo' }
13
+
14
+ it_should_be_a_valid_instance
15
+ end
16
+
17
+ describe 'when validated attribute value is not expected length' do
18
+ let(:attribute_value) { 'barz' }
19
+
20
+ it_should_be_an_invalid_instance
21
+ end
22
+ end
23
+
24
+ describe 'with :max or :maximum options' do
25
+ before do
26
+ class_under_test.validates_length_of attribute_name, :max => 3
27
+ end
28
+
29
+ describe 'when validated attribute value is at most expected length' do
30
+ let(:attribute_value) { 'foo' }
31
+
32
+ it_should_be_a_valid_instance
33
+ end
34
+
35
+ describe 'when validated attribute value is more than expected length' do
36
+ let(:attribute_value) { 'barz' }
37
+
38
+ it_should_be_an_invalid_instance
39
+ end
40
+ end
41
+
42
+ describe 'with :min or :minimum options' do
43
+ before do
44
+ class_under_test.validates_length_of attribute_name, :min => 3
45
+ end
46
+
47
+ describe 'when validated attribute value is at least expected length' do
48
+ let(:attribute_value) { 'foo' }
49
+
50
+ it_should_be_a_valid_instance
51
+ end
52
+
53
+ describe 'when validated attribute value is less than expected length' do
54
+ let(:attribute_value) { 'bz' }
55
+
56
+ it_should_be_an_invalid_instance
57
+ end
58
+ end
59
+
60
+ describe 'with :in or :within options' do
61
+ before do
62
+ class_under_test.validates_length_of attribute_name, :in => 2..3
63
+ end
64
+
65
+ describe 'when validated attribute value length is within expected range' do
66
+ let(:attribute_value) { 'foo' }
67
+
68
+ it_should_be_a_valid_instance
69
+ end
70
+
71
+ describe 'when validated attribute value length is not within expected range' do
72
+ let(:attribute_value) { 'barz' }
73
+
74
+ it_should_be_an_invalid_instance
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,221 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../../shared/macros/integration_spec'
3
+ require 'aequitas'
4
+
5
+ Aequitas::Macros::IntegrationSpec.describe Aequitas::Macros, '#validates_numericalness_of' do
6
+ describe 'with no options' do
7
+ before do
8
+ class_under_test.validates_numericalness_of attribute_name
9
+ end
10
+
11
+ describe 'when validated attribute is a non-integer number' do
12
+ let(:attribute_value) { 1.0 }
13
+
14
+ it_should_be_a_valid_instance
15
+ end
16
+
17
+ describe 'when validated attribute is an integer' do
18
+ let(:attribute_value) { 1 }
19
+
20
+ it_should_be_a_valid_instance
21
+ end
22
+
23
+ describe 'when validated attribute is non-numeric' do
24
+ let(:attribute_value) { 'a' }
25
+
26
+ it_should_be_an_invalid_instance
27
+ end
28
+ end
29
+
30
+ describe 'with :only_integer option' do
31
+ before do
32
+ class_under_test.validates_numericalness_of attribute_name, :only_integer => true
33
+ end
34
+
35
+ describe 'when validated attribute is an integer' do
36
+ let(:attribute_value) { 1 }
37
+
38
+ it_should_be_a_valid_instance
39
+ end
40
+
41
+ describe 'when validated attribute is not an integer' do
42
+ let(:attribute_value) { 'a' }
43
+
44
+ it_should_be_an_invalid_instance
45
+ end
46
+ end
47
+
48
+ describe 'with :eq, :equal, :equals, :exactly, or :equal_to options' do
49
+ before do
50
+ class_under_test.validates_numericalness_of attribute_name, :eq => bound
51
+ end
52
+
53
+ let(:bound) { 1 }
54
+ let(:class_of_violated_validation_rule) do
55
+ Aequitas::Rule::Numericalness::Equal
56
+ end
57
+
58
+ describe 'when validated attribute is greater than bound' do
59
+ let(:attribute_value) { bound + 1 }
60
+
61
+ it_should_be_an_invalid_instance
62
+ end
63
+
64
+ describe 'when validated attribute is equal to bound' do
65
+ let(:attribute_value) { bound }
66
+
67
+ it_should_be_a_valid_instance
68
+ end
69
+
70
+ describe 'when validated attribute is less than bound' do
71
+ let(:attribute_value) { bound - 1 }
72
+
73
+ it_should_be_an_invalid_instance
74
+ end
75
+ end
76
+
77
+ describe 'with :ne or :not_equal_to options' do
78
+ before do
79
+ class_under_test.validates_numericalness_of attribute_name, :ne => bound
80
+ end
81
+
82
+ let(:bound) { 1 }
83
+ let(:class_of_violated_validation_rule) do
84
+ Aequitas::Rule::Numericalness::NotEqual
85
+ end
86
+
87
+ describe 'when validated attribute is greater than bound' do
88
+ let(:attribute_value) { bound + 1 }
89
+
90
+ it_should_be_a_valid_instance
91
+ end
92
+
93
+ describe 'when validated attribute is equal to bound' do
94
+ let(:attribute_value) { bound }
95
+
96
+ it_should_be_an_invalid_instance
97
+ end
98
+
99
+ describe 'when validated attribute is less than bound' do
100
+ let(:attribute_value) { bound - 1 }
101
+
102
+ it_should_be_a_valid_instance
103
+ end
104
+ end
105
+
106
+ describe 'with :gt or :greater_than options' do
107
+ before do
108
+ class_under_test.validates_numericalness_of attribute_name, :gt => bound
109
+ end
110
+
111
+ let(:bound) { 1 }
112
+ let(:class_of_violated_validation_rule) do
113
+ Aequitas::Rule::Numericalness::GreaterThan
114
+ end
115
+
116
+ describe 'when validated attribute is greater than bound' do
117
+ let(:attribute_value) { bound + 1 }
118
+
119
+ it_should_be_a_valid_instance
120
+ end
121
+
122
+ describe 'when validated attribute is equal to bound' do
123
+ let(:attribute_value) { bound }
124
+
125
+ it_should_be_an_invalid_instance
126
+ end
127
+
128
+ describe 'when validated attribute is less than bound' do
129
+ let(:attribute_value) { bound - 1 }
130
+
131
+ it_should_be_an_invalid_instance
132
+ end
133
+ end
134
+
135
+ describe 'with :lt or :less_than options' do
136
+ before do
137
+ class_under_test.validates_numericalness_of attribute_name, :lt => bound
138
+ end
139
+
140
+ let(:bound) { 1 }
141
+ let(:class_of_violated_validation_rule) do
142
+ Aequitas::Rule::Numericalness::LessThan
143
+ end
144
+
145
+ describe 'when validated attribute is greater than bound' do
146
+ let(:attribute_value) { bound + 1 }
147
+
148
+ it_should_be_an_invalid_instance
149
+ end
150
+
151
+ describe 'when validated attribute is equal to bound' do
152
+ let(:attribute_value) { bound }
153
+
154
+ it_should_be_an_invalid_instance
155
+ end
156
+
157
+ describe 'when validated attribute is less than bound' do
158
+ let(:attribute_value) { bound - 1 }
159
+
160
+ it_should_be_a_valid_instance
161
+ end
162
+ end
163
+
164
+ describe 'with :gte or :greater_than_or_equal_to options' do
165
+ before do
166
+ class_under_test.validates_numericalness_of attribute_name, :gte => bound
167
+ end
168
+
169
+ let(:bound) { 1 }
170
+ let(:class_of_violated_validation_rule) do
171
+ Aequitas::Rule::Numericalness::GreaterThanOrEqual
172
+ end
173
+
174
+ describe 'when validated attribute is greater than bound' do
175
+ let(:attribute_value) { bound + 1 }
176
+
177
+ it_should_be_a_valid_instance
178
+ end
179
+
180
+ describe 'when validated attribute is equal to bound' do
181
+ let(:attribute_value) { bound }
182
+
183
+ it_should_be_a_valid_instance
184
+ end
185
+
186
+ describe 'when validated attribute is less than bound' do
187
+ let(:attribute_value) { bound - 1 }
188
+
189
+ it_should_be_an_invalid_instance
190
+ end
191
+ end
192
+
193
+ describe 'with :lte or :less_than_or_equal_to options' do
194
+ before do
195
+ class_under_test.validates_numericalness_of attribute_name, :lte => bound
196
+ end
197
+
198
+ let(:bound) { 1 }
199
+ let(:class_of_violated_validation_rule) do
200
+ Aequitas::Rule::Numericalness::LessThanOrEqual
201
+ end
202
+
203
+ describe 'when validated attribute is greater than bound' do
204
+ let(:attribute_value) { bound + 1 }
205
+
206
+ it_should_be_an_invalid_instance
207
+ end
208
+
209
+ describe 'when validated attribute is equal to bound' do
210
+ let(:attribute_value) { bound }
211
+
212
+ it_should_be_a_valid_instance
213
+ end
214
+
215
+ describe 'when validated attribute is less than bound' do
216
+ let(:attribute_value) { bound - 1 }
217
+
218
+ it_should_be_a_valid_instance
219
+ end
220
+ end
221
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../../shared/macros/integration_spec'
3
+ require 'aequitas'
4
+
5
+ Aequitas::Macros::IntegrationSpec.describe Aequitas::Macros, '#validates_presence_of' do
6
+ before { class_under_test.validates_presence_of attribute_name }
7
+
8
+ describe 'when validated attribute is present' do
9
+ let(:attribute_value) { :foo }
10
+
11
+ it_should_be_a_valid_instance
12
+ end
13
+
14
+ describe 'when validated attribute is absent' do
15
+ let(:attribute_value) { nil }
16
+
17
+ it_should_be_an_invalid_instance
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../../shared/macros/integration_spec'
3
+ require 'aequitas'
4
+
5
+ Aequitas::Macros::IntegrationSpec.describe Aequitas::Macros, '#validates_with_block' do
6
+ before do
7
+ block_value = self.block_value
8
+ class_under_test.validates_with_block(attribute_name) { block_value }
9
+ end
10
+ let(:attribute_value) { MiniTest::Mock.new }
11
+
12
+ describe 'when block returns a truthy value' do
13
+ let(:block_value) { true }
14
+
15
+ it_should_be_a_valid_instance
16
+ end
17
+
18
+ describe 'when block returns a falsy value' do
19
+ let(:block_value) { false }
20
+
21
+ it_should_be_an_invalid_instance
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../../shared/macros/integration_spec'
3
+ require 'aequitas'
4
+
5
+ Aequitas::Macros::IntegrationSpec.describe Aequitas::Macros, '#validates_with_method' do
6
+ before { class_under_test.validates_with_method attribute_name }
7
+
8
+ describe 'when method returns a truthy value' do
9
+ let(:attribute_value) { true }
10
+
11
+ it_should_be_a_valid_instance
12
+ end
13
+
14
+ describe 'when method returns a falsy value' do
15
+ let(:attribute_value) { false }
16
+
17
+ it_should_be_an_invalid_instance
18
+ end
19
+ end