1# frozen_string_literal: true
2
3class PaymentMethods
4 def self.for_braintree_customer(braintree_customer)
5 methods = braintree_customer.payment_methods
6 if methods.empty?
7 Empty.new
8 else
9 new(methods)
10 end
11 end
12
13 def initialize(methods)
14 @methods = methods
15 end
16
17 def fetch(idx)
18 @methods.fetch(idx)
19 end
20
21 def default_payment_method
22 @methods.index(&:default?).to_s
23 end
24
25 def to_options
26 @methods.map.with_index do |method, idx|
27 {
28 value: idx.to_s,
29 label: "#{method.card_type} #{method.last_4}"
30 }
31 end
32 end
33
34 def to_list_single(**kwargs)
35 {
36 var: "payment_method",
37 type: "list-single",
38 label: "Credit card to pay with",
39 required: true,
40 value: default_payment_method,
41 options: to_options
42 }.merge(kwargs)
43 end
44
45 class Empty
46 def to_list_single(*)
47 raise "No payment methods available"
48 end
49 end
50end