Class: Transaction::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/transaction.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transaction_id: nil, options: {}) ⇒ Client

Returns a new instance of Client.



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/transaction.rb', line 35

def initialize(transaction_id: nil, options: {})
  @transaction_id = transaction_id ||
                    "transact-#{SecureRandom.urlsafe_base64(16)}"
  @redis_client = Transaction.redis

  options = DEFAULT_ATTRIBUTES.merge(options)

  @attributes = parsed_attributes || {}
  update_attributes(options) if @attributes.empty?

  @status = @attributes[:status].to_s
end

Instance Attribute Details

#attributesObject (readonly)

Returns the value of attribute attributes.



33
34
35
# File 'lib/transaction.rb', line 33

def attributes
  @attributes
end

#statusObject (readonly)

Returns the value of attribute status.



33
34
35
# File 'lib/transaction.rb', line 33

def status
  @status
end

#transaction_idObject (readonly)

Returns the value of attribute transaction_id.



33
34
35
# File 'lib/transaction.rb', line 33

def transaction_id
  @transaction_id
end

Instance Method Details

#clear!Object



75
76
77
78
# File 'lib/transaction.rb', line 75

def clear!
  @attributes = @status = nil
  redis_delete
end

#finish!(status = 'success', clear = false) ⇒ Object



69
70
71
72
73
# File 'lib/transaction.rb', line 69

def finish!(status = 'success', clear = false)
  update_status(status)

  redis_delete if clear
end

#refresh!Object

Raises:

  • (StandardError)


80
81
82
83
84
85
# File 'lib/transaction.rb', line 80

def refresh!
  @attributes = parsed_attributes
  raise StandardError, 'Transaction expired' if @attributes.nil?

  @status = @attributes[:status].to_s
end

#start!Object



65
66
67
# File 'lib/transaction.rb', line 65

def start!
  update_status(:processing)
end

#update_attributes(options) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/transaction.rb', line 48

def update_attributes(options)
  unless options.is_a? Hash
    raise ArgumentError, 'Invalid type. Expected Hash'
  end

  @attributes = symbolize_keys!(@attributes.merge!(options))
  redis_set(@transaction_id, @attributes.to_json)
  @status = @attributes[:status].to_s
end

#update_status(status) ⇒ Object



58
59
60
61
62
63
# File 'lib/transaction.rb', line 58

def update_status(status)
  status = status.to_sym
  raise 'Invalid Status' unless STATUSES.include?(status.to_sym)

  update_attributes(status: status)
end