Sha256: 4cf24b51453de000c592d86d15d12757b9420bff440aa226f1a7b288079a47c0

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module LedgerSync
  module Xero
    class Request < Ledgers::Request
      attr_reader :client

      def initialize(*args, client:, **keywords)
        @client = client
        super(*args, **keywords)
      end

      def perform
        raise 'Request already performed' if performed?

        @response = generate_response(
          body: body,
          headers: headers,
          method: method,
          url: url
        )
      ensure
        @performed = true
      end

      def refresh!
        oauth.refresh!
      rescue OAuth2::Error => e
        raise e # parse_error(error: e)
      end

      private

      def generate_response(body:, headers:, method:, url:)
        oauth_response = oauth.send(
          method,
          url,
          body: (body.to_json unless body.nil?),
          headers: headers
        )

        LedgerSync::Ledgers::Response.new_from_oauth_response(
          oauth_response: oauth_response,
          request: self
        )
      end

      def oauth
        client.oauth
      end

      def oauth_client
        client.oauth_client
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ledger_sync-xero-0.1.0 lib/ledger_sync/xero/request.rb