# frozen_string_literal: true require "delegate" class PaymentMethod < SimpleDelegator def self.for(method, three_d_secure={}) three_d = three_d_secure[method.token] return ThreeDSecure.new(method, three_d) if three_d new(method) end def transaction_details { payment_method_token: token } end class ThreeDSecure < PaymentMethod def initialize(method, three_d) super(method) @three_d = three_d end def transaction_details super.merge(three_d_secure_authentication_id: @three_d) end end end