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.
- data/.gitignore +4 -0
- data/.rvmrc +1 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.rdoc +125 -0
- data/Rakefile +25 -0
- data/VERSION +1 -0
- data/aequitas.gemspec +20 -0
- data/lib/aequitas.rb +80 -0
- data/lib/aequitas/class_methods.rb +26 -0
- data/lib/aequitas/context.rb +53 -0
- data/lib/aequitas/contextual_rule_set.rb +221 -0
- data/lib/aequitas/exceptions.rb +10 -0
- data/lib/aequitas/macros.rb +466 -0
- data/lib/aequitas/message_transformer.rb +127 -0
- data/lib/aequitas/rule.rb +153 -0
- data/lib/aequitas/rule/absence.rb +14 -0
- data/lib/aequitas/rule/absence/blank.rb +21 -0
- data/lib/aequitas/rule/absence/nil.rb +21 -0
- data/lib/aequitas/rule/acceptance.rb +36 -0
- data/lib/aequitas/rule/block.rb +33 -0
- data/lib/aequitas/rule/confirmation.rb +41 -0
- data/lib/aequitas/rule/format.rb +81 -0
- data/lib/aequitas/rule/format/proc.rb +28 -0
- data/lib/aequitas/rule/format/regexp.rb +44 -0
- data/lib/aequitas/rule/formats/email.rb +52 -0
- data/lib/aequitas/rule/formats/url.rb +14 -0
- data/lib/aequitas/rule/guard.rb +51 -0
- data/lib/aequitas/rule/length.rb +87 -0
- data/lib/aequitas/rule/length/equal.rb +46 -0
- data/lib/aequitas/rule/length/maximum.rb +46 -0
- data/lib/aequitas/rule/length/minimum.rb +46 -0
- data/lib/aequitas/rule/length/range.rb +46 -0
- data/lib/aequitas/rule/method.rb +31 -0
- data/lib/aequitas/rule/numericalness.rb +85 -0
- data/lib/aequitas/rule/numericalness/equal.rb +30 -0
- data/lib/aequitas/rule/numericalness/greater_than.rb +30 -0
- data/lib/aequitas/rule/numericalness/greater_than_or_equal.rb +30 -0
- data/lib/aequitas/rule/numericalness/integer.rb +37 -0
- data/lib/aequitas/rule/numericalness/less_than.rb +30 -0
- data/lib/aequitas/rule/numericalness/less_than_or_equal.rb +30 -0
- data/lib/aequitas/rule/numericalness/non_integer.rb +64 -0
- data/lib/aequitas/rule/numericalness/not_equal.rb +30 -0
- data/lib/aequitas/rule/presence.rb +14 -0
- data/lib/aequitas/rule/presence/not_blank.rb +21 -0
- data/lib/aequitas/rule/presence/not_nil.rb +21 -0
- data/lib/aequitas/rule/primitive_type.rb +28 -0
- data/lib/aequitas/rule/skip_condition.rb +104 -0
- data/lib/aequitas/rule/within.rb +28 -0
- data/lib/aequitas/rule/within/range.rb +53 -0
- data/lib/aequitas/rule/within/range/bounded.rb +25 -0
- data/lib/aequitas/rule/within/range/unbounded_begin.rb +25 -0
- data/lib/aequitas/rule/within/range/unbounded_end.rb +25 -0
- data/lib/aequitas/rule/within/set.rb +39 -0
- data/lib/aequitas/rule_set.rb +80 -0
- data/lib/aequitas/support/blank.rb +22 -0
- data/lib/aequitas/support/equalizable.rb +113 -0
- data/lib/aequitas/support/ordered_hash.rb +438 -0
- data/lib/aequitas/version.rb +5 -0
- data/lib/aequitas/violation.rb +116 -0
- data/lib/aequitas/violation_set.rb +123 -0
- data/lib/aequitas/virtus.rb +29 -0
- data/lib/aequitas/virtus/inline_attribute_rule_extractor.rb +41 -0
- data/lib/aequitas/virtus/inline_attribute_rule_extractor/boolean.rb +17 -0
- data/lib/aequitas/virtus/inline_attribute_rule_extractor/object.rb +25 -0
- data/lib/aequitas/virtus/inline_attribute_rule_extractor/string.rb +27 -0
- data/spec/integration/aequitas/macros/validates_absence_of_spec.rb +19 -0
- data/spec/integration/aequitas/macros/validates_acceptance_of_spec.rb +19 -0
- data/spec/integration/aequitas/macros/validates_confirmation_of_spec.rb +25 -0
- data/spec/integration/aequitas/macros/validates_format_of_spec.rb +87 -0
- data/spec/integration/aequitas/macros/validates_length_of.rb +77 -0
- data/spec/integration/aequitas/macros/validates_numericalness_of_spec.rb +221 -0
- data/spec/integration/aequitas/macros/validates_presence_of_spec.rb +19 -0
- data/spec/integration/aequitas/macros/validates_with_block.rb +23 -0
- data/spec/integration/aequitas/macros/validates_with_method.rb +19 -0
- data/spec/integration/aequitas/macros/validates_within.rb +87 -0
- data/spec/integration/shared/macros/integration_spec.rb +67 -0
- data/spec/integration/virtus/boolean/presence_spec.rb +49 -0
- data/spec/integration/virtus/string/format/email_address_spec.rb +55 -0
- data/spec/integration/virtus/string/format/regexp_spec.rb +55 -0
- data/spec/integration/virtus/string/format/url_spec.rb +55 -0
- data/spec/integration/virtus/string/length/equal_spec.rb +49 -0
- data/spec/integration/virtus/string/length/range_spec.rb +49 -0
- data/spec/integration/virtus/string/presence_spec.rb +49 -0
- data/spec/rcov.opts +6 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/suite.rb +5 -0
- data/spec/unit/aequitas/rule/absence/blank_spec.rb +45 -0
- data/spec/unit/aequitas/rule/acceptance_spec.rb +71 -0
- data/spec/unit/aequitas/rule/confirmation_spec.rb +80 -0
- data/spec/unit/aequitas/rule/guard_spec.rb +120 -0
- data/spec/unit/aequitas/rule/skip_condition_spec.rb +170 -0
- data/spec/unit/aequitas/rule_spec.rb +40 -0
- data/spec/unit/aequitas/support/blank_spec.rb +83 -0
- data/spec/unit/aequitas/support/equalizable/equalizer_spec.rb +21 -0
- data/spec/unit/aequitas/support/equalizable_spec.rb +67 -0
- data/spec/unit/aequitas/violation_set_spec.rb +154 -0
- data/spec_legacy/fixtures/barcode.rb +40 -0
- data/spec_legacy/fixtures/basketball_court.rb +58 -0
- data/spec_legacy/fixtures/basketball_player.rb +34 -0
- data/spec_legacy/fixtures/beta_tester_account.rb +33 -0
- data/spec_legacy/fixtures/bill_of_landing.rb +47 -0
- data/spec_legacy/fixtures/boat_dock.rb +26 -0
- data/spec_legacy/fixtures/city.rb +24 -0
- data/spec_legacy/fixtures/company.rb +93 -0
- data/spec_legacy/fixtures/corporate_world.rb +39 -0
- data/spec_legacy/fixtures/country.rb +24 -0
- data/spec_legacy/fixtures/ethernet_frame.rb +56 -0
- data/spec_legacy/fixtures/event.rb +44 -0
- data/spec_legacy/fixtures/g3_concert.rb +57 -0
- data/spec_legacy/fixtures/jabberwock.rb +27 -0
- data/spec_legacy/fixtures/kayak.rb +28 -0
- data/spec_legacy/fixtures/lernean_hydra.rb +39 -0
- data/spec_legacy/fixtures/llama_spaceship.rb +15 -0
- data/spec_legacy/fixtures/mathematical_function.rb +34 -0
- data/spec_legacy/fixtures/memory_object.rb +30 -0
- data/spec_legacy/fixtures/mittelschnauzer.rb +39 -0
- data/spec_legacy/fixtures/motor_launch.rb +21 -0
- data/spec_legacy/fixtures/multibyte.rb +16 -0
- data/spec_legacy/fixtures/page.rb +32 -0
- data/spec_legacy/fixtures/phone_number.rb +28 -0
- data/spec_legacy/fixtures/pirogue.rb +28 -0
- data/spec_legacy/fixtures/programming_language.rb +83 -0
- data/spec_legacy/fixtures/reservation.rb +38 -0
- data/spec_legacy/fixtures/scm_operation.rb +56 -0
- data/spec_legacy/fixtures/sms_message.rb +22 -0
- data/spec_legacy/fixtures/udp_packet.rb +49 -0
- data/spec_legacy/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
- data/spec_legacy/integration/absent_field_validator/spec_helper.rb +7 -0
- data/spec_legacy/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
- data/spec_legacy/integration/acceptance_validator/spec_helper.rb +7 -0
- data/spec_legacy/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
- data/spec_legacy/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
- data/spec_legacy/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
- data/spec_legacy/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
- data/spec_legacy/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
- data/spec_legacy/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
- data/spec_legacy/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
- data/spec_legacy/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
- data/spec_legacy/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
- data/spec_legacy/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +48 -0
- data/spec_legacy/integration/automatic_validation/inferred_within_validation_spec.rb +35 -0
- data/spec_legacy/integration/automatic_validation/spec_helper.rb +57 -0
- data/spec_legacy/integration/block_validator/block_validator_spec.rb +32 -0
- data/spec_legacy/integration/block_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/conditional_validation/if_condition_spec.rb +63 -0
- data/spec_legacy/integration/conditional_validation/spec_helper.rb +5 -0
- data/spec_legacy/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
- data/spec_legacy/integration/confirmation_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/datamapper_models/association_validation_spec.rb +29 -0
- data/spec_legacy/integration/datamapper_models/inheritance_spec.rb +82 -0
- data/spec_legacy/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
- data/spec_legacy/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
- data/spec_legacy/integration/duplicated_validations/spec_helper.rb +5 -0
- data/spec_legacy/integration/format_validator/email_format_validator_spec.rb +139 -0
- data/spec_legacy/integration/format_validator/format_validator_spec.rb +64 -0
- data/spec_legacy/integration/format_validator/regexp_validator_spec.rb +33 -0
- data/spec_legacy/integration/format_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/format_validator/url_format_validator_spec.rb +93 -0
- data/spec_legacy/integration/length_validator/default_value_spec.rb +14 -0
- data/spec_legacy/integration/length_validator/equality_spec.rb +87 -0
- data/spec_legacy/integration/length_validator/error_message_spec.rb +22 -0
- data/spec_legacy/integration/length_validator/maximum_spec.rb +49 -0
- data/spec_legacy/integration/length_validator/minimum_spec.rb +54 -0
- data/spec_legacy/integration/length_validator/range_spec.rb +87 -0
- data/spec_legacy/integration/length_validator/spec_helper.rb +7 -0
- data/spec_legacy/integration/method_validator/method_validator_spec.rb +242 -0
- data/spec_legacy/integration/method_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
- data/spec_legacy/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
- data/spec_legacy/integration/numeric_validator/float_type_spec.rb +90 -0
- data/spec_legacy/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
- data/spec_legacy/integration/numeric_validator/gte_with_float_type_spec.rb +37 -0
- data/spec_legacy/integration/numeric_validator/integer_only_true_spec.rb +91 -0
- data/spec_legacy/integration/numeric_validator/integer_type_spec.rb +86 -0
- data/spec_legacy/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
- data/spec_legacy/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
- data/spec_legacy/integration/numeric_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/primitive_validator/primitive_validator_spec.rb +92 -0
- data/spec_legacy/integration/primitive_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
- data/spec_legacy/integration/required_field_validator/association_spec.rb +69 -0
- data/spec_legacy/integration/required_field_validator/boolean_type_value_spec.rb +164 -0
- data/spec_legacy/integration/required_field_validator/date_type_value_spec.rb +127 -0
- data/spec_legacy/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
- data/spec_legacy/integration/required_field_validator/float_type_value_spec.rb +131 -0
- data/spec_legacy/integration/required_field_validator/integer_type_value_spec.rb +99 -0
- data/spec_legacy/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
- data/spec_legacy/integration/required_field_validator/shared_examples.rb +26 -0
- data/spec_legacy/integration/required_field_validator/spec_helper.rb +7 -0
- data/spec_legacy/integration/required_field_validator/string_type_value_spec.rb +167 -0
- data/spec_legacy/integration/required_field_validator/text_type_value_spec.rb +49 -0
- data/spec_legacy/integration/shared/default_validation_context.rb +13 -0
- data/spec_legacy/integration/shared/valid_and_invalid_model.rb +35 -0
- data/spec_legacy/integration/uniqueness_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
- data/spec_legacy/integration/within_validator/spec_helper.rb +5 -0
- data/spec_legacy/integration/within_validator/within_validator_spec.rb +168 -0
- data/spec_legacy/public/resource_spec.rb +105 -0
- data/spec_legacy/spec.opts +4 -0
- data/spec_legacy/spec_helper.rb +29 -0
- data/spec_legacy/unit/contextual_validators/emptiness_spec.rb +50 -0
- data/spec_legacy/unit/contextual_validators/execution_spec.rb +48 -0
- data/spec_legacy/unit/contextual_validators/spec_helper.rb +37 -0
- data/spec_legacy/unit/generic_validator/equality_operator_spec.rb +26 -0
- data/spec_legacy/unit/generic_validator/optional_spec.rb +54 -0
- data/spec_legacy/unit/validators/within_validator_spec.rb +23 -0
- data/spec_legacy/unit/violation_set/adding_spec.rb +54 -0
- data/spec_legacy/unit/violation_set/emptiness_spec.rb +38 -0
- data/spec_legacy/unit/violation_set/enumerable_spec.rb +32 -0
- data/spec_legacy/unit/violation_set/reading_spec.rb +35 -0
- data/spec_legacy/unit/violation_set/respond_to_spec.rb +15 -0
- data/tasks/spec.rake +38 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +302 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require 'aequitas/rule'
|
|
3
|
+
|
|
4
|
+
module Aequitas
|
|
5
|
+
describe Rule do
|
|
6
|
+
let(:rule) { Rule.new(attribute_name, options) }
|
|
7
|
+
let(:attribute_name) { :foo }
|
|
8
|
+
let(:options) { Hash.new }
|
|
9
|
+
|
|
10
|
+
describe '#initialize' do
|
|
11
|
+
it 'sets #attribute_name to the first arg' do
|
|
12
|
+
attribute_name = :foo
|
|
13
|
+
assert_same attribute_name, Rule.new(attribute_name).attribute_name
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'sets #custom_message to the :message option' do
|
|
17
|
+
message = 'foo'
|
|
18
|
+
assert_same message, Rule.new(:bar, message: message).custom_message
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'initializes #guard with the :if and :unless options' do
|
|
22
|
+
expected_guard = Rule::Guard.new(if: :a, unless: :b)
|
|
23
|
+
assert_equal expected_guard, Rule.new(:bar, if: :a, unless: :b).guard
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '#validate' do
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#execute?' do
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe '#skip?' do
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require_relative '../../../spec_helper'
|
|
2
|
+
require 'aequitas/support/blank'
|
|
3
|
+
|
|
4
|
+
module Aequitas
|
|
5
|
+
describe '.blank?' do
|
|
6
|
+
it 'returns true when testing nil' do
|
|
7
|
+
assert_operator Aequitas, :blank?, nil
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it 'returns true when testing false' do
|
|
11
|
+
assert_operator Aequitas, :blank?, false
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'returns false when testing a Numeric' do
|
|
15
|
+
refute_operator Aequitas, :blank?, 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'returns false when testing true' do
|
|
19
|
+
refute_operator Aequitas, :blank?, true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'returns true when testing an empty Hash' do
|
|
23
|
+
assert_operator Aequitas, :blank?, {}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'returns true when testing an empty Array' do
|
|
27
|
+
assert_operator Aequitas, :blank?, []
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns false when testing an non-empty Hash' do
|
|
31
|
+
refute_operator Aequitas, :blank?, { foo: :bar }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'returns false when testing an non-empty Array' do
|
|
35
|
+
refute_operator Aequitas, :blank?, [:foo]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'returns true when testing an empty String' do
|
|
39
|
+
assert_operator Aequitas, :blank?, ''
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'returns true when testing a String with only whitespace' do
|
|
43
|
+
assert_operator Aequitas, :blank?, "\n"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'returns false when testing a non-empty String' do
|
|
47
|
+
refute_operator Aequitas, :blank?, 'target'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'returns true when #nil? is true for the argument' do
|
|
51
|
+
target = MiniTest::Mock.new
|
|
52
|
+
target.expect(:nil?, true)
|
|
53
|
+
assert_operator Aequitas, :blank?, target
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'returns false when #nil? is false for the argument' do
|
|
57
|
+
target = MiniTest::Mock.new
|
|
58
|
+
target.expect(:nil?, false)
|
|
59
|
+
refute_operator Aequitas, :blank?, target
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'returns false when #nil? is false and the argument does not respond to #empty?' do
|
|
63
|
+
target = MiniTest::Mock.new
|
|
64
|
+
target.expect(:nil?, false)
|
|
65
|
+
refute_operator Aequitas, :blank?, target
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'returns false when #nil? is false and the argument is not empty' do
|
|
69
|
+
target = MiniTest::Mock.new
|
|
70
|
+
target.expect(:nil?, false)
|
|
71
|
+
target.expect(:empty?, false)
|
|
72
|
+
refute_operator Aequitas, :blank?, target
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'returns true when #nil? is false and the argument is empty' do
|
|
76
|
+
target = MiniTest::Mock.new
|
|
77
|
+
target.expect(:nil?, false)
|
|
78
|
+
target.expect(:empty?, true)
|
|
79
|
+
assert_operator Aequitas, :blank?, target
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require_relative '../../../../spec_helper'
|
|
2
|
+
require 'aequitas/support/equalizable'
|
|
3
|
+
|
|
4
|
+
module Aequitas
|
|
5
|
+
describe Equalizable::Equalizer do
|
|
6
|
+
let(:equalizer) { Equalizable::Equalizer.new(keys) }
|
|
7
|
+
let(:keys) { [:a, :b, :c] }
|
|
8
|
+
|
|
9
|
+
describe '#initialize' do
|
|
10
|
+
it "doesn't raise" do
|
|
11
|
+
assert_kind_of Equalizable::Equalizer, equalizer
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe '#keys' do
|
|
16
|
+
it 'returns the values that the Equalizer was initialized with' do
|
|
17
|
+
assert_equal [:a, :b, :c], equalizer.keys
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require_relative '../../../spec_helper'
|
|
2
|
+
require 'aequitas/support/equalizable'
|
|
3
|
+
|
|
4
|
+
module Aequitas
|
|
5
|
+
describe Equalizable do
|
|
6
|
+
let(:equalizable_test_class) do
|
|
7
|
+
Class.new do
|
|
8
|
+
extend Equalizable
|
|
9
|
+
|
|
10
|
+
equalize_on :foo, :bar
|
|
11
|
+
|
|
12
|
+
attr_reader :foo, :bar, :baz
|
|
13
|
+
|
|
14
|
+
def initialize(foo, bar, baz)
|
|
15
|
+
@foo, @bar, @baz = foo, bar, baz
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe '.equalizer' do
|
|
21
|
+
it 'returns the Equalizer module for the class' do
|
|
22
|
+
assert_instance_of Equalizable::Equalizer,
|
|
23
|
+
equalizable_test_class.equalizer
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '.equalizer.keys' do
|
|
28
|
+
it 'returns the keys that the class is equalized on' do
|
|
29
|
+
assert_equal [:foo, :bar], equalizable_test_class.equalizer.keys
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe 'when all equalized attributes are the same' do
|
|
34
|
+
let(:first) { equalizable_test_class.new(:a, :b, :c) }
|
|
35
|
+
let(:second) { equalizable_test_class.new(:a, :b, :d) }
|
|
36
|
+
|
|
37
|
+
describe '#eql?' do
|
|
38
|
+
it 'returns true' do
|
|
39
|
+
assert first.eql?(second), 'expected first.eql?(second) to be true'
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe '#==' do
|
|
44
|
+
it 'returns true' do
|
|
45
|
+
assert_equal first, second
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe 'when an equalized attribute is different' do
|
|
51
|
+
let(:first) { equalizable_test_class.new(:a, :b, :c) }
|
|
52
|
+
let(:second) { equalizable_test_class.new(:a, :c, :d) }
|
|
53
|
+
|
|
54
|
+
describe '#eql?' do
|
|
55
|
+
it 'returns false' do
|
|
56
|
+
refute first.eql?(second), 'expected first.eql?(second) to be false'
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '#==' do
|
|
61
|
+
it 'returns false' do
|
|
62
|
+
refute_equal first, second
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
require 'aequitas/violation_set'
|
|
3
|
+
|
|
4
|
+
module Aequitas
|
|
5
|
+
describe ViolationSet do
|
|
6
|
+
let(:object) { Object.new }
|
|
7
|
+
let(:violation_set) { ViolationSet.new(object) }
|
|
8
|
+
|
|
9
|
+
describe '#initialize' do
|
|
10
|
+
it 'does not raise any errors' do
|
|
11
|
+
# TODO: implement JUnit-style #assert_that and matchers:
|
|
12
|
+
# assert_that violation_set, is(:kind_of?, ViolationSet)
|
|
13
|
+
assert_kind_of ViolationSet, violation_set
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#on' do
|
|
18
|
+
let(:violation) { Violation.new(object, 'message', nil, :attribute) }
|
|
19
|
+
|
|
20
|
+
it 'returns nil when no error is present on the requested attribute' do
|
|
21
|
+
assert_nil violation_set.on(:foo)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe 'after adding a message via a symbol attribute name' do
|
|
25
|
+
it 'returns the message that was added (as a Violation)' do
|
|
26
|
+
violation_set.add(:attribute, 'message')
|
|
27
|
+
|
|
28
|
+
assert_equal [violation], violation_set.on(:attribute)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe 'after adding a message via a string attribute name' do
|
|
33
|
+
it 'returns the message that was added when accessed via symbol' do
|
|
34
|
+
skip 'convert to handling attribute names as strings'
|
|
35
|
+
violation_set.add('attribute', 'message')
|
|
36
|
+
|
|
37
|
+
assert_equal [violation], violation_set.on('attribute')
|
|
38
|
+
# assert_equal [violation], violation_set.on(:attribute)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe '#add' do
|
|
44
|
+
let(:violation_1) { Violation.new(object, 'message 1', nil, :attribute) }
|
|
45
|
+
let(:violation_2) { Violation.new(object, 'message 2', nil, :attribute) }
|
|
46
|
+
|
|
47
|
+
it 'returns the receiver' do
|
|
48
|
+
# assert_that violation_set.add(:foo, 'message'), is(:equal?, violation_set)
|
|
49
|
+
assert_same violation_set, violation_set.add(:foo, 'message')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe 'after adding a single message' do
|
|
53
|
+
it 'is is accessible via #on' do
|
|
54
|
+
violation_set.add(violation_1.attribute_name, violation_1.custom_message)
|
|
55
|
+
|
|
56
|
+
assert_equal [violation_1], violation_set.on(violation_1.attribute_name)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe 'after adding a single Violation' do
|
|
61
|
+
it 'is is accessible via #on' do
|
|
62
|
+
violation_set.add(violation_1)
|
|
63
|
+
|
|
64
|
+
assert_equal [violation_1], violation_set.on(:attribute)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe 'after adding a second message' do
|
|
69
|
+
it 'returns the violations via #on in the order they were added' do
|
|
70
|
+
violation_set.add(violation_1.attribute_name, violation_1.custom_message)
|
|
71
|
+
violation_set.add(violation_2.attribute_name, violation_2.custom_message)
|
|
72
|
+
|
|
73
|
+
assert_equal [violation_1, violation_2], violation_set.on(:attribute)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe 'after adding the same message twice' do
|
|
78
|
+
it 'returns a single instance of that message via #on' do
|
|
79
|
+
violation_set.add(:attribute, 'message')
|
|
80
|
+
violation_set.add(:attribute, 'message')
|
|
81
|
+
|
|
82
|
+
assert_equal violation_set.on(:attribute), ['message']
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe 'after adding a second Violation' do
|
|
87
|
+
it 'returns the violations via #on in the order they were added' do
|
|
88
|
+
violation_set.add(violation_1)
|
|
89
|
+
violation_set.add(violation_2)
|
|
90
|
+
|
|
91
|
+
assert_equal [violation_1, violation_2], violation_set.on(:attribute)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe 'after adding an equivalent Violation twice' do
|
|
96
|
+
let(:violation_1) { Violation.new(object, 'message', nil, :attribute) }
|
|
97
|
+
let(:violation_2) { Violation.new(object, 'message', nil, :attribute) }
|
|
98
|
+
|
|
99
|
+
it 'returns a single instance of that message via #on' do
|
|
100
|
+
violation_set.add(violation_1)
|
|
101
|
+
violation_set.add(violation_2)
|
|
102
|
+
|
|
103
|
+
assert_equal [violation_1], violation_set.on(:attribute)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe '#empty?' do
|
|
109
|
+
it 'is initially true' do
|
|
110
|
+
# TODO: implement JUnit-style #assert_that and matchers
|
|
111
|
+
# assert_that violation_set, is(:empty?)
|
|
112
|
+
assert_predicate violation_set, :empty?
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
describe 'after calling #on' do
|
|
116
|
+
it 'is true' do
|
|
117
|
+
violation_set.on(:attribute)
|
|
118
|
+
assert_predicate violation_set, :empty?
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe 'after adding a message' do
|
|
123
|
+
it 'is false' do
|
|
124
|
+
violation_set.add(:attribute, 'message')
|
|
125
|
+
refute_predicate violation_set, :empty?
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
describe 'after adding a Violation' do
|
|
130
|
+
let(:violation) { Violation.new(object, 'message', nil, :attribute) }
|
|
131
|
+
|
|
132
|
+
it 'is false' do
|
|
133
|
+
violation_set.add(violation)
|
|
134
|
+
refute_predicate violation_set, :empty?
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
describe '#each' do
|
|
140
|
+
let(:violation_1) { Violation.new(object, 'message 1', nil, :attribute) }
|
|
141
|
+
let(:violation_2) { Violation.new(object, 'message 2', nil, :attribute) }
|
|
142
|
+
let(:violation_3) { Violation.new(object, 'another message', nil, :foo) }
|
|
143
|
+
|
|
144
|
+
it 'iterates over properties and yields error message arrays' do
|
|
145
|
+
violation_set.add(violation_1)
|
|
146
|
+
violation_set.add(violation_2)
|
|
147
|
+
violation_set.add(violation_3)
|
|
148
|
+
|
|
149
|
+
expected = [[violation_1, violation_2], [violation_3]]
|
|
150
|
+
assert_equal expected, violation_set.inject([]) { |mem, var| mem << var }
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Validation
|
|
3
|
+
module Fixtures
|
|
4
|
+
class Barcode
|
|
5
|
+
attr_accessor :valid_hook_call_count
|
|
6
|
+
|
|
7
|
+
#
|
|
8
|
+
# Behaviors
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
include DataMapper::Resource
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# Properties
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
without_auto_validations do
|
|
18
|
+
property :code, String, :key => true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#
|
|
22
|
+
# Validations
|
|
23
|
+
#
|
|
24
|
+
|
|
25
|
+
validates_length_of :code, :max => 10
|
|
26
|
+
|
|
27
|
+
def self.valid_instance
|
|
28
|
+
new(:code => "3600029145")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# measure the number of times #valid? is executed
|
|
32
|
+
before :valid? do
|
|
33
|
+
@valid_hook_call_count ||= 0
|
|
34
|
+
@valid_hook_call_count += 1
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end # Barcode
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
module Validation
|
|
5
|
+
module Fixtures
|
|
6
|
+
class BasketballCourt
|
|
7
|
+
#
|
|
8
|
+
# Behaviors
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
include DataMapper::Resource
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# Properties
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
property :id, Serial
|
|
18
|
+
|
|
19
|
+
without_auto_validations do
|
|
20
|
+
property :name, String
|
|
21
|
+
|
|
22
|
+
property :length, Float
|
|
23
|
+
property :width, Float
|
|
24
|
+
|
|
25
|
+
property :three_point_line_distance, Float
|
|
26
|
+
property :free_throw_line_distance, Float
|
|
27
|
+
property :rim_height, Float
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Validations
|
|
32
|
+
#
|
|
33
|
+
|
|
34
|
+
# obviously these are all metrics
|
|
35
|
+
validates_numericality_of :length, :gte => 15.0, :lte => 15.24
|
|
36
|
+
validates_numericality_of :width, :gte => 25.28, :lte => 28.65
|
|
37
|
+
|
|
38
|
+
# 3 pt line distance may use :gte and :lte, but for
|
|
39
|
+
# sake of spec example we make it up a little
|
|
40
|
+
validates_numericality_of :three_point_line_distance, :gt => 6.7, :lt => 7.24
|
|
41
|
+
validates_numericality_of :free_throw_line_distance, :equals => 4.57
|
|
42
|
+
validates_numericality_of :rim_height, :eq => 3.05
|
|
43
|
+
|
|
44
|
+
def self.valid_instance(overrides = {})
|
|
45
|
+
defaults = {
|
|
46
|
+
:length => 15.24,
|
|
47
|
+
:width => 28.65,
|
|
48
|
+
:free_throw_line_distance => 4.57,
|
|
49
|
+
:rim_height => 3.05,
|
|
50
|
+
:three_point_line_distance => 6.9
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
new(defaults.merge(overrides))
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end # Fixtures
|
|
57
|
+
end # Validations
|
|
58
|
+
end # DataMapper
|