Class: Apipie::Validator::HashValidator
Instance Attribute Summary
Attributes included from DSL::Base
#api_params, #apipie_resource_descriptions
#param_description
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from DSL::Param
#param, #param_group, #property, #returns
Methods included from DSL::Base
#_apipie_eval_dsl
#==, #error, find, #format_description_value, #ignore_allow_blank?, inherited, #inspect, #inspected_fields, #param_name, #to_json, #to_s, #valid?
Constructor Details
#initialize(param_description, argument, param_group) ⇒ HashValidator
Returns a new instance of HashValidator.
323
324
325
326
327
328
329
330
331
332
333
334
335
|
# File 'lib/apipie/validator.rb', line 323
def initialize(param_description, argument, param_group)
super(param_description)
@proc = argument
@param_group = param_group
self.instance_exec(&@proc)
if param_description.options[:action_aware] && param_description.options[:required]
param_description.required = true
end
prepare_hash_params
end
|
Class Method Details
.build(param_description, argument, options, block) ⇒ Object
319
320
321
|
# File 'lib/apipie/validator.rb', line 319
def self.build(param_description, argument, options, block)
self.new(param_description, block, options[:param_group]) if block.is_a?(Proc) && block.arity <= 0 && argument == Hash
end
|
Instance Method Details
#_default_param_group_scope ⇒ Object
where the group definition should be looked up when no scope given. This is expected to return a controller.
379
380
381
|
# File 'lib/apipie/validator.rb', line 379
def _default_param_group_scope
@param_group && @param_group[:scope]
end
|
#description ⇒ Object
369
370
371
|
# File 'lib/apipie/validator.rb', line 369
def description
"Must be a Hash"
end
|
#expected_type ⇒ Object
373
374
375
|
# File 'lib/apipie/validator.rb', line 373
def expected_type
'hash'
end
|
#merge_with(other_validator) ⇒ Object
383
384
385
386
387
388
389
390
|
# File 'lib/apipie/validator.rb', line 383
def merge_with(other_validator)
if other_validator.is_a? HashValidator
@params_ordered = ParamDescription.unify(self.params_ordered + other_validator.params_ordered)
prepare_hash_params
else
super
end
end
|
#params_ordered ⇒ Object
337
338
339
340
341
342
343
344
|
# File 'lib/apipie/validator.rb', line 337
def params_ordered
@params_ordered ||= _apipie_dsl_data[:params].map do |args|
options = args.find { |arg| arg.is_a? Hash }
options[:parent] = self.param_description
options[:param_group] = @param_group
Apipie::ParamDescription.from_dsl_data(param_description.method_description, args)
end
end
|
#prepare_hash_params ⇒ Object
392
393
394
395
396
|
# File 'lib/apipie/validator.rb', line 392
def prepare_hash_params
@hash_params = params_ordered.reduce({}) do |h, param|
h.update(param.name.to_sym => param)
end
end
|
#process_value(value) ⇒ Object
359
360
361
362
363
364
365
366
367
|
# File 'lib/apipie/validator.rb', line 359
def process_value(value)
if @hash_params && value
return @hash_params.each_with_object({}) do |(key, param), api_params|
if value.key?(key)
api_params[param.as] = param.process_value(value[key])
end
end
end
end
|
#validate(value) ⇒ Object
346
347
348
349
350
351
352
353
354
355
356
357
|
# File 'lib/apipie/validator.rb', line 346
def validate(value)
return false if !value.is_a? Hash
@hash_params&.each do |k, p|
if Apipie.configuration.validate_presence?
raise ParamMissing.new(p) if p.required && !value.key?(k)
end
if Apipie.configuration.validate_value?
p.validate(value[k]) if value.key?(k)
end
end
return true
end
|