Skip to content

Commit

Permalink
Add Mongoid support.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmerouze committed Feb 17, 2010
1 parent 496238e commit 28db7b5
Show file tree
Hide file tree
Showing 10 changed files with 133 additions and 127 deletions.
4 changes: 2 additions & 2 deletions README.rdoc
Expand Up @@ -14,8 +14,8 @@ and MongoMapper plugin. This plugin is still a work in progress...
1. Clone/submodule to vendor/plugins/mongo_session_store
2. In the session_store initializer:

require 'mongo_session_store'
ActionController::Base.session_store = MongoMapper::SessionStore
require 'mongo_session_store/mongo_mapper'
ActionController::Base.session_store = ActionController::Session::MongoMapperStore

Obviously, for this to work, you must already have MongoMapper installed.

Expand Down
8 changes: 5 additions & 3 deletions Rakefile
Expand Up @@ -6,13 +6,15 @@ begin
require 'jeweler'
Jeweler::Tasks.new do |gem|
gem.name = "mongo_session_store"
gem.summary = %Q{Rails session store class implemented for MongoMapper}
gem.summary = %Q{Rails session store class implemented for MongoMapper and Mongoid}
gem.email = "nicolas.merouze@gmail.com"
gem.homepage = "http://github.com/nmerouze/mongo_session_store"
gem.authors = ["Nicolas Mérouze", "Tony Pitale", "Chris Brickley"]
gem.files = Dir["README.rdoc", "lib/**/*"]

gem.add_dependency('actionpack', '~> 2.3')
gem.add_dependency('mongo_mapper', '~> 0.6.1')
gem.add_dependency 'actionpack', '~> 2.3'
gem.add_development_dependency 'mongo_mapper', '>= 0.6.1'
gem.add_development_dependency 'mongoid', '~> 1.0'
end
rescue LoadError
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
Expand Down
2 changes: 1 addition & 1 deletion VERSION
@@ -1 +1 @@
1.0.1
1.1.0
4 changes: 1 addition & 3 deletions lib/mongo_session_store.rb
@@ -1,3 +1 @@
$:.unshift File.dirname(__FILE__)

require 'mongo_session_store/session_store'
$:.unshift File.dirname(__FILE__)
56 changes: 56 additions & 0 deletions lib/mongo_session_store/mongo_mapper.rb
@@ -0,0 +1,56 @@
require 'mongo_mapper'

module ActionController
module Session
class MongoMapperStore < AbstractStore

class Session
include MongoMapper::Document
key :data, String, :default => [Marshal.dump({})].pack("m*")
timestamps!

MongoMapper.ensure_indexes!
end

# The class used for session storage.
cattr_accessor :session_class
self.session_class = Session

SESSION_RECORD_KEY = 'rack.session.record'.freeze

private
def generate_sid
Mongo::ObjectID.new
end

def get_session(env, sid)
sid ||= generate_sid
session = find_session(sid)
env[SESSION_RECORD_KEY] = session
[sid, unpack(session.data)]
end

def set_session(env, sid, session_data)
record = env[SESSION_RECORD_KEY] ||= find_session(sid)
record.data = pack(session_data)
#per rack spec: Should return true or false dependant on whether or not the session was saved or not.
record.save ? true : false
end

def find_session(id)
@@session_class.find(id) ||
@@session_class.new(:id=>id)
end

def pack(data)
[Marshal.dump(data)].pack("m*")
end

def unpack(packed)
return nil unless packed
Marshal.load(packed.unpack("m*").first)
end

end
end
end
56 changes: 56 additions & 0 deletions lib/mongo_session_store/mongoid.rb
@@ -0,0 +1,56 @@
require 'mongoid'

module ActionController
module Session
class MongoidStore < AbstractStore

class Session
include Mongoid::Document
include Mongoid::Timestamps

field :data, :type => String, :default => [Marshal.dump({})].pack("m*")
index :updated_at
end

# The class used for session storage.
cattr_accessor :session_class
self.session_class = Session

SESSION_RECORD_KEY = 'rack.session.record'.freeze

private
def generate_sid
Mongo::ObjectID.new
end

def get_session(env, sid)
sid ||= generate_sid
session = find_session(sid)
env[SESSION_RECORD_KEY] = session
[sid, unpack(session.data)]
end

def set_session(env, sid, session_data)
record = env[SESSION_RECORD_KEY] ||= find_session(sid)
record.data = pack(session_data)
#per rack spec: Should return true or false dependant on whether or not the session was saved or not.
record.save ? true : false
end

def find_session(id)
@@session_class.find(id) ||
@@session_class.new(:id=>id)
end

def pack(data)
[Marshal.dump(data)].pack("m*")
end

def unpack(packed)
return nil unless packed
Marshal.load(packed.unpack("m*").first)
end

end
end
end
54 changes: 0 additions & 54 deletions lib/mongo_session_store/session_store.rb

This file was deleted.

30 changes: 12 additions & 18 deletions mongo_session_store.gemspec
Expand Up @@ -5,50 +5,44 @@

Gem::Specification.new do |s|
s.name = %q{mongo_session_store}
s.version = "1.0.1"
s.version = "1.1.0"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Nicolas M\303\251rouze", "Tony Pitale", "Chris Brickley"]
s.date = %q{2010-01-22}
s.date = %q{2010-02-17}
s.email = %q{nicolas.merouze@gmail.com}
s.extra_rdoc_files = [
"README.rdoc"
]
s.files = [
".gitignore",
"README.rdoc",
"Rakefile",
"VERSION",
"README.rdoc",
"lib/mongo_session_store.rb",
"lib/mongo_session_store/session_store.rb",
"mongo_session_store.gemspec",
"test/test_helper.rb",
"test/unit/dm_session_store_test.rb"
"lib/mongo_session_store/mongo_mapper.rb",
"lib/mongo_session_store/mongoid.rb"
]
s.homepage = %q{http://github.com/nmerouze/mongo_session_store}
s.rdoc_options = ["--charset=UTF-8"]
s.require_paths = ["lib"]
s.rubygems_version = %q{1.3.5}
s.summary = %q{Rails session store class implemented for MongoMapper}
s.test_files = [
"test/test_helper.rb",
"test/unit/dm_session_store_test.rb"
]
s.summary = %q{Rails session store class implemented for MongoMapper and Mongoid}

if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 3

if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<actionpack>, ["~> 2.3"])
s.add_runtime_dependency(%q<mongo_mapper>, ["~> 0.6.1"])
s.add_development_dependency(%q<mongo_mapper>, [">= 0.6.1"])
s.add_development_dependency(%q<mongoid>, ["~> 1.0"])
else
s.add_dependency(%q<actionpack>, ["~> 2.3"])
s.add_dependency(%q<mongo_mapper>, ["~> 0.6.1"])
s.add_dependency(%q<mongo_mapper>, [">= 0.6.1"])
s.add_dependency(%q<mongoid>, ["~> 1.0"])
end
else
s.add_dependency(%q<actionpack>, ["~> 2.3"])
s.add_dependency(%q<mongo_mapper>, ["~> 0.6.1"])
s.add_dependency(%q<mongo_mapper>, [">= 0.6.1"])
s.add_dependency(%q<mongoid>, ["~> 1.0"])
end
end

10 changes: 0 additions & 10 deletions test/test_helper.rb

This file was deleted.

36 changes: 0 additions & 36 deletions test/unit/dm_session_store_test.rb

This file was deleted.

0 comments on commit 28db7b5

Please sign in to comment.