dm-validations 1.1.0 → 1.2.0.rc1
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/Gemfile +8 -8
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/dm-validations.gemspec +29 -139
- data/lib/dm-validations.rb +51 -103
- data/lib/dm-validations/auto_validate.rb +104 -61
- data/lib/dm-validations/context.rb +66 -0
- data/lib/dm-validations/contextual_validators.rb +164 -53
- data/lib/dm-validations/formats/email.rb +41 -23
- data/lib/dm-validations/formats/url.rb +6 -1
- data/lib/dm-validations/support/object.rb +13 -0
- data/lib/dm-validations/validation_errors.rb +27 -19
- data/lib/dm-validations/validators/absent_field_validator.rb +11 -11
- data/lib/dm-validations/validators/acceptance_validator.rb +15 -13
- data/lib/dm-validations/validators/block_validator.rb +12 -11
- data/lib/dm-validations/validators/confirmation_validator.rb +23 -16
- data/lib/dm-validations/validators/format_validator.rb +45 -23
- data/lib/dm-validations/validators/generic_validator.rb +85 -38
- data/lib/dm-validations/validators/length_validator.rb +61 -26
- data/lib/dm-validations/validators/method_validator.rb +13 -17
- data/lib/dm-validations/validators/numeric_validator.rb +35 -35
- data/lib/dm-validations/validators/primitive_validator.rb +11 -12
- data/lib/dm-validations/validators/required_field_validator.rb +11 -13
- data/lib/dm-validations/validators/uniqueness_validator.rb +15 -14
- data/lib/dm-validations/validators/within_validator.rb +30 -12
- data/spec/fixtures/bill_of_landing.rb +5 -0
- data/spec/fixtures/llama_spaceship.rb +15 -0
- data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +10 -0
- data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +8 -0
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +8 -0
- data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +6 -2
- data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +6 -0
- data/spec/integration/datamapper_models/association_validation_spec.rb +5 -2
- data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
- data/spec/integration/format_validator/email_format_validator_spec.rb +13 -5
- data/spec/integration/format_validator/url_format_validator_spec.rb +28 -2
- data/spec/integration/required_field_validator/association_spec.rb +5 -1
- data/spec/public/resource_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/contextual_validators/emptiness_spec.rb +10 -10
- data/spec/unit/contextual_validators/execution_spec.rb +4 -4
- data/spec/unit/validators/within_validator_spec.rb +23 -0
- metadata +81 -146
- data/lib/dm-validations/support/context.rb +0 -93
@@ -1,93 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Validations
|
3
|
-
|
4
|
-
# Module with validation context functionality.
|
5
|
-
#
|
6
|
-
# Contexts are implemented using a simple array based
|
7
|
-
# stack that is thread local. The default context can be
|
8
|
-
# altered by overwriting default_validation_context or
|
9
|
-
# will default to :default
|
10
|
-
#
|
11
|
-
module Context
|
12
|
-
|
13
|
-
# TODO: document
|
14
|
-
# @api private
|
15
|
-
def default_validation_context
|
16
|
-
current_validation_context || :default
|
17
|
-
end
|
18
|
-
|
19
|
-
protected
|
20
|
-
|
21
|
-
# Pushes given context on top of context stack and yields
|
22
|
-
# given block, then pops the stack. During block execution
|
23
|
-
# contexts previously pushed onto the stack have no effect.
|
24
|
-
#
|
25
|
-
# @api private
|
26
|
-
def validation_context(context = default_validation_context)
|
27
|
-
assert_valid_context(context)
|
28
|
-
validation_context_stack << context
|
29
|
-
begin
|
30
|
-
yield
|
31
|
-
ensure
|
32
|
-
validation_context_stack.pop
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
# Initializes (if necessary) and returns current scope stack
|
39
|
-
# @api private
|
40
|
-
def validation_context_stack
|
41
|
-
Thread.current[:dm_validations_context_stack] ||= []
|
42
|
-
end
|
43
|
-
|
44
|
-
# Returns the current validation context or nil if none has been pushed
|
45
|
-
# @api private
|
46
|
-
def current_validation_context
|
47
|
-
context = validation_context_stack.last
|
48
|
-
valid_context?(context) ? context : :default
|
49
|
-
end
|
50
|
-
|
51
|
-
# Return the contexts for the model
|
52
|
-
#
|
53
|
-
# @return [Hash]
|
54
|
-
# the hash of contexts for the model
|
55
|
-
#
|
56
|
-
# @api private
|
57
|
-
def contexts
|
58
|
-
model.validators.contexts
|
59
|
-
end
|
60
|
-
|
61
|
-
# Test if the context is valid for the model
|
62
|
-
#
|
63
|
-
# @param [Symbol] context
|
64
|
-
# the context to test
|
65
|
-
#
|
66
|
-
# @return [Boolean]
|
67
|
-
# true if the context is valid for the model
|
68
|
-
#
|
69
|
-
# @api private
|
70
|
-
def valid_context?(context)
|
71
|
-
contexts.empty? || contexts.key?(context)
|
72
|
-
end
|
73
|
-
|
74
|
-
# Assert that the context is valid for this model
|
75
|
-
#
|
76
|
-
# @param [Symbol] context
|
77
|
-
# the context to test
|
78
|
-
#
|
79
|
-
# @raise [InvalidContextError]
|
80
|
-
# raised if the context is not valid for this model
|
81
|
-
#
|
82
|
-
# @api private
|
83
|
-
def assert_valid_context(context)
|
84
|
-
unless valid_context?(context)
|
85
|
-
raise InvalidContextError, "#{context} is an invalid context, known contexts are #{contexts.keys.inspect}"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
include Context
|
91
|
-
|
92
|
-
end
|
93
|
-
end
|