Class: MyActiveMerchants::Gateway

Inherits:
Object
  • Object
show all
Includes:
DefaultErrorContainer, ElasticAPM::SpanHelpers
Defined in:
app/my_lib/my_active_merchants/gateway.rb

Overview

Charge user's credit card

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from DefaultErrorContainer

#error, #error_message_simple, #merge_errors

Constructor Details

#initialize(provider) ⇒ Gateway

Returns a new instance of Gateway.



11
12
13
# File 'app/my_lib/my_active_merchants/gateway.rb', line 11

def initialize(provider)
  @provider = provider.to_s.to_sym
end

Instance Attribute Details

#cardObject (readonly)

Returns the value of attribute card.



9
10
11
# File 'app/my_lib/my_active_merchants/gateway.rb', line 9

def card
  @card
end

#reservation=(value) ⇒ Object

Sets the attribute reservation

Parameters:

  • value

    the value to set the attribute reservation to.



8
9
10
# File 'app/my_lib/my_active_merchants/gateway.rb', line 8

def reservation=(value)
  @reservation = value
end

#user=(value) ⇒ Object

Sets the attribute user

Parameters:

  • value

    the value to set the attribute user to.



8
9
10
# File 'app/my_lib/my_active_merchants/gateway.rb', line 8

def user=(value)
  @user = value
end

Instance Method Details

#charge(amount, use_3d_secure: false, ip_address: nil) ⇒ Object

Parameters:

  • card (Object)

    Vary, depends on Provider type when provider is Omise, then `card` is a string card_test_5g021zls9ei5suyryss when provider is GB Primepay, then `card` is a card data

  • amount (Money)


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 'app/my_lib/my_active_merchants/gateway.rb', line 19

def charge(amount, use_3d_secure: false, ip_address: nil)
  return false unless valid?

  success = false
  ActiveRecord::Base.transaction do
    save_card(card)

    gateway = my_gateway.new(reservation, card)
    case provider
    when :omise
      unless gateway.capture_card(amount, ip_address: ip_address, use_3d_secure: use_3d_secure)
        merge_errors(reservation.errors)
        raise ActiveRecord::Rollback
      end
    when :gb_primepay
      unless gateway.charge(amount, use_3d_secure: use_3d_secure)
        merge_errors(reservation.errors)
        raise ActiveRecord::Rollback
      end
    else
      raise NotImplementedError
    end
    success = true
  end
  success
rescue StandardError => e
  APMErrorHandler.report(e)
  false
end

#holdObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/my_lib/my_active_merchants/gateway.rb', line 50

def hold
  return false unless valid?

  success = false
  ActiveRecord::Base.transaction do
    gateway = my_gateway.new(reservation, card)
    case provider
    when :omise
      unless gateway.customer_created?
        merge_errors(reservation.errors)
        raise ActiveRecord::Rollback
      end
    when :gb_primepay
      save_card(card)
    else
      raise NotImplementedError
    end
    success = true
  end
  success
rescue StandardError => e
  APMErrorHandler.report(e)
  false
end

#store_card(token) ⇒ Object



100
101
102
# File 'app/my_lib/my_active_merchants/gateway.rb', line 100

def store_card(token)
  @card = token
end

#void(reference_no: nil, gb_secret_key: nil) ⇒ Object

if GB Primepay

Parameters:

  • reference_no (String) (defaults to: nil)

    Omise & GB Primepay need this

  • gb_secret_key (String) (defaults to: nil)

    optional for GB Primepay



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'app/my_lib/my_active_merchants/gateway.rb', line 79

def void(reference_no: nil, gb_secret_key: nil)
  success = false

  ActiveRecord::Base.transaction do
    case provider
    when :omise
      my_gateway.void(reference_no)
    when :gb_primepay
      my_gateway.void(reference_no, gb_secret_key)
    else
      raise NotImplementedError
    end
    success = true
  end
  APMErrorHandler.report 'can not void', { reference_no: reference_no }
  success
rescue StandardError => e
  APMErrorHandler.report(e)
end