module StripeMock::RequestHandlers::Charges
Public Class Methods
included(klass)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 5 def Charges.included(klass) klass.add_handler 'post /v1/charges', :new_charge klass.add_handler 'get /v1/charges', :get_charges klass.add_handler 'get /v1/charges/(.*)', :get_charge klass.add_handler 'post /v1/charges/(.*)/capture', :capture_charge klass.add_handler 'post /v1/charges/(.*)/refund', :refund_charge klass.add_handler 'post /v1/charges/(.*)/refunds', :refund_charge klass.add_handler 'post /v1/charges/(.*)', :update_charge end
Public Instance Methods
capture_charge(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 105 def capture_charge(route, method_url, params, headers) route =~ method_url charge = assert_existence :charge, $1, charges[$1] if params[:amount] refund = Data.mock_refund( :balance_transaction => new_balance_transaction('txn'), :id => new_id('re'), :amount => charge[:amount] - params[:amount] ) add_refund_to_charge(refund, charge) end if params[:application_fee] charge[:application_fee] = params[:application_fee] end charge[:captured] = true charge end
get_charge(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 91 def get_charge(route, method_url, params, headers) route =~ method_url charge_id = $1 || params[:charge] charge = assert_existence :charge, charge_id, charges[charge_id] charge = charge.clone if params[:expand] == ['balance_transaction'] balance_transaction = balance_transactions[charge[:balance_transaction]] charge[:balance_transaction] = balance_transaction end charge end
get_charges(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 78 def get_charges(route, method_url, params, headers) params[:offset] ||= 0 params[:limit] ||= 10 clone = charges.clone if params[:customer] clone.delete_if { |k,v| v[:customer] != params[:customer] } end Data.mock_list_object(clone.values, params) end
new_charge(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 15 def new_charge(route, method_url, params, headers) if headers && headers[:idempotency_key] params[:idempotency_key] = headers[:idempotency_key] if charges.any? original_charge = charges.values.find { |c| c[:idempotency_key] == headers[:idempotency_key]} return charges[original_charge[:id]] if original_charge end end id = new_id('ch') if params[:source] if params[:source].is_a?(String) # if a customer is provided, the card parameter is assumed to be the actual # card id, not a token. in this case we'll find the card in the customer # object and return that. if params[:customer] params[:source] = get_card(customers[params[:customer]], params[:source]) else params[:source] = get_card_or_bank_by_token(params[:source]) end elsif params[:source][:id] raise Stripe::InvalidRequestError.new("Invalid token id: #{params[:source]}", 'card', http_status: 400) end elsif params[:customer] customer = customers[params[:customer]] if customer && customer[:default_source] params[:source] = get_card(customer, customer[:default_source]) end end ensure_required_params(params) bal_trans_params = { amount: params[:amount], source: id, application_fee: params[:application_fee] } balance_transaction_id = new_balance_transaction('txn', bal_trans_params) charges[id] = Data.mock_charge( params.merge :id => id, :balance_transaction => balance_transaction_id) charge = charges[id].clone if params[:expand] == ['balance_transaction'] charge[:balance_transaction] = balance_transactions[balance_transaction_id] end charge end
refund_charge(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 126 def refund_charge(route, method_url, params, headers) charge = get_charge(route, method_url, params, headers) new_refund( route, method_url, params.merge(:charge => charge[:id]), headers ) end
update_charge(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 64 def update_charge(route, method_url, params, headers) route =~ method_url id = $1 charge = assert_existence :charge, id, charges[id] allowed = allowed_params(params) disallowed = params.keys - allowed if disallowed.count > 0 raise Stripe::InvalidRequestError.new("Received unknown parameters: #{disallowed.join(', ')}" , '', http_status: 400) end charges[id] = Util.rmerge(charge, params) end
Private Instance Methods
allowed_params(params)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 161 def allowed_params(params) allowed = [:description, :metadata, :receipt_email, :fraud_details, :shipping, :destination] # This is a workaround for the way the Stripe API sends params even when they aren't modified. # Stipe will include those params even when they aren't modified. allowed << :fee_details if params.has_key?(:fee_details) && params[:fee_details].nil? allowed << :source if params.has_key?(:source) && params[:source].empty? if params.has_key?(:refunds) && (params[:refunds].empty? || params[:refunds].has_key?(:data) && params[:refunds][:data].nil?) allowed << :refunds end allowed end
ensure_required_params(params)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 139 def ensure_required_params(params) if params[:amount].nil? require_param(:amount) elsif params[:currency].nil? require_param(:currency) elsif non_integer_charge_amount?(params) raise Stripe::InvalidRequestError.new("Invalid integer: #{params[:amount]}", 'amount', http_status: 400) elsif non_positive_charge_amount?(params) raise Stripe::InvalidRequestError.new('Invalid positive integer', 'amount', http_status: 400) elsif params[:source].nil? && params[:customer].nil? raise Stripe::InvalidRequestError.new('Must provide source or customer.', http_status: nil) end end
non_integer_charge_amount?(params)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 153 def non_integer_charge_amount?(params) params[:amount] && !params[:amount].is_a?(Integer) end
non_positive_charge_amount?(params)
click to toggle source
# File lib/stripe_mock/request_handlers/charges.rb, line 157 def non_positive_charge_amount?(params) params[:amount] && params[:amount] < 1 end