Sha256: 0cbc704a187e65a66119b126a598e348a219b4eb5d2d04092c09a928555411db

Contents?: true

Size: 1.19 KB

Versions: 10

Compression:

Stored size: 1.19 KB

Contents

module JSONAPIonify::Api
  module Resource::Definitions::RequestHeaders

    def self.extended(klass)
      klass.class_eval do
        extend JSONAPIonify::InheritedAttributes
        inherited_hash_attribute :request_header_definitions

        # Define context
        context(:request_headers, persisted: true, readonly: true) do |request:|
          request.headers
        end

        # Validate headers before request
        before do |request_headers:, action_name:, nested_request: false|
          # Gather Definitions
          defined_headers = self.class.request_header_definitions.select do |_, v|
            v.actions.blank? || v.actions.include?(action_name)
          end

          # Gather required Headers
          required_headers = defined_headers.select do |_, v|
            v.required
          end

          # Gather Missing Keys
          missing_keys = required_headers.keys.map(&:downcase) - request_headers.keys.map(&:downcase)
          error :headers_missing, missing_keys if !nested_request && missing_keys.present?
        end
      end
    end

    def request_header(name, **options)
      request_header_definitions[name] = HeaderOptions.new(name, **options)
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
jsonapionify-0.12.10 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.9 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.8 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.7 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.5 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.4 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.3 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.2 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.1 lib/jsonapionify/api/resource/definitions/request_headers.rb
jsonapionify-0.12.0 lib/jsonapionify/api/resource/definitions/request_headers.rb