class ApipieDSL::Validator::HashValidator

Public Class Methods

build(param_description, argument, options, block) click to toggle source
# File lib/apipie_dsl/validator.rb, line 309
def self.build(param_description, argument, options, block)
  return if argument != Hash || !block.is_a?(Proc) || block.arity.positive?

  new(param_description, block, options[:param_group])
end
new(param_description, argument, param_group) click to toggle source
Calls superclass method ApipieDSL::Validator::BaseValidator.new
# File lib/apipie_dsl/validator.rb, line 302
def initialize(param_description, argument, param_group)
  super(param_description)
  @param_group = param_group
  instance_exec(&argument)
  prepare_hash_params
end

Public Instance Methods

default_param_group_scope() click to toggle source
# File lib/apipie_dsl/validator.rb, line 342
def default_param_group_scope
  @param_group && @param_group[:scope]
end
description() click to toggle source
# File lib/apipie_dsl/validator.rb, line 334
def description
  'Must be a Hash'
end
expected_type() click to toggle source
# File lib/apipie_dsl/validator.rb, line 338
def expected_type
  'hash'
end
merge_with(other_validator) click to toggle source
# File lib/apipie_dsl/validator.rb, line 346
def merge_with(other_validator)
  if other_validator.is_a?(HashValidator)
    @sub_params = ApipieDSL::ParameterDescription.unify(sub_params + other_validator.sub_params)
    prepare_hash_params
  else
    super
  end
end
sub_params() click to toggle source
# File lib/apipie_dsl/validator.rb, line 315
def sub_params
  @sub_params ||= dsl_data[:params].map do |args|
    options = args.find { |arg| arg.is_a?(Hash) }
    options[:parent] = param_description
    ApipieDSL::ParameterDescription.from_dsl_data(param_description.method_description, args)
  end
end
validate(value) click to toggle source
# File lib/apipie_dsl/validator.rb, line 323
def validate(value)
  return false unless value.is_a?(Hash)

  @hash_params&.each do |name, param|
    if ApipieDSL.configuration.validate_value?
      param.validate(value[name]) if value.key?(name)
    end
  end
  true
end

Private Instance Methods

prepare_hash_params() click to toggle source
# File lib/apipie_dsl/validator.rb, line 357
def prepare_hash_params
  @hash_params = sub_params.each_with_object({}) do |param, hash|
    hash.update(param.name.to_sym => param)
  end
end