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
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  #error, find, inherited, #param_name, #to_json, #to_s, #valid?
  Constructor Details
  
    
  
  
    #initialize(param_description, argument, param_group)  ⇒ HashValidator 
  
  
  
  
    
Returns a new instance of HashValidator.
   
 
  
  
    | 
281
282
283
284
285
286
287
288
289
290
291
292
293 | # File 'lib/apipie/validator.rb', line 281
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 
  
  
  
  
    | 
277
278
279 | # File 'lib/apipie/validator.rb', line 277
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.
   
 
  
  
    | 
338
339
340 | # File 'lib/apipie/validator.rb', line 338
def _default_param_group_scope
  @param_group && @param_group[:scope]
end | 
 
    
      
  
  
    #description  ⇒ Object 
  
  
  
  
    | 
328
329
330 | # File 'lib/apipie/validator.rb', line 328
def description
  "Must be a Hash"
end | 
 
    
      
  
  
    #expected_type  ⇒ Object 
  
  
  
  
    | 
332
333
334 | # File 'lib/apipie/validator.rb', line 332
def expected_type
  'hash'
end | 
 
    
      
  
  
    #merge_with(other_validator)  ⇒ Object 
  
  
  
  
    | 
342
343
344
345
346
347
348
349 | # File 'lib/apipie/validator.rb', line 342
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 
  
  
  
  
    | 
295
296
297
298
299
300
301 | # File 'lib/apipie/validator.rb', line 295
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
    Apipie::ParamDescription.from_dsl_data(param_description.method_description, args)
  end
end | 
 
    
      
  
  
    #prepare_hash_params  ⇒ Object 
  
  
  
  
    | 
351
352
353
354
355 | # File 'lib/apipie/validator.rb', line 351
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 
  
  
  
  
    | 
318
319
320
321
322
323
324
325
326 | # File 'lib/apipie/validator.rb', line 318
def process_value(value)
  if @hash_params && value
    return @hash_params.each_with_object({}) do |(key, param), api_params|
      if value.has_key?(key)
        api_params[param.as] = param.process_value(value[key])
      end
    end
  end
end | 
 
    
      
  
  
    #validate(value)  ⇒ Object 
  
  
  
  
    | 
303
304
305
306
307
308
309
310
311
312
313
314
315
316 | # File 'lib/apipie/validator.rb', line 303
def validate(value)
  return false if !value.is_a? Hash
  if @hash_params
    @hash_params.each do |k, p|
      if Apipie.configuration.validate_presence?
        raise ParamMissing.new(k) if p.required && !value.has_key?(k)
      end
      if Apipie.configuration.validate_value?
        p.validate(value[k]) if value.has_key?(k)
      end
    end
  end
  return true
end |