Sha256: 13f45ab0891856e9fc09153ebdfe42c3a08db55bc2346bd2eef61aa7977358bd

Contents?: true

Size: 1.19 KB

Versions: 8

Compression:

Stored size: 1.19 KB

Contents

class Evil::Client
  #
  # Resolves headers of the request from operation settings and schema
  # by merging headers defined by schema and all its parents.
  # @private
  #
  class Resolver::Headers < Resolver
    private

    def initialize(schema, settings)
      super schema, settings, :headers
    end

    def __call__
      super do
        __blocks__.map { |block| __normalize__ instance_exec(&block) }
                  .reduce({}, :merge)
                  .reject { |_, value| value&.empty? }
      end
    end

    def __normalize__(headers)
      __check__(headers)
      keys   = __extract_keys__(headers)
      values = __extract_values__(headers)
      keys.zip(values).to_h
    end

    def __check__(data)
      raise __definition_error__ "#{data} is not a hash" unless data.is_a? Hash
    end

    def __extract_keys__(data)
      keys = data.keys.map(&:to_s)
      wrong = keys.reject { |key| key[VALID_KEY] }.map(&:inspect)
      return keys unless wrong.any?
      raise __definition_error__ "inacceptable headers #{wrong.join(', ')}"
    end

    def __extract_values__(data)
      data.values.map { |v| v.respond_to?(:map) ? v.map(&:to_s) : v.to_s }
    end

    VALID_KEY = /^.+$/
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
evil-client-3.0.2 lib/evil/client/resolver/headers.rb
evil-client-3.0.1 lib/evil/client/resolver/headers.rb
evil-client-3.0.0 lib/evil/client/resolver/headers.rb
evil-client-2.1.1 lib/evil/client/resolver/headers.rb
evil-client-2.1.0 lib/evil/client/resolver/headers.rb
evil-client-2.0.0 lib/evil/client/resolver/headers.rb
evil-client-1.1.0 lib/evil/client/resolver/headers.rb
evil-client-1.0.0 lib/evil/client/resolver/headers.rb