module Balanced # A Credit represents a transfer of funds from your Marketplace's # escrow account to a Merchant's Account within your Marketplace. # # By default, a Credit is sent to the most recently added funding # destination associated with an Account. You may specify a specific # funding source. # class Credit include Balanced::Resource # @param [Array] args # @option [String] :uri the uri of the credit, in the case of an update # @option [Hash] :bank_account # @option [Integer] :amount amount in cents # @option [String] :description a text description of the credit # @option [String] :appears_on_statement_as # @option [Hash] :meta # @option [String] :destination_uri the uri of the bank account to credit def initialize *args options = args.last.is_a?(Hash) ? args.pop : {} uri = options.fetch(:uri) { self.class.uri } bank_account = options.fetch(:bank_account) {} amount = args[0] || options.fetch(:amount) { } description = args[1] || options.fetch(:description) { nil } unless bank_account.nil? # Accountless bank account attributes = { :uri => uri, :amount => amount, :description => description, :bank_account => bank_account, :meta => nil } else meta = args[2] || options.fetch(:meta) { nil } destination_uri = args[3] || options.fetch(:destination_uri) { nil } appears_on_statement_as = args[4] || options.fetch(:appears_on_statement_as) { nil } attributes = { :uri => uri, :amount => amount, :meta => meta, :description => description, :destination_uri => destination_uri, :appears_on_statement_as => appears_on_statement_as } end Balanced::Utils.stringify_keys! attributes super attributes end def reverse *args warn_on_positional args options = args.last.is_a?(Hash) ? args.pop : {} amount = args[0] || options.fetch(:amount) { nil } description = args[1] || options.fetch(:description) { nil } reversal = Reversal.new( :uri => self.reversals_uri, :credit_uri => self.uri, :amount => amount, :description => description ) reversal.save end end end