Class: MpesaStk::AccessToken

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key = nil, secret = nil) ⇒ AccessToken

Returns a new instance of AccessToken.



12
13
14
15
16
17
18
# File 'lib/mpesa_stk/access_token.rb', line 12

def initialize(key = nil, secret = nil)
  @key = key.nil? ? ENV['key'] : key
  @secret = secret.nil? ? ENV['secret'] : secret
  @redis = Redis.new

  load_from_redis
end

Class Method Details

.call(key = nil, secret = nil) ⇒ Object



7
8
9
# File 'lib/mpesa_stk/access_token.rb', line 7

def call(key = nil, secret = nil)
  new(key, secret).access_token
end

Instance Method Details

#access_tokenObject



52
53
54
55
56
57
58
59
# File 'lib/mpesa_stk/access_token.rb', line 52

def access_token
  if is_valid?
    return @token
  else
    refresh
    return @token
  end
end

#get_new_access_tokenObject



61
62
63
64
65
66
# File 'lib/mpesa_stk/access_token.rb', line 61

def get_new_access_token
  response = HTTParty.get(url, headers: headers)

  hash = JSON.parse(response.body).merge(Hash['time_stamp', Time.now.to_i])
  @redis.set @key, hash.to_json
end

#has_token?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/mpesa_stk/access_token.rb', line 29

def has_token?
  return !@token.nil?
end

#is_valid?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/mpesa_stk/access_token.rb', line 20

def is_valid?
  has_token? && !token_expired?
end

#load_from_redisObject



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/mpesa_stk/access_token.rb', line 38

def load_from_redis
  data = @redis.get(@key)
  if (data.nil? || data.empty?)
    @token = nil
    @timestamp = nil
    @expires_in = nil
  else
    parsed = JSON.parse(data)
    @token = parsed['access_token']
    @timestamp = parsed['time_stamp']
    @expires_in = parsed['expires_in']
  end
end

#refreshObject



33
34
35
36
# File 'lib/mpesa_stk/access_token.rb', line 33

def refresh
  get_new_access_token
  load_from_redis
end

#token_expired?Boolean

Returns:

  • (Boolean)


24
25
26
27
# File 'lib/mpesa_stk/access_token.rb', line 24

def token_expired?
  expire_time = @timestamp.to_i + @expires_in.to_i
  return expire_time < Time.now.to_i + 58
end