Class: Tina4::SessionHandlers::MongoHandler
- Inherits:
-
Object
- Object
- Tina4::SessionHandlers::MongoHandler
- Defined in:
- lib/tina4/session_handlers/mongo_handler.rb
Instance Method Summary collapse
- #cleanup ⇒ Object
- #destroy(session_id) ⇒ Object
-
#initialize(options = {}) ⇒ MongoHandler
constructor
Connection is configured from TINA4_SESSION_MONGO_* env vars (parity with Python's MongoDBSessionHandler) so TINA4_SESSION_BACKEND=mongodb can be pointed at a server by env.
- #read(session_id) ⇒ Object
- #write(session_id, data) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ MongoHandler
Connection is configured from TINA4_SESSION_MONGO_* env vars (parity with Python's MongoDBSessionHandler) so TINA4_SESSION_BACKEND=mongodb can be pointed at a server by env. TINA4_SESSION_MONGO_URI is canonical; TINA4_SESSION_MONGO_URL is a legacy alias. The database default is "tina4" (Python's default — Ruby previously drifted to "tina4_sessions"). An explicit constructor option always wins over the environment.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/tina4/session_handlers/mongo_handler.rb', line 13 def initialize( = {}) require "mongo" @ttl = [:ttl] || 86400 @uri = [:uri] || ENV["TINA4_SESSION_MONGO_URI"] || ENV["TINA4_SESSION_MONGO_URL"] || "mongodb://localhost:27017" @database = [:database] || ENV["TINA4_SESSION_MONGO_DB"] || "tina4" @collection_name = [:collection] || ENV["TINA4_SESSION_MONGO_COLLECTION"] || "sessions" client = Mongo::Client.new(@uri, database: @database) @collection = client[@collection_name] ensure_ttl_index rescue LoadError raise "MongoDB session handler requires the 'mongo' gem. Install with: gem install mongo" rescue Mongo::Error => e Tina4::Log.error("MongoDB session setup failed: #{e.}") end |
Instance Method Details
#cleanup ⇒ Object
46 47 48 |
# File 'lib/tina4/session_handlers/mongo_handler.rb', line 46 def cleanup # MongoDB TTL index handles cleanup end |
#destroy(session_id) ⇒ Object
42 43 44 |
# File 'lib/tina4/session_handlers/mongo_handler.rb', line 42 def destroy(session_id) @collection.delete_one(_id: session_id) end |
#read(session_id) ⇒ Object
28 29 30 31 32 |
# File 'lib/tina4/session_handlers/mongo_handler.rb', line 28 def read(session_id) doc = @collection.find(_id: session_id).first return nil unless doc doc["data"] end |
#write(session_id, data) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/tina4/session_handlers/mongo_handler.rb', line 34 def write(session_id, data) @collection.update_one( { _id: session_id }, { "$set" => { data: data, updated_at: Time.now } }, upsert: true ) end |