Module: MultiModelWizard::DynamicValidation

Included in:
FormObject::Base
Defined in:
lib/multi_model_wizard/dynamic_validation.rb

Instance Method Summary collapse

Instance Method Details

#valid_attribute?(*attributes, model_instance:) ⇒ Boolean

Validates attributes using the original model and returns boolean for the given attributes

Returns:

  • (Boolean)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/multi_model_wizard/dynamic_validation.rb', line 9

def valid_attribute?(*attributes, model_instance:)
  model_instance.errors.clear

  attributes.flatten!
  attributes = attributes.first if attributes.first.is_a?(Hash)

  attributes.each do |attribute, validator_types|
    validators = model_instance.class.validators_on(attribute)

    if validator_types.present?
      validator_types = Array(validator_types)
      validators.select! { |validator| validator.kind.in?(validator_types) }
    end

    validators.each { |validator| validator.validate(model_instance) }
  end

  model_instance.errors.empty?
end

#validate_attribute_with_message(*attributes, model_instance:) ⇒ Object

Validates attributes using the original model and returns a boolean and a message for the given attributes



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/multi_model_wizard/dynamic_validation.rb', line 33

def validate_attribute_with_message( *attributes, model_instance:)
  model_instance.errors.clear

  attributes.flatten!
  attributes = attributes.first if attributes.first.is_a?(Hash)

  attributes.each do |attribute, value|
    validators = model_instance.class.ancestors.map { |x| x.try(:validators_on, attribute) }.compact.flatten

    validators.each { |validator| validator.validate(model_instance) }
  end

  OpenStruct.new(valid: model_instance.errors.empty?, messages: model_instance.errors.full_messages.uniq )
end