class Themis::AR::UseNestedValidationOnMethod
Encapsulates {Themis::AR::BaseExtension#use_nested_validation_on} method
Public Class Methods
new(model, associations, nested_associations)
click to toggle source
@param [ActiveRecord::Base] model base mdoel @param [Array<Symbol>] associations associations on base model @param [Hash] nested_associations deep nested associations
# 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
Public Instance Methods
add_after_association_loaded_hooks()
click to toggle source
Add after_association_loaded hooks to associations so when association is loaded it would have same validation as base model.
# 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()
click to toggle source
Trigger calling use_nested_validation_on on associations and adds after_association_loaded hooks.
# 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()
click to toggle source
Iterate over associations and recursively call use_nested_validation_on
# 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