dm-validations 1.1.0 → 1.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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