Class: Themis::AR::ModelProxy
- Inherits:
-
Object
- Object
- Themis::AR::ModelProxy
- Defined in:
- lib/themis/ar/model_proxy.rb
Overview
It wraps a model class to override validation parameters and add(update) :if option. Also it provides some DSL syntax to include validation modules.
See where exactly it does its job:
class User
has_validation :soft do |validation|
validation.class # => ModelProxy
end
end
Instance Method Summary collapse
-
#args_with_condition(arguments) ⇒ Object
Build new arguments with modified :if option to make validation conditional.
-
#include(validation_module) ⇒ Object
Defines conditional validations from module.
-
#initialize(model_class, condition) ⇒ ModelProxy
constructor
A new instance of ModelProxy.
-
#method_missing(*args) ⇒ Object
Defines conditional validation by adding(updating) :if option to original method call.
Constructor Details
#initialize(model_class, condition) ⇒ ModelProxy
Returns a new instance of ModelProxy.
16 17 18 19 |
# File 'lib/themis/ar/model_proxy.rb', line 16 def initialize(model_class, condition) @model_class = model_class @condition = condition end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(*args) ⇒ Object
Defines conditional validation by adding(updating) :if option to original method call.
32 33 34 35 |
# File 'lib/themis/ar/model_proxy.rb', line 32 def method_missing(*args) cargs = args_with_condition(args) @model_class.send(*cargs) end |
Instance Method Details
#args_with_condition(arguments) ⇒ Object
Build new arguments with modified :if option to make validation conditional.
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/themis/ar/model_proxy.rb', line 41 def args_with_condition(arguments) # Ala deep duplication to not override original array. args = arguments.map { |v| v.is_a?(Symbol) ? v : v.dup } if args.last.is_a?(Hash) old_opts = args.pop args << build_opts(old_opts) else args << build_opts end args end |
#include(validation_module) ⇒ Object
Defines conditional validations from module.
23 24 25 26 27 28 |
# File 'lib/themis/ar/model_proxy.rb', line 23 def include(validation_module) validation_module.validators.each do |validator| cargs = args_with_condition(validator.args) @model_class.send(validator.name, *cargs) end end |