Sha256: 7e08e32b7aaf1a88fe33b8d3b6d7141dbc57a5d560aeb1e811c525f0f617edc6

Contents?: true

Size: 1.02 KB

Versions: 3

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

require 'rack'

module OpenapiParameters
  # Cookie parses OpenAPI cookie parameters from a cookie string.
  class Cookie
    # @param parameters [Array<Hash>] The OpenAPI parameter definitions.
    # @param convert [Boolean] Whether to convert the values to the correct type.
    def initialize(parameters, convert: true)
      @parameters = parameters
      @convert = convert
    end

    # @param cookie_string [String] The cookie string from the request. Example "foo=bar; baz=qux"
    def unpack(cookie_string)
      cookies = Rack::Utils.parse_cookies_header(cookie_string)
      parameters.each_with_object({}) do |parameter, result|
        parameter = Parameter.new(parameter)
        next unless cookies.key?(parameter.name)

        result[parameter.name] = catch :skip do
          value = Unpacker.unpack_value(parameter, cookies[parameter.name])
          @convert ? Converter.convert(value, parameter.schema) : value
        end
      end
    end

    private

    attr_reader :parameters
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
openapi_parameters-0.3.2 lib/openapi_parameters/cookie.rb
openapi_parameters-0.3.1 lib/openapi_parameters/cookie.rb
openapi_parameters-0.3.0 lib/openapi_parameters/cookie.rb