Class: Themis::AR::UseNestedValidationOnMethod
- Inherits:
-
Object
- Object
- Themis::AR::UseNestedValidationOnMethod
- Defined in:
- lib/themis/ar/use_nested_validation_on_method.rb
Overview
Encapsulates BaseExtension#use_nested_validation_on method
Instance Method Summary collapse
-
#add_after_association_loaded_hooks ⇒ Object
Add after_association_loaded hooks to associations so when association is loaded it would have same validation as base model.
-
#execute ⇒ Object
Trigger calling use_nested_validation_on on associations and adds after_association_loaded hooks.
-
#initialize(model, associations, nested_associations) ⇒ UseNestedValidationOnMethod
constructor
A new instance of UseNestedValidationOnMethod.
-
#process_nested_validations ⇒ Object
Iterate over associations and recursively call #use_nested_validation_on.
Constructor Details
#initialize(model, associations, nested_associations) ⇒ UseNestedValidationOnMethod
Returns a new instance of UseNestedValidationOnMethod.
9 10 11 12 13 |
# File 'lib/themis/ar/use_nested_validation_on_method.rb', line 9 def initialize(model, associations, nested_associations) @model = model @associations = associations @nested_associations = nested_associations end |
Instance Method Details
#add_after_association_loaded_hooks ⇒ Object
Add after_association_loaded hooks to associations so when association is loaded it would have same validation as base model.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/themis/ar/use_nested_validation_on_method.rb', line 36 def add_after_association_loaded_hooks @associations.each do |association_name| @model.after_association_loaded(association_name) do |association| validation = association.owner.themis_validation target = association.target if validation if target.respond_to?(:each) target.each { |model| model.use_validation(validation) } elsif target.is_a? ActiveRecord::Base target.use_validation(validation) if validation end end end end end |
#execute ⇒ Object
Trigger calling use_nested_validation_on on associations and adds after_association_loaded hooks.
17 18 19 20 21 22 23 |
# File 'lib/themis/ar/use_nested_validation_on_method.rb', line 17 def execute # Set themis_default_nested for current model @model.themis_default_nested = @associations unless @associations.empty? process_nested_validations add_after_association_loaded_hooks end |
#process_nested_validations ⇒ Object
Iterate over associations and recursively call #use_nested_validation_on
26 27 28 29 30 31 32 |
# File 'lib/themis/ar/use_nested_validation_on_method.rb', line 26 def process_nested_validations @nested_associations.each do |association_name, nested| reflection = @model.reflect_on_association(association_name) model_class = reflection.class_name.constantize model_class.use_nested_validation_on(nested) end end |