Sha256: c27d3dbef928b60fbc3576d018c51444954f76b9f595b07435b25090c0292f25

Contents?: true

Size: 1.36 KB

Versions: 2

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

# Originally based on GrapiQL Rails Config
# https://github.com/rmosolgo/graphiql-rails/blob/5770e774f9da754aa8c1eee5651d6c663ca8e2a2/lib/graphiql/rails/config.rb

module GraphQL
  module Voyager
    module Rails
      class Config
        # @example Adding a header to the request
        #    config.headers["My-Header"] = -> (view_context) { "My-Value" }
        #
        # @return [Hash<String => Proc>] Keys are headers to include in GraphQL requests, values are `->(view_context) { ... }` procs to determin values
        attr_accessor :headers
        attr_accessor :csrf

        DEFAULT_HEADERS = {
          'Content-Type' => ->(_) { 'application/json' },
        }

        CSRF_TOKEN_HEADER = {
          "X-CSRF-Token" => -> (view_context) { view_context.form_authenticity_token }
        }

        def initialize(csrf: true, headers: DEFAULT_HEADERS)
          @headers = headers.dup
          @csrf = csrf
        end

        # Call defined procs, add CSRF token if specified
        def resolve_headers(view_context)
          all_headers = DEFAULT_HEADERS.merge(headers)

          if csrf
            all_headers = all_headers.merge(CSRF_TOKEN_HEADER)
          end

          all_headers.each_with_object({}) do |(key, value), memo|
            memo[key] = value.call(view_context)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
graphql-voyager-rails-1.0.2 lib/graphql/voyager/rails/config.rb
graphql-voyager-rails-1.0.1 lib/graphql/voyager/rails/config.rb