# frozen_string_literal: true class PaymentMethods def self.for_braintree_customer(braintree_customer) methods = braintree_customer.payment_methods if methods.empty? Empty.new else new(methods) end end def initialize(methods) @methods = methods end def fetch(idx) @methods.fetch(idx) end def default_payment_method @methods.find(&:default?) end def default_payment_method_index @methods.index(&:default?)&.to_s end def to_options @methods.map.with_index do |method, idx| { value: idx.to_s, label: "#{method.card_type} #{method.last_4}" } end end def to_list_single(**kwargs) { var: "payment_method", type: "list-single", label: "Credit card to pay with", required: true, value: default_payment_method_index, options: to_options }.merge(kwargs) end def empty? false end class Empty def default_payment_method; end def to_list_single(*) raise "No payment methods available" end def empty? true end end end