Module: JekyllOpenAPI::Parameters

Defined in:
lib/jekyll_openapi/parameters.rb

Overview

Helpers for OpenAPI Parameter objects.

Constant Summary collapse

LOCATIONS =

"querystring" is OpenAPI 3.2: a single parameter describing the entire query string through content (its name is not used in serialization).

%w[query querystring path header cookie].freeze

Class Method Summary collapse

Class Method Details

.group(params, logger: JekyllOpenAPI.logger) ⇒ Hash{String => Array<Hash>}

Groups a parameter list by location ("in"). Always returns all five location keys so templates can test emptiness.

Parameters:

  • params (Array<Hash>, nil)

Returns:

  • (Hash{String => Array<Hash>})


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/jekyll_openapi/parameters.rb', line 23

def self.group(params, logger: JekyllOpenAPI.logger)
  output = LOCATIONS.to_h { |location| [location, []] }
  Array(params).each do |param|
    location = mapping?(param) ? param["in"] : nil
    if output.key?(location)
      output[location] << param
    else
      logger.warn("invalid parameter location #{location.inspect} in #{param.inspect}")
    end
  end
  unless output["querystring"].empty? || output["query"].empty?
    logger.warn("`in: querystring` must not be combined with `in: query` parameters")
  end
  output
end

.mapping?(param) ⇒ Boolean

A parameter may arrive inline (Hash) or as a $ref (Reference). Both read like a mapping, so both are valid parameter objects here.

Returns:

  • (Boolean)


14
15
16
# File 'lib/jekyll_openapi/parameters.rb', line 14

def self.mapping?(param)
  param.is_a?(Hash) || param.is_a?(Reference)
end

.merge(path_params, operation_params) ⇒ Array<Hash>

Merges path-item level and operation level parameter lists. An operation parameter overrides a path one with the same (name, in) pair. A querystring parameter overrides on location alone: its name is not used in serialization and only one may describe the query string.

Returns:

  • (Array<Hash>)


45
46
47
48
49
50
51
52
53
# File 'lib/jekyll_openapi/parameters.rb', line 45

def self.merge(path_params, operation_params)
  merged = {}
  (Array(path_params) + Array(operation_params)).each do |param|
    next unless mapping?(param)
    name = param["in"] == "querystring" ? nil : param["name"]
    merged[[name, param["in"]]] = param
  end
  merged.values
end