module StripeMock::RequestHandlers::Customers
Public Class Methods
included(klass)
click to toggle source
# File lib/stripe_mock/request_handlers/customers.rb, line 5 def Customers.included(klass) klass.add_handler 'post /v1/customers', :new_customer klass.add_handler 'post /v1/customers/([^/]*)', :update_customer klass.add_handler 'get /v1/customers/([^/]*)', :get_customer klass.add_handler 'delete /v1/customers/([^/]*)', :delete_customer klass.add_handler 'get /v1/customers', :list_customers klass.add_handler 'delete /v1/customers/([^/]*)/discount', :delete_customer_discount end
Public Instance Methods
delete_customer(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/customers.rb, line 99 def delete_customer(route, method_url, params, headers) route =~ method_url assert_existence :customer, $1, customers[$1] customers[$1] = { id: customers[$1][:id], deleted: true } end
delete_customer_discount(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/customers.rb, line 127 def delete_customer_discount(route, method_url, params, headers) route =~ method_url cus = assert_existence :customer, $1, customers[$1] cus[:discount] = nil cus end
get_customer(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/customers.rb, line 109 def get_customer(route, method_url, params, headers) route =~ method_url customer = assert_existence :customer, $1, customers[$1] customer = customer.clone if params[:expand] == ['default_source'] customer[:default_source] = customer[:sources][:data].detect do |source| source[:id] == customer[:default_source] end end customer end
list_customers(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/customers.rb, line 123 def list_customers(route, method_url, params, headers) Data.mock_list_object(customers.values, params) end
new_customer(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/customers.rb, line 14 def new_customer(route, method_url, params, headers) params[:id] ||= new_id('cus') sources = [] if params[:source] new_card = if params[:source].is_a?(Hash) unless params[:source][:object] && params[:source][:number] && params[:source][:exp_month] && params[:source][:exp_year] raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, http_status: 400) end card_from_params(params[:source]) else get_card_or_bank_by_token(params.delete(:source)) end sources << new_card params[:default_source] = sources.first[:id] end customers[ params[:id] ] = Data.mock_customer(sources, params) if params[:plan] plan_id = params[:plan].to_s plan = assert_existence :plan, plan_id, plans[plan_id] if params[:default_source].nil? && params[:trial_end].nil? && plan[:trial_period_days].nil? && plan[:amount] != 0 raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, http_status: 400) end subscription = Data.mock_subscription({ id: new_id('su') }) subscription = resolve_subscription_changes(subscription, [plan], customers[ params[:id] ], params) add_subscription_to_customer(customers[ params[:id] ], subscription) subscriptions[subscription[:id]] = subscription elsif params[:trial_end] raise Stripe::InvalidRequestError.new('Received unknown parameter: trial_end', nil, http_status: 400) end if params[:coupon] coupon = coupons[ params[:coupon] ] assert_existence :coupon, params[:coupon], coupon add_coupon_to_object(customers[params[:id]], coupon) end customers[ params[:id] ] end
update_customer(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/customers.rb, line 60 def update_customer(route, method_url, params, headers) route =~ method_url cus = assert_existence :customer, $1, customers[$1] # Delete those params if their value is nil. Workaround of the problematic way Stripe serialize objects params.delete(:sources) if params[:sources] && params[:sources][:data].nil? params.delete(:subscriptions) if params[:subscriptions] && params[:subscriptions][:data].nil? # Delete those params if their values aren't valid. Workaround of the problematic way Stripe serialize objects if params[:sources] && !params[:sources][:data].nil? params.delete(:sources) unless params[:sources][:data].any?{ |v| !!v[:type]} end if params[:subscriptions] && !params[:subscriptions][:data].nil? params.delete(:subscriptions) unless params[:subscriptions][:data].any?{ |v| !!v[:type]} end cus.merge!(params) if params[:source] if params[:source].is_a?(String) new_card = get_card_or_bank_by_token(params.delete(:source)) elsif params[:source].is_a?(Hash) unless params[:source][:object] && params[:source][:number] && params[:source][:exp_month] && params[:source][:exp_year] raise Stripe::InvalidRequestError.new('You must supply a valid card', nil, http_status: 400) end new_card = card_from_params(params.delete(:source)) end add_card_to_object(:customer, new_card, cus, true) cus[:default_source] = new_card[:id] end if params[:coupon] coupon = coupons[ params[:coupon] ] assert_existence :coupon, params[:coupon], coupon add_coupon_to_object(cus, coupon) end cus end