module Fend::Plugins::ExternalValidation::ParamMethods

Public Instance Methods

validate_with(validation) click to toggle source
# File lib/fend/plugins/external_validation.rb, line 63
def validate_with(validation)
  result   = validation.call(value)
  messages = result.class.ancestors.include?(Fend::Result) ? result.messages : result

  return if messages.is_a?(Hash) && flat? && invalid?

  @errors = if @errors.is_a?(Hash) && messages.is_a?(Hash)
              _deep_merge_messages(@errors, messages)
            elsif @errors.is_a?(Array) && messages.is_a?(Array)
              @errors + messages
            else
              messages
            end
end

Private Instance Methods

_deep_merge_messages(hash, other_hash) click to toggle source
# File lib/fend/plugins/external_validation.rb, line 80
def _deep_merge_messages(hash, other_hash)
  hash.merge(other_hash) do |_, old_val, new_val|
    if old_val.is_a?(Hash) && new_val.is_a?(Hash)
      deep_merge(old_val, new_val)
    elsif old_val.is_a?(Array) && new_val.is_a?(Array)
      old_val + new_val
    else
      new_val
    end
  end
end