Sha256: e4a894bed86abb1d2cf3a0a3ec6fc77b9a9520a58266a853fae1c5bb6b1de35d

Contents?: true

Size: 1.83 KB

Versions: 12

Compression:

Stored size: 1.83 KB

Contents

module Graphiti
  class Resource
    module Remote
      extend ActiveSupport::Concern

      included do
        self.adapter = Graphiti::Adapters::GraphitiAPI
        self.model = OpenStruct
        self.validate_endpoints = false

        class_attribute :timeout,
          :open_timeout
      end

      class_methods do
        def remote_url
          [remote_base_url, remote].join
        end
      end

      def save(model, meta)
        if meta[:attributes].except(:id) == {} && meta[:method] == :update
          model
        else
          raise Errors::RemoteWrite.new(self.class)
        end
      end

      def destroy(*args)
        raise Errors::RemoteWrite.new(self.class)
      end

      def before_resolve(scope, query)
        scope[:params] = Util::RemoteParams.generate(self, query)
        scope
      end

      # Forward all headers
      def request_headers
        {}.tap do |headers|
          # TODO: Maybe handle this in graphiti-rails
          if defined?(Rails) && context
            raw = context.request.headers.to_h
            if (auth = raw["HTTP_AUTHORIZATION"])
              headers["Authorization"] = auth
            end
          end
        end
      end

      def remote_url
        self.class.remote_url
      end

      def make_request(url)
        headers = request_headers.dup
        headers["Content-Type"] = "application/vnd.api+json"
        faraday.get(url, nil, headers) do |req|
          yield req if block_given? # for super do ... end
          req.options.timeout = timeout if timeout
          req.options.open_timeout = open_timeout if open_timeout
        end
      end

      private

      def faraday
        if defined?(Faraday)
          Faraday
        else
          raise "Faraday not defined. Please require the 'faraday' gem to use remote resources"
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
graphiti-1.2.31 lib/graphiti/resource/remote.rb
graphiti-1.2.30 lib/graphiti/resource/remote.rb
graphiti-1.2.29 lib/graphiti/resource/remote.rb
graphiti-1.2.28 lib/graphiti/resource/remote.rb
graphiti-1.2.27 lib/graphiti/resource/remote.rb
graphiti-1.2.26 lib/graphiti/resource/remote.rb
graphiti-1.2.25 lib/graphiti/resource/remote.rb
graphiti-1.2.21 lib/graphiti/resource/remote.rb
graphiti-1.2.20 lib/graphiti/resource/remote.rb
graphiti-1.2.19 lib/graphiti/resource/remote.rb
graphiti-1.2.18 lib/graphiti/resource/remote.rb
graphiti-1.2.17 lib/graphiti/resource/remote.rb