Class: OpenapiParameters::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/openapi_parameters/query.rb

Overview

Query parses query parameters from a http query strings.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parameters, convert: true, rack_array_compat: false) ⇒ Query

Returns a new instance of Query.

Parameters:

  • parameters (Array<Hash>)

    The OpenAPI query parameter definitions.

  • convert (Boolean) (defaults to: true)

    Whether to convert the values to the correct type.



11
12
13
14
15
# File 'lib/openapi_parameters/query.rb', line 11

def initialize(parameters, convert: true, rack_array_compat: false)
  @parameters = parameters.map { Parameter.new(_1) }
  @convert = convert
  @remove_array_brackets = rack_array_compat
end

Instance Attribute Details

#parametersObject (readonly)

Returns the value of attribute parameters.



59
60
61
# File 'lib/openapi_parameters/query.rb', line 59

def parameters
  @parameters
end

Instance Method Details

#unknown_values(query_string) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/openapi_parameters/query.rb', line 41

def unknown_values(query_string)
  parsed_query = parse_query(query_string)
  known_parameter_names = parameters.to_set(&:name)

  unknown = parsed_query.each_with_object({}) do |(key, value), result|
    # Skip parameters that are defined in the schema
    next if known_parameter_names.include?(key)

    # Skip deep object parameters that might belong to defined parameters
    next if parameters.any? { |param| param.deep_object? && key.start_with?("#{param.name}[") }

    result[key] = value
  end
  return if unknown.empty?

  unknown
end

#unpack(query_string) ⇒ Object

rubocop:disable Metrics/AbcSize



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/openapi_parameters/query.rb', line 17

def unpack(query_string) # rubocop:disable Metrics/AbcSize
  parsed_query = parse_query(query_string)
  parameters.each_with_object({}) do |parameter, result|
    if parameter.deep_object?
      if parsed_query.key?(parameter.name)
        value = parsed_query[parameter.name]
      else
        value = parse_deep_object(parameter, parsed_query)
        next if value.empty?
      end
    else
      next unless parsed_query.key?(parameter.name)

      value = Unpacker.unpack_value(parameter, parsed_query[parameter.name])
    end
    key = if remove_array_brackets && parameter.bracket_array?
            parameter.name.delete_suffix('[]')
          else
            parameter.name
          end
    result[key] = @convert ? parameter.convert(value) : value
  end
end