Module: StripeMock::RequestHandlers::Charges

Included in:
Instance
Defined in:
lib/stripe_mock/request_handlers/charges.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



5
6
7
8
9
10
11
12
13
# 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',  :create_refund
  klass.add_handler 'post /v1/charges/(.*)',          :update_charge
end

Instance Method Details

#capture_charge(route, method_url, params, headers) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/stripe_mock/request_handlers/charges.rb', line 75

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

#create_refund(route, method_url, params, headers) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/stripe_mock/request_handlers/charges.rb', line 107

def create_refund(route, method_url, params, headers)
  charge = get_charge(route, method_url, params, headers)

  refund = Data.mock_refund params.merge(
    :balance_transaction => new_balance_transaction('txn'),
    :id => new_id('re'),
    :charge => charge[:id]
  )
  add_refund_to_charge(refund, charge)
  refund
end

#get_charge(route, method_url, params, headers) ⇒ Object



70
71
72
73
# File 'lib/stripe_mock/request_handlers/charges.rb', line 70

def get_charge(route, method_url, params, headers)
  route =~ method_url
  assert_existence :charge, $1, charges[$1]
end

#get_charges(route, method_url, params, headers) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/stripe_mock/request_handlers/charges.rb', line 57

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) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/stripe_mock/request_handlers/charges.rb', line 15

def new_charge(route, method_url, params, headers)
  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_by_token(params[:source])
      end
    elsif params[:source][:id]
      raise Stripe::InvalidRequestError.new("Invalid token id: #{params[:source]}", 'card', 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)

  charges[id] = Data.mock_charge(params.merge :id => id, :balance_transaction => new_balance_transaction('txn'))
end

#refund_charge(route, method_url, params, headers) ⇒ Object



96
97
98
99
100
101
102
103
104
105
# File 'lib/stripe_mock/request_handlers/charges.rb', line 96

def refund_charge(route, method_url, params, headers)
  charge = get_charge(route, method_url, params, headers)

  refund = Data.mock_refund params.merge(
    :balance_transaction => new_balance_transaction('txn'),
    :id => new_id('re')
  )
  add_refund_to_charge(refund, charge)
  charge
end

#update_charge(route, method_url, params, headers) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/stripe_mock/request_handlers/charges.rb', line 43

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(', ')}" , '', 400)
  end

  charges[id] = Util.rmerge(charge, params)
end