Class: Tina4::SessionHandlers::MongoHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/tina4/session_handlers/mongo_handler.rb

Instance Method Summary collapse

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(options = {})
  require "mongo"
  @ttl = options[:ttl] || 86400
  @uri = options[:uri] || ENV["TINA4_SESSION_MONGO_URI"] || ENV["TINA4_SESSION_MONGO_URL"] || "mongodb://localhost:27017"
  @database = options[:database] || ENV["TINA4_SESSION_MONGO_DB"] || "tina4"
  @collection_name = options[: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.message}")
end

Instance Method Details

#cleanupObject



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