Sha256: 51d700682cea44366d5da1e44ef09c5cbef09e76974fb7bbb7a66e2abd7131cb

Contents?: true

Size: 1.58 KB

Versions: 11

Compression:

Stored size: 1.58 KB

Contents

module JsonApiClient
  module Query
    class Requestor
      extend Forwardable

      def initialize(klass)
        @klass = klass
      end

      # expects a record
      def create(record)
        request(:post, klass.path(record.attributes), {
          data: record.as_json_api
        })
      end

      def update(record)
        request(:patch, resource_path(record.attributes), {
          data: record.as_json_api
        })
      end

      def get(params = {})
        path = resource_path(params)
        params.delete(klass.primary_key)
        request(:get, path, params)
      end

      def destroy(record)
        request(:delete, resource_path(record.attributes), {})
      end

      def linked(path)
        request(:get, path, {})
      end

      def custom(method_name, options, params)
        path = resource_path(params)
        params.delete(klass.primary_key)
        path = File.join(path, method_name.to_s)

        request(options.fetch(:request_method, :get), path, params)
      end

      protected

      attr_reader :klass
      def_delegators :klass, :connection

      def resource_path(parameters)
        if resource_id = parameters[klass.primary_key]
          File.join(klass.path(parameters), encoded(resource_id))
        else
          klass.path(parameters)
        end
      end

      def encoded(part)
        Addressable::URI.encode_component(part, Addressable::URI::CharacterClasses::UNRESERVED)
      end

      def request(type, path, params)
        klass.parser.parse(klass, connection.run(type, path, params, klass.custom_headers))
      end

    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
json_api_client-1.5.0 lib/json_api_client/query/requestor.rb
json_api_client-1.4.0 lib/json_api_client/query/requestor.rb
json_api_client-1.3.0 lib/json_api_client/query/requestor.rb
json_api_client-1.2.0 lib/json_api_client/query/requestor.rb
json_api_client-1.1.1 lib/json_api_client/query/requestor.rb
json_api_client-1.1.0 lib/json_api_client/query/requestor.rb
json_api_client-1.0.2 lib/json_api_client/query/requestor.rb
json_api_client-1.0.1 lib/json_api_client/query/requestor.rb
json_api_client-1.0.0 lib/json_api_client/query/requestor.rb
json_api_client-1.0.0.beta7 lib/json_api_client/query/requestor.rb
json_api_client-1.0.0.beta6 lib/json_api_client/query/requestor.rb