Module: StripeMock::RequestHandlers::Tokens

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



5
6
7
8
# File 'lib/stripe_mock/request_handlers/tokens.rb', line 5

def Tokens.included(klass)
  klass.add_handler 'post /v1/tokens',      :create_token
  klass.add_handler 'get /v1/tokens/(.*)',  :get_token
end

Instance Method Details

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



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/stripe_mock/request_handlers/tokens.rb', line 10

def create_token(route, method_url, params, headers)
  if params[:customer].nil? && params[:card].nil?
    raise Stripe::InvalidRequestError.new('You must supply either a card, customer, or bank account to create a token.', nil, 400)
  end

  cus_id = params[:customer]

  if cus_id && params[:card]
    customer = assert_existance :customer, cus_id, customers[cus_id]

    # params[:card] is an id; grab it from the db
    customer_card = get_card(customer, params[:card])
    assert_existance :card, params[:card], customer_card
  elsif params[:card]
    # params[:card] is a hash of cc info; "Sanitize" the card number
    params[:card][:fingerprint] = StripeMock::Util.fingerprint(params[:card][:number])
    params[:card][:last4] = params[:card][:number][-4,4]
    customer_card = params[:card]
  else
    customer = assert_existance :customer, cus_id, customers[cus_id]
    customer_card = get_card(customer, customer[:default_card])
  end

  token_id = generate_card_token(customer_card)
  card = @card_tokens[token_id]

  Data.mock_token(params.merge :id => token_id, :card => card)
end

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



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/stripe_mock/request_handlers/tokens.rb', line 39

def get_token(route, method_url, params, headers)
  route =~ method_url
  # A Stripe token can be either a bank token or a card token
  bank_or_card = @bank_tokens[$1] || @card_tokens[$1]
  assert_existance :token, $1, bank_or_card

  if bank_or_card[:object] == 'card'
    Data.mock_token(:id => $1, :card => bank_or_card)
  elsif bank_or_card[:object] == 'bank_account'
    Data.mock_token(:id => $1, :bank_account => bank_or_card)
  end
end