Class: MpesaStk::AccessToken
- Inherits:
-
Object
- Object
- MpesaStk::AccessToken
- Defined in:
- lib/mpesa_stk/access_token.rb
Overview
Handles OAuth access token generation, caching, and refreshing for M-Pesa APIs
Class Method Summary collapse
Instance Method Summary collapse
- #access_token ⇒ Object
-
#initialize(key = nil, secret = nil) ⇒ AccessToken
constructor
A new instance of AccessToken.
- #load_from_redis ⇒ Object
- #new_access_token ⇒ Object
- #refresh ⇒ Object
- #token? ⇒ Boolean
- #token_expired? ⇒ Boolean
- #valid? ⇒ Boolean
Constructor Details
#initialize(key = nil, secret = nil) ⇒ AccessToken
Returns a new instance of AccessToken.
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mpesa_stk/access_token.rb', line 39 def initialize(key = nil, secret = nil) @key = key.nil? ? Config.fetch('key') : key @secret = secret.nil? ? Config.fetch('secret') : secret begin @redis = Redis.new rescue Redis::CannotConnectError, Redis::ConnectionError => e raise StandardError, "Failed to connect to Redis: #{e.}" end load_from_redis end |
Class Method Details
.call(key = nil, secret = nil) ⇒ Object
34 35 36 |
# File 'lib/mpesa_stk/access_token.rb', line 34 def call(key = nil, secret = nil) new(key, secret).access_token end |
Instance Method Details
#access_token ⇒ Object
85 86 87 88 |
# File 'lib/mpesa_stk/access_token.rb', line 85 def access_token refresh unless valid? @token end |
#load_from_redis ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/mpesa_stk/access_token.rb', line 69 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 rescue Redis::BaseError => e raise StandardError, "Redis error: #{e.}" end |
#new_access_token ⇒ Object
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/mpesa_stk/access_token.rb', line 90 def new_access_token response = HTTParty.get(url, headers: headers) raise StandardError, "Failed to get access token: #{response.code} - #{response.body}" unless response.success? hash = JSON.parse(response.body).merge({ 'time_stamp' => Time.now.to_i }) @redis.set @key, hash.to_json rescue Redis::BaseError => e raise StandardError, "Redis error while saving token: #{e.}" end |
#refresh ⇒ Object
64 65 66 67 |
# File 'lib/mpesa_stk/access_token.rb', line 64 def refresh new_access_token load_from_redis end |
#token? ⇒ Boolean
60 61 62 |
# File 'lib/mpesa_stk/access_token.rb', line 60 def token? !@token.nil? end |
#token_expired? ⇒ Boolean
55 56 57 58 |
# File 'lib/mpesa_stk/access_token.rb', line 55 def token_expired? expire_time = @timestamp.to_i + @expires_in.to_i expire_time < Time.now.to_i + 58 end |
#valid? ⇒ Boolean
51 52 53 |
# File 'lib/mpesa_stk/access_token.rb', line 51 def valid? token? && !token_expired? end |