Class: Lightrail::StripeLightrailSplitTenderCharge

Inherits:
LightrailObject
  • Object
show all
Defined in:
lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#lightrail_chargeObject

Returns the value of attribute lightrail_charge.



3
4
5
# File 'lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb', line 3

def lightrail_charge
  @lightrail_charge
end

#payment_summaryObject

Returns the value of attribute payment_summary.



3
4
5
# File 'lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb', line 3

def payment_summary
  @payment_summary
end

#stripe_chargeObject

Returns the value of attribute stripe_charge.



3
4
5
# File 'lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb', line 3

def stripe_charge
  @stripe_charge
end

Class Method Details

.create(charge_params, lr_share) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb', line 5

def self.create (charge_params, lr_share)
  # Convert to Translator.translate_split_tender_charge_params!()
  Lightrail::SplitTenderValidator.validate_split_tender_charge_params!(charge_params, lr_share)

  total_amount = charge_params[:amount]
  currency = charge_params[:currency]

  stripe_share = total_amount - lr_share

  if lr_share > 0 # start with lightrail charge first
    lightrail_charge_params = Lightrail::Translator.construct_lightrail_pending_charge_params_from_split_tender(charge_params, lr_share)

    lightrail_pending_transaction = Lightrail::LightrailCharge.create(lightrail_charge_params)

    if stripe_share > 0 # continue to stripe charge
      begin
        stripe_params = Lightrail::Translator.charge_params_split_tender_to_stripe(charge_params, stripe_share)
        stripe_transaction = Stripe::Charge.create(stripe_params)
         = Lightrail::Translator.(stripe_transaction)
      rescue
        lightrail_pending_transaction.cancel!
        raise $!, "Stripe payment failed: #{$!}", $!.backtrace
      end
    end

    lightrail_captured_transaction = lightrail_pending_transaction.capture!()

  else # all to stripe
    stripe_params = Lightrail::Translator.charge_params_split_tender_to_stripe(charge_params, stripe_share)
    stripe_transaction = Stripe::Charge.create(stripe_params)

  end


  split_tender_charge_payment_summary = {
      total_amount: total_amount,
      currency: currency,
      lightrail_amount: lightrail_captured_transaction ? lightrail_captured_transaction.value : 0,
      stripe_amount: stripe_transaction ? stripe_transaction.amount : 0,
  }

  self.new({lightrail_charge: lightrail_captured_transaction, stripe_charge: stripe_transaction, payment_summary: split_tender_charge_payment_summary})
end

.create_with_automatic_split(charge_params) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb', line 49

def self.create_with_automatic_split (charge_params)
  Lightrail::SplitTenderValidator.validate_split_tender_charge_params!(charge_params)

  split_amounts = self.determine_split!(charge_params)
  lr_share = split_amounts[:lightrail_amount]
  self.create(charge_params, lr_share)
end

.simulate(charge_params, lr_share) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb', line 57

def self.simulate (charge_params, lr_share)
  Lightrail::SplitTenderValidator.validate_split_tender_charge_params!(charge_params, lr_share)

  total_amount = charge_params[:amount]
  currency = charge_params[:currency]

  stripe_share = total_amount - lr_share

  if lr_share > 0 # only need to simulate Lightrail transaction
    lightrail_charge_params = Lightrail::Translator.construct_lightrail_charge_params_from_split_tender(charge_params, lr_share)

    lightrail_simulated_transaction = Lightrail::LightrailCharge.simulate(lightrail_charge_params)

    lr_final_share = lightrail_simulated_transaction.value
  end

  split_tender_charge_payment_summary = {
      total_amount: total_amount,
      currency: currency,
      lightrail_amount: lr_final_share ? lr_final_share : 0,
      stripe_amount: lr_final_share ? total_amount - lr_final_share.abs : total_amount
  }

  self.new({lightrail_charge: lightrail_simulated_transaction, stripe_charge: nil, payment_summary: split_tender_charge_payment_summary})
end

.simulate_with_automatic_split(charge_params) ⇒ Object



83
84
85
86
87
88
89
# File 'lib/lightrail_stripe/stripe_lightrail_split_tender_charge.rb', line 83

def self.simulate_with_automatic_split (charge_params)
  Lightrail::SplitTenderValidator.validate_split_tender_charge_params!(charge_params)

  split_amounts = self.determine_split!(charge_params)
  lr_share = split_amounts[:lightrail_amount]
  self.simulate(charge_params, lr_share)
end