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,56 @@
|
|
|
1
|
+
#
|
|
2
|
+
# SCMs
|
|
3
|
+
#
|
|
4
|
+
# This example may look stupid (I am sure it is),
|
|
5
|
+
# but it is way better than foobars and easier to read/add cases
|
|
6
|
+
# compared to gardening examples because every software engineer has idea
|
|
7
|
+
# about SCMs and not every software engineer does gardening often.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
class ScmOperation
|
|
11
|
+
include DataMapper::Resource
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# Property
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
property :id, Serial
|
|
18
|
+
|
|
19
|
+
# operation name
|
|
20
|
+
property :name, String, :auto_validation => false
|
|
21
|
+
|
|
22
|
+
property :committer_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
|
|
23
|
+
property :author_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
|
|
24
|
+
property :network_connection, Boolean, :auto_validation => false
|
|
25
|
+
property :message, Text, :auto_validation => false
|
|
26
|
+
property :clean_working_copy, Boolean, :auto_validation => false
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# Validations
|
|
30
|
+
#
|
|
31
|
+
|
|
32
|
+
validates_presence_of :name
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class SubversionOperation < ScmOperation
|
|
36
|
+
#
|
|
37
|
+
# Validations
|
|
38
|
+
#
|
|
39
|
+
|
|
40
|
+
validates_presence_of :network_connection, :when => [:committing, :log_viewing]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class GitOperation < ScmOperation
|
|
44
|
+
#
|
|
45
|
+
# Validations
|
|
46
|
+
#
|
|
47
|
+
|
|
48
|
+
validates_presence_of :author_name, :committer_name, :when => :committing
|
|
49
|
+
|
|
50
|
+
validates_presence_of :message, :when => :committing
|
|
51
|
+
validates_presence_of :network_connection, :when => [:pushing, :pulling], :message => {
|
|
52
|
+
:pushing => "though git is advanced, it cannot push without network connectivity",
|
|
53
|
+
:pulling => "you must have network connectivity to pull from others"
|
|
54
|
+
}
|
|
55
|
+
validates_presence_of :clean_working_copy, :when => :pulling
|
|
56
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Validation
|
|
3
|
+
module Fixtures
|
|
4
|
+
|
|
5
|
+
class SmsMessage
|
|
6
|
+
#
|
|
7
|
+
# Behaviors
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
include DataMapper::Resource
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# Properties
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
property :id, Serial
|
|
17
|
+
property :body, Text, :length => (1..500)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
module Validation
|
|
5
|
+
module Fixtures
|
|
6
|
+
|
|
7
|
+
class UDPPacket
|
|
8
|
+
#
|
|
9
|
+
# Behaviors
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
include DataMapper::Resource
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Properties
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
property :id, Serial
|
|
19
|
+
|
|
20
|
+
property :source_port, Integer, :auto_validation => false
|
|
21
|
+
property :destination_port, Integer, :auto_validation => false
|
|
22
|
+
|
|
23
|
+
property :length, Integer, :auto_validation => false
|
|
24
|
+
property :checksum, String, :auto_validation => false
|
|
25
|
+
# consider that there are multiple algorithms
|
|
26
|
+
# available to the app, and it is allowed
|
|
27
|
+
# to be chosed
|
|
28
|
+
#
|
|
29
|
+
# yes, to some degree, this is a made up
|
|
30
|
+
# property ;)
|
|
31
|
+
property :checksum_algorithm, String, :auto_validation => false
|
|
32
|
+
property :data, Text, :auto_validation => false
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Volatile attributes
|
|
36
|
+
#
|
|
37
|
+
|
|
38
|
+
attr_accessor :underlying_ip_version
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Validations
|
|
42
|
+
#
|
|
43
|
+
|
|
44
|
+
validates_presence_of :checksum_algorithm, :checksum, :if => Proc.new { |packet| packet.underlying_ip_version == 6 }, :message => "Checksum is mandatory when used with IPv6"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end # Fixtures
|
|
48
|
+
end # Validations
|
|
49
|
+
end # DataMapper
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/absent_field_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::Kayak' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::Kayak.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@kayak = DataMapper::Validations::Fixtures::Kayak.new
|
|
9
|
+
@kayak.should be_valid_for_sale
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "with salesman being non blank" do
|
|
13
|
+
before :all do
|
|
14
|
+
@kayak.salesman = 'Joe'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "is invalid" do
|
|
18
|
+
@kayak.should_not be_valid_for_sale
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "has meaningful error message" do
|
|
22
|
+
@kayak.errors.on(:salesman).should == [ 'Salesman must be absent' ]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
describe "with salesman being nil" do
|
|
28
|
+
before :all do
|
|
29
|
+
@kayak.salesman = nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "is valid" do
|
|
33
|
+
@kayak.should be_valid_for_sale
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "has no error messages" do
|
|
37
|
+
@kayak.errors.on(:salesman).should be_nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
describe "with salesman being an empty string" do
|
|
43
|
+
before :all do
|
|
44
|
+
@kayak.salesman = ''
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "is valid" do
|
|
48
|
+
@kayak.should be_valid_for_sale
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "has no error messages" do
|
|
52
|
+
@kayak.errors.on(:salesman).should be_nil
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
describe "with salesman being a string of white spaces" do
|
|
58
|
+
before :all do
|
|
59
|
+
@kayak.salesman = ' '
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "is valid" do
|
|
63
|
+
@kayak.should be_valid_for_sale
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "has no error messages" do
|
|
67
|
+
@kayak.errors.on(:salesman).should be_nil
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
describe 'DataMapper::Validations::Fixtures::Pirogue' do
|
|
74
|
+
before :all do
|
|
75
|
+
DataMapper::Validations::Fixtures::Pirogue.auto_migrate!
|
|
76
|
+
|
|
77
|
+
@kayak = DataMapper::Validations::Fixtures::Pirogue.new
|
|
78
|
+
@kayak.should_not be_valid_for_sale
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "by default" do
|
|
82
|
+
it "is invalid" do
|
|
83
|
+
@kayak.should_not be_valid_for_sale
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "has meaningful error message" do
|
|
87
|
+
@kayak.errors.on(:salesman).should == [ 'Salesman must be absent' ]
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/acceptance_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BetaTesterAccount' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BetaTesterAccount.auto_migrate!
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@model = DataMapper::Validations::Fixtures::BetaTesterAccount.new(:user_agreement => true,
|
|
11
|
+
:newsletter_signup => nil,
|
|
12
|
+
:privacy_agreement => "accept")
|
|
13
|
+
@model.should be_valid
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "with a missing newsletter signup field" do
|
|
17
|
+
before do
|
|
18
|
+
@model.newsletter_signup = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "is perfectly valid" do
|
|
22
|
+
@model.should be_valid
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "with a blank newsletter signup field" do
|
|
27
|
+
before do
|
|
28
|
+
@model.newsletter_signup = ""
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "is NOT valid" do
|
|
32
|
+
@model.should_not be_valid
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "with a blank user agreement field" do
|
|
37
|
+
before do
|
|
38
|
+
@model.user_agreement = ""
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "is NOT valid" do
|
|
42
|
+
@model.should_not be_valid
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "with a nil user agreement field" do
|
|
47
|
+
before do
|
|
48
|
+
@model.user_agreement = nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "is NOT valid" do
|
|
52
|
+
@model.should_not be_valid
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "with user agreement field having value of 1 (as integer)" do
|
|
57
|
+
before do
|
|
58
|
+
@model.user_agreement = 1
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "is valid" do
|
|
62
|
+
@model.should be_valid
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe "with user agreement field having value of 1 (as a string)" do
|
|
67
|
+
before do
|
|
68
|
+
@model.user_agreement = "1"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "is valid" do
|
|
72
|
+
@model.should be_valid
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "with user agreement field having value of 'true' (as a string)" do
|
|
77
|
+
before do
|
|
78
|
+
@model.user_agreement = 'true'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "is valid" do
|
|
82
|
+
@model.should be_valid
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "with user agreement field having value of true (TrueClass instance)" do
|
|
87
|
+
before do
|
|
88
|
+
@model.user_agreement = true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "is valid" do
|
|
92
|
+
@model.should be_valid
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe "with user agreement field having value of 't' (The Lisp Way)" do
|
|
97
|
+
before do
|
|
98
|
+
@model.user_agreement = 't'
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "is valid" do
|
|
102
|
+
@model.should be_valid
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
describe "with user agreement field having value of 'f'" do
|
|
107
|
+
before do
|
|
108
|
+
@model.user_agreement = 'f'
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "is NOT valid" do
|
|
112
|
+
@model.should_not be_valid
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
describe "with user agreement field having value of false" do
|
|
117
|
+
before do
|
|
118
|
+
@model.user_agreement = false
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "is NOT valid" do
|
|
122
|
+
@model.should_not be_valid
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe "with privacy agreement field having value of 1" do
|
|
127
|
+
before do
|
|
128
|
+
@model.privacy_agreement = 1
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "is NOT valid" do
|
|
132
|
+
@model.should_not be_valid
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
describe "with privacy agreement field having value of true" do
|
|
137
|
+
before do
|
|
138
|
+
@model.privacy_agreement = true
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "is NOT valid" do
|
|
142
|
+
@model.should_not be_valid
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
describe "with privacy agreement field having value of '1'" do
|
|
147
|
+
before do
|
|
148
|
+
@model.privacy_agreement = '1'
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "is NOT valid" do
|
|
152
|
+
@model.should_not be_valid
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
describe "with privacy agreement field having value of 't'" do
|
|
157
|
+
before do
|
|
158
|
+
@model.privacy_agreement = 't'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "is NOT valid" do
|
|
162
|
+
@model.should_not be_valid
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
describe "with privacy agreement field having value of 'accept'" do
|
|
167
|
+
before do
|
|
168
|
+
@model.privacy_agreement = 'accept'
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it "is valid" do
|
|
172
|
+
@model.should be_valid
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
describe "with privacy agreement field having value of 'agreed'" do
|
|
177
|
+
before do
|
|
178
|
+
@model.privacy_agreement = 'agreed'
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "is valid" do
|
|
182
|
+
@model.should be_valid
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
describe "with privacy agreement field having value of 'ah, greed'" do
|
|
187
|
+
before do
|
|
188
|
+
@model.privacy_agreement = 'ah, greed'
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it "is NOT valid" do
|
|
192
|
+
# greed is invalid? can't be
|
|
193
|
+
@model.should_not be_valid
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
data/spec_legacy/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/automatic_validation/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'Inferred validations' do
|
|
5
|
+
it "allow overriding a single error message" do
|
|
6
|
+
custom_boat = Class.new do
|
|
7
|
+
include DataMapper::Resource
|
|
8
|
+
|
|
9
|
+
def self.name
|
|
10
|
+
'Boat'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
property :id, DataMapper::Property::Serial
|
|
14
|
+
property :name, String, :required => true, :message => "This boat must have name"
|
|
15
|
+
end
|
|
16
|
+
boat = custom_boat.new
|
|
17
|
+
boat.should_not be_valid
|
|
18
|
+
boat.errors.on(:name).should == [ 'This boat must have name' ]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should have correct error messages" do
|
|
22
|
+
custom_boat = Class.new do
|
|
23
|
+
include DataMapper::Resource
|
|
24
|
+
|
|
25
|
+
def self.name
|
|
26
|
+
'Boat'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
property :id, DataMapper::Property::Serial
|
|
30
|
+
property :name, String, :required => true, :length => 5..20, :format => /^[a-z]+$/,
|
|
31
|
+
:messages => {
|
|
32
|
+
:presence => "This boat must have name",
|
|
33
|
+
:length => "Name must have at least 4 and at most 20 chars",
|
|
34
|
+
:format => "Please use only small letters"
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
boat = custom_boat.new
|
|
39
|
+
boat.should_not be_valid
|
|
40
|
+
boat.errors.on(:name).should == [ 'This boat must have name' ]
|
|
41
|
+
|
|
42
|
+
boat.name = "%%"
|
|
43
|
+
boat.should_not be_valid
|
|
44
|
+
boat.errors.on(:name).should == [
|
|
45
|
+
'Name must have at least 4 and at most 20 chars',
|
|
46
|
+
'Please use only small letters',
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
boat.name = "%%asd"
|
|
50
|
+
boat.should_not be_valid
|
|
51
|
+
boat.errors.on(:name).should == [ 'Please use only small letters' ]
|
|
52
|
+
|
|
53
|
+
boat.name = "superboat"
|
|
54
|
+
boat.should be_valid
|
|
55
|
+
boat.errors.on(:name).should be_nil
|
|
56
|
+
end
|
|
57
|
+
end
|