Module: JekyllOpenAPI::Parameters

Defined in:
lib/jekyll_openapi/parameters.rb

Overview

Helpers for OpenAPI Parameter objects.

Constant Summary collapse

LOCATIONS =
%w[query 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 four location keys so templates can test emptiness.

Parameters:

  • params (Array<Hash>, nil)

Returns:

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


21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/jekyll_openapi/parameters.rb', line 21

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
  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)


12
13
14
# File 'lib/jekyll_openapi/parameters.rb', line 12

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.

Returns:

  • (Array<Hash>)


38
39
40
41
42
43
44
45
# File 'lib/jekyll_openapi/parameters.rb', line 38

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