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.
Files changed (44) hide show
  1. data/Gemfile +8 -8
  2. data/Rakefile +2 -2
  3. data/VERSION +1 -1
  4. data/dm-validations.gemspec +29 -139
  5. data/lib/dm-validations.rb +51 -103
  6. data/lib/dm-validations/auto_validate.rb +104 -61
  7. data/lib/dm-validations/context.rb +66 -0
  8. data/lib/dm-validations/contextual_validators.rb +164 -53
  9. data/lib/dm-validations/formats/email.rb +41 -23
  10. data/lib/dm-validations/formats/url.rb +6 -1
  11. data/lib/dm-validations/support/object.rb +13 -0
  12. data/lib/dm-validations/validation_errors.rb +27 -19
  13. data/lib/dm-validations/validators/absent_field_validator.rb +11 -11
  14. data/lib/dm-validations/validators/acceptance_validator.rb +15 -13
  15. data/lib/dm-validations/validators/block_validator.rb +12 -11
  16. data/lib/dm-validations/validators/confirmation_validator.rb +23 -16
  17. data/lib/dm-validations/validators/format_validator.rb +45 -23
  18. data/lib/dm-validations/validators/generic_validator.rb +85 -38
  19. data/lib/dm-validations/validators/length_validator.rb +61 -26
  20. data/lib/dm-validations/validators/method_validator.rb +13 -17
  21. data/lib/dm-validations/validators/numeric_validator.rb +35 -35
  22. data/lib/dm-validations/validators/primitive_validator.rb +11 -12
  23. data/lib/dm-validations/validators/required_field_validator.rb +11 -13
  24. data/lib/dm-validations/validators/uniqueness_validator.rb +15 -14
  25. data/lib/dm-validations/validators/within_validator.rb +30 -12
  26. data/spec/fixtures/bill_of_landing.rb +5 -0
  27. data/spec/fixtures/llama_spaceship.rb +15 -0
  28. data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +10 -0
  29. data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +8 -0
  30. data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +8 -0
  31. data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +6 -2
  32. data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +6 -0
  33. data/spec/integration/datamapper_models/association_validation_spec.rb +5 -2
  34. data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
  35. data/spec/integration/format_validator/email_format_validator_spec.rb +13 -5
  36. data/spec/integration/format_validator/url_format_validator_spec.rb +28 -2
  37. data/spec/integration/required_field_validator/association_spec.rb +5 -1
  38. data/spec/public/resource_spec.rb +2 -2
  39. data/spec/spec_helper.rb +1 -1
  40. data/spec/unit/contextual_validators/emptiness_spec.rb +10 -10
  41. data/spec/unit/contextual_validators/execution_spec.rb +4 -4
  42. data/spec/unit/validators/within_validator_spec.rb +23 -0
  43. metadata +81 -146
  44. 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