Class: SpreeAdyen::PaymentSessions::FindOrCreate

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_adyen/payment_sessions/find_or_create.rb

Instance Method Summary collapse

Constructor Details

#initialize(order:, user:, amount:, payment_method:, channel: nil, return_url: nil) ⇒ FindOrCreate

Returns a new instance of FindOrCreate.



6
7
8
9
10
11
12
13
# File 'app/services/spree_adyen/payment_sessions/find_or_create.rb', line 6

def initialize(order:, user:, amount:, payment_method:, channel: nil, return_url: nil)
  @order = order
  @amount = amount
  @user = user
  @payment_method = payment_method
  @channel = channel || SpreeAdyen::PaymentSession::AVAILABLE_CHANNELS[:web]
  @return_url = return_url
end

Instance Method Details

#callObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/services/spree_adyen/payment_sessions/find_or_create.rb', line 15

def call
  return failure(nil, "Cannot create Adyen payment session for the order in the #{order.state} state") unless order.can_create_adyen_payment_session?
  return success(payment_session) if payment_session.present?

  create_attributes = {
    order: order,
    amount: amount,
    currency: order.currency,
    user: user,
    payment_method: payment_method,
    channel: channel
  }
  create_attributes[:return_url] = return_url if return_url.present?

  payment_session = SpreeAdyen::PaymentSession.create(create_attributes)
  payment_session.persisted? ? success(payment_session) : failure(payment_session)
end