Class: Jsapi::Controller::Parameters

Inherits:
Object
  • Object
show all
Includes:
Model::Nestable
Defined in:
lib/jsapi/controller/parameters.rb

Overview

Used to wrap request parameters.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Model::Nestable

#[], #additional_attributes, #attribute?, #attributes, #inspect, #serializable_hash

Constructor Details

#initialize(params, request, operation, definitions, strong: false) ⇒ Parameters

Creates a new instance that wraps params according to operation. References are resolved to API components in definitions.

If strong is true+ parameters that can be mapped are accepted only. That means that the instance created is invalid if params contains any parameters that can’t be mapped to a parameter or a request body property of operation.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/jsapi/controller/parameters.rb', line 17

def initialize(params, request, operation, definitions, strong: false)
  params = params.to_h
  unassigned_params = params.dup

  @params_to_be_validated = strong == true ? params.dup : {}
  @raw_attributes = {}

  # Parameters
  operation.resolved_parameters(definitions).each do |name, parameter_model|
    @raw_attributes[name] = JSON.wrap(
      case parameter_model.in
      when 'header'
        request.headers[name]
      when 'querystring'
        query_params = request.query_parameters
        keys = query_params.keys

        unassigned_params.except!(*keys)
        @params_to_be_validated.except!(*keys)

        parameter_model.object? ? params.slice(*keys) : query_params.to_query
      else
        unassigned_params.delete(name)
      end,
      parameter_model.schema.resolve(definitions),
      definitions,
      context: :request
    )
  end

  # Request body
  request_body_schema = operation.request_body&.resolve(definitions)
                                 &.schema&.resolve(definitions)
  if request_body_schema&.object?
    request_body = JSON.wrap(
      unassigned_params,
      request_body_schema,
      definitions,
      context: :request
    )
    @raw_attributes.merge!(request_body.raw_attributes)
    @raw_additional_attributes = request_body.raw_additional_attributes
    @params_to_be_validated.except!(*@raw_additional_attributes.keys)
  else
    @raw_additional_attributes = {}
  end
end

Instance Attribute Details

#raw_additional_attributesObject (readonly)

Returns the value of attribute raw_additional_attributes.



9
10
11
# File 'lib/jsapi/controller/parameters.rb', line 9

def raw_additional_attributes
  @raw_additional_attributes
end

#raw_attributesObject (readonly)

Returns the value of attribute raw_attributes.



9
10
11
# File 'lib/jsapi/controller/parameters.rb', line 9

def raw_attributes
  @raw_attributes
end

Instance Method Details

#validate(errors) ⇒ Object

Validates the request parameters. Returns true if the parameters are valid, false otherwise. Detected errors are added to errors.



67
68
69
70
# File 'lib/jsapi/controller/parameters.rb', line 67

def validate(errors)
  validate_attributes(errors) &&
    validate_parameters(@params_to_be_validated, attributes, errors)
end