Skip to content

Instantly share code, notes, and snippets.

@Jpuelpan
Created September 8, 2015 19:22
Show Gist options
  • Save Jpuelpan/66d77211b245248b1a86 to your computer and use it in GitHub Desktop.
Save Jpuelpan/66d77211b245248b1a86 to your computer and use it in GitHub Desktop.
RethinkDB and NoBrainer Session Store for Ruby on Rails 4
# lib/rethinkdb_session_store.rb
require 'rethinkdb'
class RethinkdbSessionStore < ActionDispatch::Session::AbstractStore
def initialize(app, options = {})
super
@r = RethinkDB::RQL.new.table('sessions')
end
def get_session(env, session_id)
session_data = {}
session_id ||= generate_sid
@r.get(session_id).run(NoBrainer.connection.raw) do |s|
session_data = s['data'] unless s.nil?
end
[session_id, session_data]
end
def set_session(env, session_id, session_data, options)
result = if @r.get(session_id).run(NoBrainer.connection.raw).nil?
@r.insert( id: session_id, data: session_data ).run(NoBrainer.connection.raw)
else
@r.get(session_id).replace(id: session_id, data: session_data).run(NoBrainer.connection.raw)
end
session_id
end
def destroy_session(env, session_id, options)
@r.get(session_id).delete.run(NoBrainer.connection.raw)
generate_sid
end
end
@Jpuelpan
Copy link
Author

Jpuelpan commented Sep 8, 2015

Based on CustomFileStore

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment