class ApipieDSL::Validator::HashValidator

Public Class Methods

build(param_description, argument, options, block) click to toggle source
# File lib/apipie_dsl/validator.rb, line 312
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
# File lib/apipie_dsl/validator.rb, line 305
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 343
def default_param_group_scope
  @param_group && @param_group[:scope]
end
description() click to toggle source
# File lib/apipie_dsl/validator.rb, line 335
def description
  'Must be a Hash'
end
expected_type() click to toggle source
# File lib/apipie_dsl/validator.rb, line 339
def expected_type
  'hash'
end
merge_with(other_validator) click to toggle source
# File lib/apipie_dsl/validator.rb, line 347
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 318
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 326
def validate(value)
  return false unless value.is_a?(Hash)

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

Private Instance Methods

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