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(itsnameis not used in serialization). %w[query querystring path header cookie].freeze
Class Method Summary collapse
-
.group(params, logger: JekyllOpenAPI.logger) ⇒ Hash{String => Array<Hash>}
Groups a parameter list by location ("in").
-
.mapping?(param) ⇒ Boolean
A parameter may arrive inline (Hash) or as a $ref (Reference).
-
.merge(path_params, operation_params) ⇒ Array<Hash>
Merges path-item level and operation level parameter lists.
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.
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.
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.
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 |