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_within' do
6
+ describe 'with Range option for :set' do
7
+ describe 'with lower and upper bounds' do
8
+ before do
9
+ class_under_test.validates_within attribute_name, :set => set
10
+ end
11
+
12
+ let(:set) { 1..5 }
13
+
14
+ describe 'when validated attribute value is within the range' do
15
+ let(:attribute_value) { set.begin + 1 }
16
+
17
+ it_should_be_a_valid_instance
18
+ end
19
+
20
+ describe 'when validated attribute value is not within the range' do
21
+ let(:attribute_value) { set.end + 1 }
22
+
23
+ it_should_be_an_invalid_instance
24
+ end
25
+ end
26
+
27
+ describe 'with no lower bound' do
28
+ before do
29
+ class_under_test.validates_within attribute_name, :set => set
30
+ end
31
+
32
+ let(:set) { -(1.0/0)..5 }
33
+
34
+ describe 'when validated attribute value is within the range' do
35
+ let(:attribute_value) { set.end - 1 }
36
+
37
+ it_should_be_a_valid_instance
38
+ end
39
+
40
+ describe 'when validated attribute value is not within the range' do
41
+ let(:attribute_value) { set.end + 1 }
42
+
43
+ it_should_be_an_invalid_instance
44
+ end
45
+ end
46
+
47
+ describe 'with no upper bound' do
48
+ before do
49
+ class_under_test.validates_within attribute_name, :set => set
50
+ end
51
+
52
+ let(:set) { 1..(1.0/0) }
53
+
54
+ describe 'when validated attribute value is within the range' do
55
+ let(:attribute_value) { set.begin + 1 }
56
+
57
+ it_should_be_a_valid_instance
58
+ end
59
+
60
+ describe 'when validated attribute value is not within the range' do
61
+ let(:attribute_value) { set.begin - 1 }
62
+
63
+ it_should_be_an_invalid_instance
64
+ end
65
+ end
66
+ end
67
+
68
+ describe 'with Set option for :set' do
69
+ before do
70
+ class_under_test.validates_within attribute_name, :set => Set[*set]
71
+ end
72
+
73
+ let(:set) { [:a, :b, :c] }
74
+
75
+ describe 'when validated attribute value is included in the set' do
76
+ let(:attribute_value) { set.first }
77
+
78
+ it_should_be_a_valid_instance
79
+ end
80
+
81
+ describe 'when validated attribute value is not included in the set' do
82
+ let(:attribute_value) { :foo }
83
+
84
+ it_should_be_an_invalid_instance
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,67 @@
1
+ require 'minitest/spec'
2
+
3
+ module Aequitas
4
+ module Macros
5
+ class IntegrationSpec < MiniTest::Spec
6
+ class << self; public :describe; end
7
+
8
+ let(:class_under_test) do
9
+ attribute_name = self.attribute_name
10
+
11
+ Class.new do
12
+ include Aequitas
13
+
14
+ attr_accessor attribute_name
15
+
16
+ define_method(:initialize) do |attribute_value|
17
+ send("#{attribute_name}=", attribute_value)
18
+ end
19
+ end
20
+ end
21
+
22
+ let(:attribute_name) { :attribute_under_test }
23
+ let(:class_of_violated_validation_rule) do
24
+ class_under_test.validation_rules[attribute_name].first.class
25
+ end
26
+ let(:validation_rules) do
27
+ class_under_test.validation_rules[attribute_name].select do |rule|
28
+ rule.instance_of?(class_of_violated_validation_rule)
29
+ end
30
+ end
31
+ let(:expected_violations) do
32
+ validation_rules.map { |rule| Violation.new(subject, nil, rule) }
33
+ end
34
+
35
+ subject { class_under_test.new(attribute_value) }
36
+
37
+ def self.it_should_be_a_valid_instance
38
+ it '#valid? returns true' do
39
+ assert_predicate subject, :valid?
40
+ end
41
+
42
+ it '#errors is empty' do
43
+ assert_predicate subject.validate.errors, :empty?
44
+ end
45
+ end
46
+
47
+ def self.it_should_be_an_invalid_instance
48
+ it '#valid? returns false' do
49
+ refute_predicate subject, :valid?
50
+ end
51
+
52
+ it '#errors is not empty' do
53
+ refute_predicate subject.validate.errors, :empty?
54
+ end
55
+
56
+ it '#errors has one member' do
57
+ assert_equal 1, subject.validate.errors.size
58
+ end
59
+
60
+ it 'has a violation under the expected attribute name' do
61
+ assert_equal expected_violations, subject.validate.errors.on(attribute_name)
62
+ end
63
+ end
64
+
65
+ end # class IntegrationSpec
66
+ end # module Macros
67
+ end # module Aequitas
@@ -0,0 +1,49 @@
1
+ require_relative '../../../spec_helper'
2
+ require 'virtus'
3
+ require 'aequitas'
4
+ require 'aequitas/virtus'
5
+
6
+ describe Aequitas::Virtus::ClassMethodOverrides do
7
+ let(:class_under_test) do
8
+ class ClassUnderTest
9
+ include Virtus
10
+ include Aequitas
11
+
12
+ attribute :validated_attribute, Boolean, :required => true
13
+
14
+ self
15
+ end
16
+ end
17
+
18
+ describe '.validation_rules' do
19
+ it 'includes a Rule::Presence::NotNil for :validated_attribute' do
20
+ attribute_rules = class_under_test.validation_rules[:validated_attribute]
21
+ refute_predicate attribute_rules, :empty?
22
+ assert_instance_of Aequitas::Rule::Presence::NotNil, attribute_rules.first
23
+ end
24
+ end
25
+
26
+ describe '#valid?' do
27
+ subject { class_under_test.new(:validated_attribute => attribute_value) }
28
+
29
+ describe 'when empty string' do
30
+ let(:attribute_value) { '' }
31
+ it('is valid') { assert_predicate subject, :valid? }
32
+ end
33
+
34
+ describe 'when nil' do
35
+ let(:attribute_value) { nil }
36
+ it('is not valid') { refute_predicate subject, :valid? }
37
+ end
38
+
39
+ describe 'when false' do
40
+ let(:attribute_value) { false }
41
+ it('is valid') { assert_predicate subject, :valid? }
42
+ end
43
+
44
+ describe 'when true' do
45
+ let(:attribute_value) { true }
46
+ it('is valid') { assert_predicate subject, :valid? }
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,55 @@
1
+ require_relative '../../../../spec_helper'
2
+ require 'virtus'
3
+ require 'aequitas'
4
+ require 'aequitas/virtus'
5
+
6
+ describe Aequitas::Virtus::ClassMethodOverrides do
7
+ let(:class_under_test) do
8
+ Class.new do
9
+ include Virtus
10
+ include Aequitas
11
+
12
+ attribute :validated_attribute, String, :format => :email_address
13
+
14
+ self
15
+ end
16
+ end
17
+
18
+ describe '.validation_rules' do
19
+ it 'includes a Rule::Format::Regexp for :validated_attribute' do
20
+ attribute_rules = class_under_test.validation_rules[:validated_attribute]
21
+ refute_predicate attribute_rules, :empty?
22
+ assert_instance_of Aequitas::Rule::Format::Regexp, attribute_rules.first
23
+ end
24
+ end
25
+
26
+ describe '#valid?' do
27
+ subject { class_under_test.new(:validated_attribute => attribute_value) }
28
+
29
+ describe 'when empty string' do
30
+ let(:attribute_value) { '' }
31
+ it('is not valid') do
32
+ skip 'assess default skip condition'
33
+ refute_predicate subject, :valid?
34
+ end
35
+ end
36
+
37
+ describe 'when nil' do
38
+ let(:attribute_value) { nil }
39
+ it('is not valid') do
40
+ skip 'assess default skip condition'
41
+ refute_predicate subject, :valid?
42
+ end
43
+ end
44
+
45
+ describe 'when a string that looks like an email address' do
46
+ let(:attribute_value) { 'address@domain.tld' }
47
+ it('is valid') { assert_predicate subject, :valid? }
48
+ end
49
+
50
+ describe "when a string that doesn't look like an email address" do
51
+ let(:attribute_value) { 'quux' }
52
+ it('is not valid') { refute_predicate subject, :valid? }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ require_relative '../../../../spec_helper'
2
+ require 'virtus'
3
+ require 'aequitas'
4
+ require 'aequitas/virtus'
5
+
6
+ describe Aequitas::Virtus::ClassMethodOverrides do
7
+ let(:class_under_test) do
8
+ Class.new do
9
+ include Virtus
10
+ include Aequitas
11
+
12
+ attribute :validated_attribute, String, :format => /a\.b\.c/
13
+
14
+ self
15
+ end
16
+ end
17
+
18
+ describe '.validation_rules' do
19
+ it 'includes a Rule::Format::Regexp for :validated_attribute' do
20
+ attribute_rules = class_under_test.validation_rules[:validated_attribute]
21
+ refute_predicate attribute_rules, :empty?
22
+ assert_instance_of Aequitas::Rule::Format::Regexp, attribute_rules.first
23
+ end
24
+ end
25
+
26
+ describe '#valid?' do
27
+ subject { class_under_test.new(:validated_attribute => attribute_value) }
28
+
29
+ describe 'when empty string' do
30
+ let(:attribute_value) { '' }
31
+ it('is not valid') do
32
+ skip 'default skip condition'
33
+ refute_predicate subject, :valid?
34
+ end
35
+ end
36
+
37
+ describe 'when nil' do
38
+ let(:attribute_value) { nil }
39
+ it('is not valid') do
40
+ skip 'default skip condition'
41
+ refute_predicate subject, :valid?
42
+ end
43
+ end
44
+
45
+ describe 'when a string of the expected format' do
46
+ let(:attribute_value) { 'a.b.c' }
47
+ it('is valid') { assert_predicate subject, :valid? }
48
+ end
49
+
50
+ describe 'when a string not of the expected format' do
51
+ let(:attribute_value) { 'quux' }
52
+ it('is not valid') { refute_predicate subject, :valid? }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ require_relative '../../../../spec_helper'
2
+ require 'virtus'
3
+ require 'aequitas'
4
+ require 'aequitas/virtus'
5
+
6
+ describe Aequitas::Virtus::ClassMethodOverrides do
7
+ let(:class_under_test) do
8
+ Class.new do
9
+ include Virtus
10
+ include Aequitas
11
+
12
+ attribute :validated_attribute, String, :format => :url
13
+
14
+ self
15
+ end
16
+ end
17
+
18
+ describe '.validation_rules' do
19
+ it 'includes a Rule::Format::Regexp for :validated_attribute' do
20
+ attribute_rules = class_under_test.validation_rules[:validated_attribute]
21
+ refute_predicate attribute_rules, :empty?
22
+ assert_instance_of Aequitas::Rule::Format::Regexp, attribute_rules.first
23
+ end
24
+ end
25
+
26
+ describe '#valid?' do
27
+ subject { class_under_test.new(:validated_attribute => attribute_value) }
28
+
29
+ describe 'when empty string' do
30
+ let(:attribute_value) { '' }
31
+ it('is not valid') do
32
+ skip 'assess default skip condition'
33
+ refute_predicate subject, :valid?
34
+ end
35
+ end
36
+
37
+ describe 'when nil' do
38
+ let(:attribute_value) { nil }
39
+ it('is not valid') do
40
+ skip 'assess default skip condition'
41
+ refute_predicate subject, :valid?
42
+ end
43
+ end
44
+
45
+ describe 'when a string that looks like a URL' do
46
+ let(:attribute_value) { 'http://domain.tld' }
47
+ it('is valid') { assert_predicate subject, :valid? }
48
+ end
49
+
50
+ describe "when a string that doesn't look like a URL" do
51
+ let(:attribute_value) { 'quux' }
52
+ it('is not valid') { refute_predicate subject, :valid? }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,49 @@
1
+ require_relative '../../../../spec_helper'
2
+ require 'virtus'
3
+ require 'aequitas'
4
+ require 'aequitas/virtus'
5
+
6
+ describe Aequitas::Virtus::ClassMethodOverrides do
7
+ let(:class_under_test) do
8
+ Class.new do
9
+ include Virtus
10
+ include Aequitas
11
+
12
+ attribute :validated_attribute, String, :length => 3
13
+
14
+ self
15
+ end
16
+ end
17
+
18
+ describe '.validation_rules' do
19
+ it 'includes a Rule::Length::Range for :boolean_with_presence' do
20
+ attribute_rules = class_under_test.validation_rules[:validated_attribute]
21
+ refute_predicate attribute_rules, :empty?
22
+ assert_instance_of Aequitas::Rule::Length::Equal, attribute_rules.first
23
+ end
24
+ end
25
+
26
+ describe '#valid?' do
27
+ subject { class_under_test.new(:validated_attribute => attribute_value) }
28
+
29
+ describe 'when empty string' do
30
+ let(:attribute_value) { '' }
31
+ it('is not valid') { refute_predicate subject, :valid? }
32
+ end
33
+
34
+ describe 'when nil' do
35
+ let(:attribute_value) { nil }
36
+ it('is not valid') { refute_predicate subject, :valid? }
37
+ end
38
+
39
+ describe 'when a string of length equal to the expected' do
40
+ let(:attribute_value) { 'foo' }
41
+ it('is valid') { assert_predicate subject, :valid? }
42
+ end
43
+
44
+ describe 'when a string of length not equal to the expected' do
45
+ let(:attribute_value) { 'quux' }
46
+ it('is not valid') { refute_predicate subject, :valid? }
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ require_relative '../../../../spec_helper'
2
+ require 'virtus'
3
+ require 'aequitas'
4
+ require 'aequitas/virtus'
5
+
6
+ describe Aequitas::Virtus::ClassMethodOverrides do
7
+ let(:class_under_test) do
8
+ Class.new do
9
+ include Virtus
10
+ include Aequitas
11
+
12
+ attribute :validated_attribute, String, :length => 1..3
13
+
14
+ self
15
+ end
16
+ end
17
+
18
+ describe '.validation_rules' do
19
+ it 'includes a Rule::Length::Range for :boolean_with_presence' do
20
+ attribute_rules = class_under_test.validation_rules[:validated_attribute]
21
+ refute_predicate attribute_rules, :empty?
22
+ assert_instance_of Aequitas::Rule::Length::Range, attribute_rules.first
23
+ end
24
+ end
25
+
26
+ describe '#valid?' do
27
+ subject { class_under_test.new(:validated_attribute => attribute_value) }
28
+
29
+ describe 'when empty string' do
30
+ let(:attribute_value) { '' }
31
+ it('is not valid') { refute_predicate subject, :valid? }
32
+ end
33
+
34
+ describe 'when nil' do
35
+ let(:attribute_value) { nil }
36
+ it('is not valid') { refute_predicate subject, :valid? }
37
+ end
38
+
39
+ describe 'when a string of length within the range' do
40
+ let(:attribute_value) { 'foo' }
41
+ it('is valid') { assert_predicate subject, :valid? }
42
+ end
43
+
44
+ describe 'when a string of length outside the range' do
45
+ let(:attribute_value) { 'quux' }
46
+ it('is not valid') { refute_predicate subject, :valid? }
47
+ end
48
+ end
49
+ end