Class: HighLevel::Storage::Redis
- Defined in:
- lib/high_level/storage/redis.rb
Overview
Redis-backed session storage. Good for multi-process worker setups where Memory is per-process. Keys are prefixed with ‘gohighlevel:` and namespaced by the application_id derived from `client_id`. Each session is JSON-encoded and given a TTL equal to its `expires_in` (falling back to one day) so expired sessions are cleaned up by Redis itself.
Constant Summary collapse
- DEFAULT_TTL_SECONDS =
Session TTL, in seconds, when an OAuth response has no
expires_in. 24 * 60 * 60
- KEY_PREFIX =
Key prefix for every session entry.
"gohighlevel"
Constants inherited from Base
Instance Method Summary collapse
-
#delete_session(resource_id) ⇒ void
Remove a stored session.
-
#disconnect ⇒ void
Release any resources held by the backend.
-
#get_access_token(resource_id) ⇒ String?
Fetch just the access token from a stored session.
-
#get_session(resource_id) ⇒ Hash?
Fetch a stored session.
-
#init ⇒ void
Initialize the backend (open connections, ensure schema, …).
-
#initialize(redis: nil, ttl: DEFAULT_TTL_SECONDS, **redis_options) ⇒ Redis
constructor
A new instance of Redis.
-
#set_client_id(client_id) ⇒ void
Set the OAuth client id; its first hyphen-separated segment becomes the application namespace for stored sessions.
-
#set_session(resource_id, session_data) ⇒ void
Store (or replace) a session, stamping
:expire_at.
Constructor Details
#initialize(redis: nil, ttl: DEFAULT_TTL_SECONDS, **redis_options) ⇒ Redis
Returns a new instance of Redis.
24 25 26 27 28 29 |
# File 'lib/high_level/storage/redis.rb', line 24 def initialize(redis: nil, ttl: DEFAULT_TTL_SECONDS, **) super() @redis = redis || ::Redis.new(**) @default_ttl = ttl @client_id = nil end |
Instance Method Details
#delete_session(resource_id) ⇒ void
This method returns an undefined value.
Remove a stored session.
71 72 73 74 |
# File 'lib/high_level/storage/redis.rb', line 71 def delete_session(resource_id) @redis.del(key_for(resource_id)) nil end |
#disconnect ⇒ void
This method returns an undefined value.
Release any resources held by the backend.
37 38 39 |
# File 'lib/high_level/storage/redis.rb', line 37 def disconnect @redis.close end |
#get_access_token(resource_id) ⇒ String?
Fetch just the access token from a stored session.
65 66 67 68 |
# File 'lib/high_level/storage/redis.rb', line 65 def get_access_token(resource_id) session = get_session(resource_id) session && session[:access_token] end |
#get_session(resource_id) ⇒ Hash?
Fetch a stored session.
57 58 59 60 61 62 |
# File 'lib/high_level/storage/redis.rb', line 57 def get_session(resource_id) raw = @redis.get(key_for(resource_id)) return nil if raw.nil? JSON.parse(raw, symbolize_names: true) end |
#init ⇒ void
This method returns an undefined value.
Initialize the backend (open connections, ensure schema, …).
32 33 34 |
# File 'lib/high_level/storage/redis.rb', line 32 def init # No-op — connection is lazy on the Redis client. end |
#set_client_id(client_id) ⇒ void
This method returns an undefined value.
Set the OAuth client id; its first hyphen-separated segment becomes the application namespace for stored sessions.
42 43 44 45 46 |
# File 'lib/high_level/storage/redis.rb', line 42 def set_client_id(client_id) raise ArgumentError, "client_id is required" if client_id.nil? || client_id.to_s.empty? @client_id = client_id.to_s end |
#set_session(resource_id, session_data) ⇒ void
This method returns an undefined value.
Store (or replace) a session, stamping :expire_at.
49 50 51 52 53 54 |
# File 'lib/high_level/storage/redis.rb', line 49 def set_session(resource_id, session_data) data = symbolize_keys(session_data) document = data.merge(expire_at: calculate_expire_at(data[:expires_in])) @redis.set(key_for(resource_id), JSON.generate(document), ex: ttl_for(data)) nil end |