Module: JSONAPIonify::Api::Resource::Definitions::RequestHeaders

Defined in:
lib/jsonapionify/api/resource/definitions/request_headers.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(klass) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/jsonapionify/api/resource/definitions/request_headers.rb', line 4

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

Instance Method Details

#request_header(name, **options) ⇒ Object



33
34
35
# File 'lib/jsonapionify/api/resource/definitions/request_headers.rb', line 33

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