From: Tom Hughes Date: Thu, 4 Jun 2009 08:08:24 +0000 (+0000) Subject: Move to version 2.3.2 of rails. X-Git-Tag: live~7190 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/2f3e23f6eb2bd571a39486773f0f10d65a2398a1 Move to version 2.3.2 of rails. --- diff --git a/app/controllers/amf_controller.rb b/app/controllers/amf_controller.rb index 94b09c6fc..dd0438218 100644 --- a/app/controllers/amf_controller.rb +++ b/app/controllers/amf_controller.rb @@ -43,7 +43,6 @@ class AmfController < ApplicationController # Help methods for checking boundary sanity and area size include MapBoundary - session :off before_filter :check_api_writable # Main AMF handlers: process the raw AMF string (using AMF library) and diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 318719219..564f71899 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -1,6 +1,5 @@ class ApiController < ApplicationController - session :off before_filter :check_api_readable, :except => [:capabilities] after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout diff --git a/app/controllers/application.rb b/app/controllers/application_controller.rb similarity index 99% rename from app/controllers/application.rb rename to app/controllers/application_controller.rb index 6ead2d668..d7debcb6d 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application_controller.rb @@ -113,7 +113,7 @@ class ApplicationController < ActionController::Base I18n.locale = request.compatible_language_from(I18n.available_locales) - response.headers['Content-Language'] = I18n.locale + response.headers['Content-Language'] = I18n.locale.to_s end def api_call_handle_error diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index 469d45f35..ca42751d3 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -4,7 +4,6 @@ class ChangesetController < ApplicationController layout 'site' require 'xml/libxml' - session :off, :except => [:list, :list_user, :list_bbox] before_filter :authorize_web, :only => [:list, :list_user, :list_bbox] before_filter :set_locale, :only => [:list, :list_user, :list_bbox] before_filter :authorize, :only => [:create, :update, :delete, :upload, :include, :close] diff --git a/app/controllers/node_controller.rb b/app/controllers/node_controller.rb index eeaba6199..19add265d 100644 --- a/app/controllers/node_controller.rb +++ b/app/controllers/node_controller.rb @@ -3,7 +3,6 @@ class NodeController < ApplicationController require 'xml/libxml' - session :off before_filter :authorize, :only => [:create, :update, :delete] before_filter :require_public_data, :only => [:create, :update, :delete] before_filter :check_api_writable, :only => [:create, :update, :delete] diff --git a/app/controllers/old_node_controller.rb b/app/controllers/old_node_controller.rb index 5de39fdb6..c20dacf48 100644 --- a/app/controllers/old_node_controller.rb +++ b/app/controllers/old_node_controller.rb @@ -1,7 +1,6 @@ class OldNodeController < ApplicationController require 'xml/libxml' - session :off before_filter :check_api_readable after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout diff --git a/app/controllers/old_relation_controller.rb b/app/controllers/old_relation_controller.rb index 5bde0fe6c..eb274c4de 100644 --- a/app/controllers/old_relation_controller.rb +++ b/app/controllers/old_relation_controller.rb @@ -1,7 +1,6 @@ class OldRelationController < ApplicationController require 'xml/libxml' - session :off before_filter :check_api_readable after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout diff --git a/app/controllers/old_way_controller.rb b/app/controllers/old_way_controller.rb index 1e3546a0d..96c88d492 100644 --- a/app/controllers/old_way_controller.rb +++ b/app/controllers/old_way_controller.rb @@ -1,7 +1,6 @@ class OldWayController < ApplicationController require 'xml/libxml' - session :off before_filter :check_api_readable after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout diff --git a/app/controllers/relation_controller.rb b/app/controllers/relation_controller.rb index e1f23ac74..4f8e2d0b5 100644 --- a/app/controllers/relation_controller.rb +++ b/app/controllers/relation_controller.rb @@ -1,7 +1,6 @@ class RelationController < ApplicationController require 'xml/libxml' - session :off before_filter :authorize, :only => [:create, :update, :delete] before_filter :require_public_data, :only => [:create, :update, :delete] before_filter :check_api_writable, :only => [:create, :update, :delete] diff --git a/app/controllers/swf_controller.rb b/app/controllers/swf_controller.rb index 6400bd1fb..262662c7a 100644 --- a/app/controllers/swf_controller.rb +++ b/app/controllers/swf_controller.rb @@ -1,5 +1,4 @@ class SwfController < ApplicationController - session :off before_filter :check_api_readable # to log: diff --git a/app/controllers/way_controller.rb b/app/controllers/way_controller.rb index 2cd7abf60..4d345e063 100644 --- a/app/controllers/way_controller.rb +++ b/app/controllers/way_controller.rb @@ -1,7 +1,6 @@ class WayController < ApplicationController require 'xml/libxml' - session :off before_filter :authorize, :only => [:create, :update, :delete] before_filter :require_public_data, :only => [:create, :update, :delete] before_filter :check_api_writable, :only => [:create, :update, :delete] diff --git a/config/boot.rb b/config/boot.rb index 0a516880c..0ad0f787f 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -44,6 +44,7 @@ module Rails def load_initializer require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" Rails::Initializer.run(:install_gem_spec_stubs) + Rails::GemDependency.add_frozen_gem_path end end diff --git a/config/environment.rb b/config/environment.rb index 8f38f28be..c7fa3c483 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -5,7 +5,7 @@ ENV['RAILS_ENV'] ||= 'production' # Specifies gem version of Rails to use when vendor/rails is not present -RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION +RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION # Set the server URL SERVER_URL = ENV['OSM_SERVER_URL'] || 'www.openstreetmap.org' diff --git a/test/test_helper.rb b/test/test_helper.rb index 95b6e7e67..c210315a9 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + "/../config/environment") require 'test_help' load 'composite_primary_keys/fixtures.rb' -class Test::Unit::TestCase +class ActiveSupport::TestCase # Transactional fixtures accelerate your tests by wrapping each test method # in a transaction that's rolled back on completion. This ensures that the # test database remains unchanged so your fixtures don't have to be reloaded diff --git a/test/unit/changeset_tag_test.rb b/test/unit/changeset_tag_test.rb index 40f9c5ac3..46194b505 100644 --- a/test/unit/changeset_tag_test.rb +++ b/test/unit/changeset_tag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class ChangesetTagTest < Test::Unit::TestCase +class ChangesetTagTest < ActiveSupport::TestCase api_fixtures def test_changeset_tag_count @@ -14,7 +14,7 @@ class ChangesetTagTest < Test::Unit::TestCase tag.id = 1 tag.k = key*i tag.v = "v" - assert_valid tag + assert tag.valid? end end @@ -25,7 +25,7 @@ class ChangesetTagTest < Test::Unit::TestCase tag.id = 1 tag.k = "k" tag.v = val*i - assert_valid tag + assert tag.valid? end end diff --git a/test/unit/changeset_test.rb b/test/unit/changeset_test.rb index bc7abe085..bd53efc49 100644 --- a/test/unit/changeset_test.rb +++ b/test/unit/changeset_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class ChangesetTest < Test::Unit::TestCase +class ChangesetTest < ActiveSupport::TestCase api_fixtures def test_changeset_count diff --git a/test/unit/diary_comment_test.rb b/test/unit/diary_comment_test.rb index 8e2bbf32c..8c03d6a36 100644 --- a/test/unit/diary_comment_test.rb +++ b/test/unit/diary_comment_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class DiaryCommentTest < Test::Unit::TestCase +class DiaryCommentTest < ActiveSupport::TestCase api_fixtures fixtures :diary_comments diff --git a/test/unit/diary_entry_test.rb b/test/unit/diary_entry_test.rb index b28577b99..54ac0175b 100644 --- a/test/unit/diary_entry_test.rb +++ b/test/unit/diary_entry_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class DiaryEntryTest < Test::Unit::TestCase +class DiaryEntryTest < ActiveSupport::TestCase api_fixtures fixtures :diary_entries, :languages diff --git a/test/unit/friend_test.rb b/test/unit/friend_test.rb index 8c93146ae..6416e38c7 100644 --- a/test/unit/friend_test.rb +++ b/test/unit/friend_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class FriendTest < Test::Unit::TestCase +class FriendTest < ActiveSupport::TestCase api_fixtures fixtures :friends diff --git a/test/unit/message_test.rb b/test/unit/message_test.rb index a732aa586..d40d85f30 100644 --- a/test/unit/message_test.rb +++ b/test/unit/message_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class MessageTest < Test::Unit::TestCase +class MessageTest < ActiveSupport::TestCase api_fixtures fixtures :messages diff --git a/test/unit/node_tag_test.rb b/test/unit/node_tag_test.rb index fe0f112bf..cfe0b57f2 100644 --- a/test/unit/node_tag_test.rb +++ b/test/unit/node_tag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class NodeTagTest < Test::Unit::TestCase +class NodeTagTest < ActiveSupport::TestCase api_fixtures def test_tag_count @@ -24,7 +24,7 @@ class NodeTagTest < Test::Unit::TestCase tag.id = current_node_tags(:t1).id tag.k = key*i tag.v = "v" - assert_valid tag + assert tag.valid? end end @@ -35,7 +35,7 @@ class NodeTagTest < Test::Unit::TestCase tag.id = current_node_tags(:t1).id tag.k = "k" tag.v = val*i - assert_valid tag + assert tag.valid? end end diff --git a/test/unit/node_test.rb b/test/unit/node_test.rb index d1ec98e0d..acad7218c 100644 --- a/test/unit/node_test.rb +++ b/test/unit/node_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class NodeTest < Test::Unit::TestCase +class NodeTest < ActiveSupport::TestCase api_fixtures def test_node_count @@ -56,7 +56,7 @@ class NodeTest < Test::Unit::TestCase assert_equal dbnode.version, node.version assert_equal dbnode.visible, node.visible #assert_equal node.tile, QuadTile.tile_for_point(node.lat, node.lon) - assert_valid node + assert node.valid? end # This helper method will check to make sure that a node is outwith the world, diff --git a/test/unit/old_node_tag_test.rb b/test/unit/old_node_tag_test.rb index f2203005c..9acf32bf7 100644 --- a/test/unit/old_node_tag_test.rb +++ b/test/unit/old_node_tag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class OldNodeTest < Test::Unit::TestCase +class OldNodeTest < ActiveSupport::TestCase api_fixtures def test_old_node_tag_count @@ -15,7 +15,7 @@ class OldNodeTest < Test::Unit::TestCase tag.version = node_tags(:t1).version tag.k = key*i tag.v = "v" - assert_valid tag + assert tag.valid? end end @@ -27,7 +27,7 @@ class OldNodeTest < Test::Unit::TestCase tag.version = node_tags(:t1).version tag.k = "k" tag.v = val*i - assert_valid tag + assert tag.valid? end end diff --git a/test/unit/old_node_test.rb b/test/unit/old_node_test.rb index eb68baafb..10cb23900 100644 --- a/test/unit/old_node_test.rb +++ b/test/unit/old_node_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class OldNodeTest < Test::Unit::TestCase +class OldNodeTest < ActiveSupport::TestCase api_fixtures def test_old_node_count @@ -56,7 +56,7 @@ class OldNodeTest < Test::Unit::TestCase assert_equal dbnode.visible, node.visible assert_equal dbnode.timestamp, node.timestamp #assert_equal node.tile, QuadTile.tile_for_point(nodes(nod).lat, nodes(nod).lon) - assert_valid node + assert node.valid? end # This helpermethod will check to make sure that a node is outwith the world, diff --git a/test/unit/old_relation_tag_test.rb b/test/unit/old_relation_tag_test.rb index 77874bcc6..ece55d8d5 100644 --- a/test/unit/old_relation_tag_test.rb +++ b/test/unit/old_relation_tag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class OldRelationTagTest < Test::Unit::TestCase +class OldRelationTagTest < ActiveSupport::TestCase api_fixtures def test_tag_count @@ -15,7 +15,7 @@ class OldRelationTagTest < Test::Unit::TestCase tag.version = 1 tag.k = key*i tag.v = "v" - assert_valid tag + assert tag.valid? end end @@ -27,7 +27,7 @@ class OldRelationTagTest < Test::Unit::TestCase tag.version = 1 tag.k = "k" tag.v = val*i - assert_valid tag + assert tag.valid? end end diff --git a/test/unit/old_way_tag_test.rb b/test/unit/old_way_tag_test.rb index b2724cb01..4945c1497 100644 --- a/test/unit/old_way_tag_test.rb +++ b/test/unit/old_way_tag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class WayTagTest < Test::Unit::TestCase +class WayTagTest < ActiveSupport::TestCase api_fixtures def test_tag_count @@ -15,7 +15,7 @@ class WayTagTest < Test::Unit::TestCase tag.version = 1 tag.k = key*i tag.v = "v" - assert_valid tag + assert tag.valid? end end @@ -27,7 +27,7 @@ class WayTagTest < Test::Unit::TestCase tag.version = 1 tag.k = "k" tag.v = val*i - assert_valid tag + assert tag.valid? end end diff --git a/test/unit/relation_member_test.rb b/test/unit/relation_member_test.rb index 93fa55180..b4f817b05 100644 --- a/test/unit/relation_member_test.rb +++ b/test/unit/relation_member_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class RelationMemberTest < Test::Unit::TestCase +class RelationMemberTest < ActiveSupport::TestCase api_fixtures def test_relation_member_count diff --git a/test/unit/relation_tag_test.rb b/test/unit/relation_tag_test.rb index de31c8da8..81bcd60ac 100644 --- a/test/unit/relation_tag_test.rb +++ b/test/unit/relation_tag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class RelationTagTest < Test::Unit::TestCase +class RelationTagTest < ActiveSupport::TestCase api_fixtures def test_relation_tag_count @@ -14,7 +14,7 @@ class RelationTagTest < Test::Unit::TestCase tag.id = 1 tag.k = key*i tag.v = "v" - assert_valid tag + assert tag.valid? end end @@ -25,7 +25,7 @@ class RelationTagTest < Test::Unit::TestCase tag.id = 1 tag.k = "k" tag.v = val*i - assert_valid tag + assert tag.valid? end end diff --git a/test/unit/relation_test.rb b/test/unit/relation_test.rb index 6fba2b276..6b2363025 100644 --- a/test/unit/relation_test.rb +++ b/test/unit/relation_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class RelationTest < Test::Unit::TestCase +class RelationTest < ActiveSupport::TestCase api_fixtures def test_relation_count diff --git a/test/unit/trace_test.rb b/test/unit/trace_test.rb index f3fe1b769..a39aa4fa2 100644 --- a/test/unit/trace_test.rb +++ b/test/unit/trace_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class TraceTest < Test::Unit::TestCase +class TraceTest < ActiveSupport::TestCase api_fixtures def test_trace_count diff --git a/test/unit/tracepoint_test.rb b/test/unit/tracepoint_test.rb index 80534c2cb..9f85b9c8c 100644 --- a/test/unit/tracepoint_test.rb +++ b/test/unit/tracepoint_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class TracepointTest < Test::Unit::TestCase +class TracepointTest < ActiveSupport::TestCase api_fixtures def test_tracepoint_count diff --git a/test/unit/tracetag_test.rb b/test/unit/tracetag_test.rb index c61913ff0..41e77dfe4 100644 --- a/test/unit/tracetag_test.rb +++ b/test/unit/tracetag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class TracetagTest < Test::Unit::TestCase +class TracetagTest < ActiveSupport::TestCase api_fixtures def test_tracetag_count diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index fb8bab0a5..184c2436a 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class UserTest < Test::Unit::TestCase +class UserTest < ActiveSupport::TestCase api_fixtures fixtures :friends diff --git a/test/unit/user_token_test.rb b/test/unit/user_token_test.rb index 83a36f8d9..1fe263454 100644 --- a/test/unit/user_token_test.rb +++ b/test/unit/user_token_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class UserTokenTest < Test::Unit::TestCase +class UserTokenTest < ActiveSupport::TestCase api_fixtures fixtures :user_tokens diff --git a/test/unit/way_node_test.rb b/test/unit/way_node_test.rb index acc62d330..edb6558fa 100644 --- a/test/unit/way_node_test.rb +++ b/test/unit/way_node_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class WayNodeTest < Test::Unit::TestCase +class WayNodeTest < ActiveSupport::TestCase api_fixtures def test_way_nodes_count diff --git a/test/unit/way_tag_test.rb b/test/unit/way_tag_test.rb index 018263da1..f5a931f6a 100644 --- a/test/unit/way_tag_test.rb +++ b/test/unit/way_tag_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class WayTagTest < Test::Unit::TestCase +class WayTagTest < ActiveSupport::TestCase api_fixtures def test_way_tag_count @@ -14,7 +14,7 @@ class WayTagTest < Test::Unit::TestCase tag.id = current_way_tags(:t1).id tag.k = key*i tag.v = current_way_tags(:t1).v - assert_valid tag + assert tag.valid? end end @@ -25,7 +25,7 @@ class WayTagTest < Test::Unit::TestCase tag.id = current_way_tags(:t1).id tag.k = "k" tag.v = val*i - assert_valid tag + assert tag.valid? end end diff --git a/test/unit/way_test.rb b/test/unit/way_test.rb index 55ab092ea..c173454e4 100644 --- a/test/unit/way_test.rb +++ b/test/unit/way_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class WayTest < Test::Unit::TestCase +class WayTest < ActiveSupport::TestCase api_fixtures # Check that we have the correct number of currnet ways in the db diff --git a/vendor/plugins/sql_session_store/LICENSE b/vendor/plugins/sql_session_store/LICENSE index 5cb5c7b95..adab131e2 100644 --- a/vendor/plugins/sql_session_store/LICENSE +++ b/vendor/plugins/sql_session_store/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2006-2008 Dr.-Ing. Stefan Kaes +Copyright (c) 2006 Dr.-Ing. Stefan Kaes Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/vendor/plugins/sql_session_store/README b/vendor/plugins/sql_session_store/README index 07b083343..593e957cd 100755 --- a/vendor/plugins/sql_session_store/README +++ b/vendor/plugins/sql_session_store/README @@ -1,8 +1,20 @@ == SqlSessionStore -See http://railsexpress.de/blog/articles/2005/12/19/roll-your-own-sql-session-store +This version of SqlSessionStore properly supports both CGI-based sessions (Rails < 2.3) +and Rack-based sessions released in Rails 2.3. For the latest version of +SqlSessionStore+, +see: -Only Mysql, Postgres and Oracle are currently supported (others work, + http://github.com/nateware/sql_session_store/tree/master + +To install, use: + + script/plugin install git://github.com/nateware/sql_session_store.git + +This version also includes the "native columns" feature, which enables +session[:xyz]+ +to map directly to column +xyz+ in the sessions table transparently. For info, +scroll down to "Step 4". + +Note: Only Mysql, PostgreSQL, and Oracle are currently supported (others work, but you won't see much performance improvement). == Step 1 @@ -10,29 +22,33 @@ but you won't see much performance improvement). If you have generated your sessions table using rake db:sessions:create, go to Step 2 If you're using an old version of sql_session_store, run - script/generate sql_session_store DB + + script/generate sql_session_store [DB] + where DB is mysql, postgresql or oracle Then run - rake migrate -or + rake db:migrate -for edge rails. + +to create the sessions table. == Step 2 -Add the code below after the initializer config section: +Add the code below in +config/environment.rb+, inside the initializers section - ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS. - update(:database_manager => SqlSessionStore) + # Use SqlSessionStore instead of the standard ActiveRecord store + config.action_controller.session_store = :sql_session_store -Finally, depending on your database type, add +Then, depending on your database type, add SqlSessionStore.session_class = MysqlSession or SqlSessionStore.session_class = PostgresqlSession + or + SqlSessionStore.session_class = OracleSession after the initializer section in environment.rb @@ -46,6 +62,32 @@ environment.rb: SqlSession.establish_connection :sessions +== Step 4 (optional) + +If you want to store certain pieces of data as actual columns in the ++sessions+ table transparently, simply update the sessions migration +to include the columns. For example, if you wanted to store +user_id+ +and +language+ as columns, your migration might look something like: + + create_table :sessions do |t| + t.string :session_id, :null => false, :references => nil, :unique => true + t.integer :user_id + t.string :language + t.text :data + t.timestamps + end + +Then, use the "native columns" feature of the specific database driver: + + OracleSession.native_columns = [:user_id, :language] + +This will map these columns transparently for you. Simply access them like +normal columns: + + session[:user_id] = @user.id + session[:language] = @language + +And the appropriate columns in the sessions table will be updated for you. == IMPORTANT NOTES diff --git a/vendor/plugins/sql_session_store/init.rb b/vendor/plugins/sql_session_store/init.rb index 956151ea7..e69de29bb 100755 --- a/vendor/plugins/sql_session_store/init.rb +++ b/vendor/plugins/sql_session_store/init.rb @@ -1 +0,0 @@ -require 'sql_session_store' diff --git a/vendor/plugins/sql_session_store/lib/abstract_session.rb b/vendor/plugins/sql_session_store/lib/abstract_session.rb new file mode 100644 index 000000000..eda907bbd --- /dev/null +++ b/vendor/plugins/sql_session_store/lib/abstract_session.rb @@ -0,0 +1,88 @@ +# +# This is a common base class for database-specific session store implementations +# +require 'cgi/session' +require 'base64' + +class AbstractSession + # if you need Rails components, and you have a pages which create + # new sessions, and embed components insides this pages that need + # session access, then you *must* set +eager_session_creation+ to + # true (as of Rails 1.0). + cattr_accessor :eager_session_creation + @@eager_session_creation = false + + # Some attributes you may want to store natively in the database + # in actual columns. This allows other models and database queries + # to get to the data without having to unmarshal the data blob. + # One common example is the user_id of the session, so it can be + # related to the users table + cattr_accessor :native_columns + @@native_columns = [] + + # Allow the user to change the table name + cattr_accessor :table_name + @@table_name = 'sessions' + + cattr_reader :timestamp_columns + @@timestamp_columns = [:created_at, :updated_at] + + attr_accessor :id, :session_id, :data + + def initialize(session_id, data, id=nil) + @session_id = session_id + @data = data + @id = id + end + + class << self + # delete all sessions meeting a given +condition+. it is the + # caller's responsibility to pass a valid sql condition + def delete_all(condition=nil) + if condition + session_connection.exec("DELETE FROM sessions WHERE #{condition}") + else + session_connection.exec("DELETE FROM sessions") + end + end + + # retrieve the session table connection and get the 'raw' driver connection from it + def session_connection + SqlSession.connection.raw_connection + end + + def unmarshalize(data) + Marshal.load(Base64.decode64(data)) + end + + def marshalize(data) + Base64.encode64(Marshal.dump(data)) + end + end +end + +__END__ + +# This software is released under the MIT license +# +# Copyright (c) 2005, 2006, 2008 Stefan Kaes +# Copyright (c) 2008, 2009 Nate Wiger +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: + +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/plugins/sql_session_store/lib/mysql_session.rb b/vendor/plugins/sql_session_store/lib/mysql_session.rb index 8c86384c9..9469c55de 100755 --- a/vendor/plugins/sql_session_store/lib/mysql_session.rb +++ b/vendor/plugins/sql_session_store/lib/mysql_session.rb @@ -1,10 +1,5 @@ require 'mysql' -# allow access to the real Mysql connection -class ActiveRecord::ConnectionAdapters::MysqlAdapter - attr_reader :connection -end - # MysqlSession is a down to the bare metal session store # implementation to be used with +SQLSessionStore+. It is much faster # than the default ActiveRecord implementation. @@ -13,30 +8,8 @@ end # 'data', 'created_at' and 'updated_at'. If you want use other names, # you will need to change the SQL statments in the code. -class MysqlSession - - # if you need Rails components, and you have a pages which create - # new sessions, and embed components insides this pages that need - # session access, then you *must* set +eager_session_creation+ to - # true (as of Rails 1.0). - cattr_accessor :eager_session_creation - @@eager_session_creation = false - - attr_accessor :id, :session_id, :data - - def initialize(session_id, data) - @session_id = session_id - @data = data - @id = nil - end - +class MysqlSession < AbstractSession class << self - - # retrieve the session table connection and get the 'raw' Mysql connection from it - def session_connection - SqlSession.connection.connection - end - # try to find a session with a given +session_id+. returns nil if # no such session exists. note that we don't retrieve # +created_at+ and +updated_at+ as they are not accessed anywhyere @@ -44,13 +17,12 @@ class MysqlSession def find_session(session_id) connection = session_connection connection.query_with_result = true - session_id = Mysql::quote(session_id) result = connection.query("SELECT id, data FROM sessions WHERE `session_id`='#{session_id}' LIMIT 1") my_session = nil # each is used below, as other methods barf on my 64bit linux machine # I suspect this to be a bug in mysql-ruby result.each do |row| - my_session = new(session_id, row[1]) + my_session = new(session_id, AbstractSession.unmarshalize(row[1])) my_session.id = row[0] end result.free @@ -59,12 +31,11 @@ class MysqlSession # create a new session with given +session_id+ and +data+ # and save it immediately to the database - def create_session(session_id, data) - session_id = Mysql::quote(session_id) + def create_session(session_id, data={}) new_session = new(session_id, data) if @@eager_session_creation connection = session_connection - connection.query("INSERT INTO sessions (`created_at`, `updated_at`, `session_id`, `data`) VALUES (NOW(), NOW(), '#{session_id}', '#{Mysql::quote(data)}')") + connection.query("INSERT INTO sessions (`created_at`, `updated_at`, `session_id`, `data`) VALUES (NOW(), NOW(), '#{session_id}', '#{Mysql::quote(AbstractSession.marshalize(data))}')") new_session.id = connection.insert_id end new_session @@ -90,11 +61,11 @@ class MysqlSession if @id # if @id is not nil, this is a session already stored in the database # update the relevant field using @id as key - connection.query("UPDATE sessions SET `updated_at`=NOW(), `data`='#{Mysql::quote(data)}' WHERE id=#{@id}") + connection.query("UPDATE sessions SET `updated_at`=NOW(), `data`='#{Mysql::quote(AbstractSession.marshalize(data))}' WHERE id=#{@id}") else # if @id is nil, we need to create a new session in the database - # and set @id to the primary key of the inserted record - connection.query("INSERT INTO sessions (`created_at`, `updated_at`, `session_id`, `data`) VALUES (NOW(), NOW(), '#{@session_id}', '#{Mysql::quote(data)}')") + # and set @id to the primary key of the inserted record + connection.query("INSERT INTO sessions (`created_at`, `updated_at`, `session_id`, `data`) VALUES (NOW(), NOW(), '#{@session_id}', '#{Mysql::quote(AbstractSession.marshalize(data))}')") @id = connection.insert_id end end @@ -110,7 +81,7 @@ __END__ # This software is released under the MIT license # -# Copyright (c) 2005-2008 Stefan Kaes +# Copyright (c) 2005,2006 Stefan Kaes # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the diff --git a/vendor/plugins/sql_session_store/lib/oracle_session.rb b/vendor/plugins/sql_session_store/lib/oracle_session.rb index 0b82f6391..1247de4a2 100755 --- a/vendor/plugins/sql_session_store/lib/oracle_session.rb +++ b/vendor/plugins/sql_session_store/lib/oracle_session.rb @@ -1,10 +1,5 @@ require 'oci8' -# allow access to the real Oracle connection -class ActiveRecord::ConnectionAdapters::OracleAdapter - attr_reader :connection -end - # OracleSession is a down to the bare metal session store # implementation to be used with +SQLSessionStore+. It is much faster # than the default ActiveRecord implementation. @@ -15,74 +10,81 @@ end # # This table layout is compatible with ActiveRecordStore. -class OracleSession - - # if you need Rails components, and you have a pages which create - # new sessions, and embed components insides these pages that need - # session access, then you *must* set +eager_session_creation+ to - # true (as of Rails 1.0). Not needed for Rails 1.1 and up. - cattr_accessor :eager_session_creation - @@eager_session_creation = false - - attr_accessor :id, :session_id, :data - - def initialize(session_id, data) - @session_id = session_id - @data = data - @id = nil - end - +class OracleSession < AbstractSession class << self - - # retrieve the session table connection and get the 'raw' Oracle connection from it - def session_connection - SqlSession.connection.connection - end - # try to find a session with a given +session_id+. returns nil if # no such session exists. note that we don't retrieve # +created_at+ and +updated_at+ as they are not accessed anywhyere # outside this class. def find_session(session_id) new_session = nil - connection = session_connection - result = connection.exec("SELECT id, data FROM sessions WHERE session_id = :a and rownum=1", session_id) # Make sure to save the @id if we find an existing session - while row = result.fetch - new_session = new(session_id,row[1].read) - new_session.id = row[0] + cursor = session_connection.exec(find_session_sql, session_id) + if row = cursor.fetch_hash + new_session = new(session_id, unmarshalize(row['DATA'].read), row['ID']) + + # Pull out native columns + native_columns.each do |col| + new_session.data[col] = row[col.to_s.upcase] + new_session.data[col] = row[col.to_s.upcase] + end end - result.close + + cursor.close new_session end # create a new session with given +session_id+ and +data+ # and save it immediately to the database - def create_session(session_id, data) + def create_session(session_id, data={}) new_session = new(session_id, data) - if @@eager_session_creation - connection = session_connection - connection.exec("INSERT INTO sessions (id, created_at, updated_at, session_id, data)"+ - " VALUES (sessions_seq.nextval, SYSDATE, SYSDATE, :a, :b)", - session_id, data) - result = connection.exec("SELECT sessions_seq.currval FROM dual") - row = result.fetch - new_session.id = row[0].to_i + if eager_session_creation + new_session.id = next_id + cursor = session_connection.parse(insert_session_sql) + + # Now bind all variables + cursor.bind_param(':id', new_session.id) + cursor.bind_param(':session_id', session_id) + native_columns.each do |col| + cursor.bind_param(":#{col}", data.delete(col) || '') + end + cursor.bind_param(':data', marshalize(data)) + cursor.exec + cursor.close end new_session end - # delete all sessions meeting a given +condition+. it is the - # caller's responsibility to pass a valid sql condition - def delete_all(condition=nil) - if condition - session_connection.exec("DELETE FROM sessions WHERE #{condition}") - else - session_connection.exec("DELETE FROM sessions") - end + # Internal methods for generating SQL + # Get the next ID from the sequence + def next_id + cursor = session_connection.exec("SELECT #{table_name}_seq.nextval FROM dual") + id = cursor.fetch.first.to_i + cursor.close + id + end + + # Dynamically generate finder SQL so we can include our special columns + def find_session_sql + @find_session_sql ||= + "SELECT " + ([:id, :data] + native_columns).join(', ') + + " FROM #{table_name} WHERE session_id = :session_id AND rownum = 1" + end + + def insert_session_sql + @insert_session_sql ||= + "INSERT INTO #{table_name} (" + ([:id, :data, :session_id] + native_columns + [:created_at, :updated_at]).join(', ') + ")" + + " VALUES (" + ([:id, :data, :session_id] + native_columns).collect{|col| ":#{col}" }.join(', ') + + " , SYSDATE, SYSDATE)" end + def update_session_sql + @update_session_sql ||= + "UPDATE #{table_name} SET "+ + ([:data] + native_columns).collect{|col| "#{col} = :#{col}"}.join(', ') + + " , updated_at = SYSDATE WHERE ID = :id" + end end # class methods # update session with given +data+. @@ -90,26 +92,33 @@ class OracleSession # column `updated_at` will be done by the database itself def update_session(data) connection = self.class.session_connection + cursor = nil if @id # if @id is not nil, this is a session already stored in the database # update the relevant field using @id as key - connection.exec("UPDATE sessions SET updated_at = SYSDATE, data = :a WHERE id = :b", - data, @id) + cursor = connection.parse(self.class.update_session_sql) else # if @id is nil, we need to create a new session in the database # and set @id to the primary key of the inserted record - connection.exec("INSERT INTO sessions (id, created_at, updated_at, session_id, data)"+ - " VALUES (sessions_seq.nextval, SYSDATE, SYSDATE, :a, :b)", - @session_id, data) - result = connection.exec("SELECT sessions_seq.currval FROM dual") - row = result.fetch - @id = row[0].to_i + @id = self.class.next_id + + cursor = connection.parse(self.class.insert_session_sql) + cursor.bind_param(':session_id', @session_id) + end + + # These are always the same, as @id is set above! + cursor.bind_param(':id', @id, Fixnum) + native_columns.each do |col| + cursor.bind_param(":#{col}", data.delete(col) || '') end + cursor.bind_param(':data', self.class.marshalize(data)) + cursor.exec + cursor.close end # destroy the current session def destroy - self.class.delete_all("session_id='#{session_id}'") + self.class.delete_all(["session_id = ?", session_id]) end end @@ -118,9 +127,9 @@ __END__ # This software is released under the MIT license # -# Copyright (c) 2006-2008 Stefan Kaes -# Copyright (c) 2006-2008 Tiago Macedo -# Copyright (c) 2007-2008 Nate Wiger +# Copyright (c) 2006 Stefan Kaes +# Copyright (c) 2006 Tiago Macedo +# Copyright (c) 2007 Nate Wiger # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the diff --git a/vendor/plugins/sql_session_store/lib/postgresql_session.rb b/vendor/plugins/sql_session_store/lib/postgresql_session.rb index 53dc04c73..bf7bf633b 100755 --- a/vendor/plugins/sql_session_store/lib/postgresql_session.rb +++ b/vendor/plugins/sql_session_store/lib/postgresql_session.rb @@ -1,10 +1,5 @@ require 'pg' -# allow access to the real Posqtgresql connection -class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter - attr_reader :connection -end - # PostgresqlSession is a down to the bare metal session store # implementation to be used with +SQLSessionStore+. It is much faster # than the default ActiveRecord implementation. @@ -15,30 +10,8 @@ end # # This table layout is compatible with ActiveRecordStore. -class PostgresqlSession - - # if you need Rails components, and you have a pages which create - # new sessions, and embed components insides these pages that need - # session access, then you *must* set +eager_session_creation+ to - # true (as of Rails 1.0). Not needed for Rails 1.1 and up. - cattr_accessor :eager_session_creation - @@eager_session_creation = false - - attr_accessor :id, :session_id, :data - - def initialize(session_id, data) - @session_id = session_id - @data = data - @id = nil - end - +class PostgresqlSession < AbstractSession class << self - - # retrieve the session table connection and get the 'raw' Postgresql connection from it - def session_connection - SqlSession.connection.connection - end - # try to find a session with a given +session_id+. returns nil if # no such session exists. note that we don't retrieve # +created_at+ and +updated_at+ as they are not accessed anywhyere @@ -47,7 +20,7 @@ class PostgresqlSession connection = session_connection result = connection.query("SELECT id, data FROM sessions WHERE session_id = $1 LIMIT 1", [session_id]) if result.ntuples > 0 - my_session = new(session_id, result.getvalue(0, 1)) + my_session = new(session_id, AbstractSession.unmarshalize(result.getvalue(0, 1))) my_session.id = result.getvalue(0, 0) else my_session = nil @@ -58,11 +31,11 @@ class PostgresqlSession # create a new session with given +session_id+ and +data+ # and save it immediately to the database - def create_session(session_id, data) + def create_session(session_id, data={}) new_session = new(session_id, data) if @@eager_session_creation connection = session_connection - connection.query("INSERT INTO sessions (created_at, updated_at, session_id, data) VALUES (NOW(), NOW(), $1, $2)", [session_id, data]) + connection.query("INSERT INTO sessions (created_at, updated_at, session_id, data) VALUES (NOW(), NOW(), $1, $2)", [session_id, AbstractSession.marshalize(data)]) new_session.id = connection.lastval end new_session @@ -70,9 +43,9 @@ class PostgresqlSession # delete all sessions meeting a given +condition+. it is the # caller's responsibility to pass a valid sql condition - def delete_all(id=nil) - if id - session_connection.query("DELETE FROM sessions WHERE session_id = $1", [id]) + def delete_all(condition=nil) + if condition + session_connection.query("DELETE FROM sessions WHERE #{condition}") else session_connection.query("DELETE FROM sessions") end @@ -88,11 +61,11 @@ class PostgresqlSession if @id # if @id is not nil, this is a session already stored in the database # update the relevant field using @id as key - connection.query("UPDATE sessions SET updated_at = NOW(), data = $1 WHERE id = $2", [data, @id]) + connection.query("UPDATE sessions SET updated_at = NOW(), data = $1 WHERE id = $2", [AbstractSession.marshalize(data), @id]) else # if @id is nil, we need to create a new session in the database # and set @id to the primary key of the inserted record - result = connection.query("INSERT INTO sessions (created_at, updated_at, session_id, data) VALUES (NOW(), NOW(), $1, $2) RETURNING id", [@session_id, data]) + result = connection.query("INSERT INTO sessions (created_at, updated_at, session_id, data) VALUES (NOW(), NOW(), $1, $2) RETURNING id", [@session_id, AbstractSession.marshalize(data)]) @id = result.getvalue(0, 0) result.clear end @@ -100,7 +73,7 @@ class PostgresqlSession # destroy the current session def destroy - self.class.delete_all(session_id) + self.class.delete_all("session_id='#{session_id}'") end end @@ -109,7 +82,7 @@ __END__ # This software is released under the MIT license # -# Copyright (c) 2006-2008 Stefan Kaes +# Copyright (c) 2006 Stefan Kaes # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the diff --git a/vendor/plugins/sql_session_store/lib/sql_session.rb b/vendor/plugins/sql_session_store/lib/sql_session.rb index 19d2ad51e..6db551753 100644 --- a/vendor/plugins/sql_session_store/lib/sql_session.rb +++ b/vendor/plugins/sql_session_store/lib/sql_session.rb @@ -1,27 +1,27 @@ -# An ActiveRecord class which corresponds to the database table -# +sessions+. Functions +find_session+, +create_session+, -# +update_session+ and +destroy+ constitute the interface to class -# +SqlSessionStore+. - -class SqlSession < ActiveRecord::Base - # this class should not be reloaded - def self.reloadable? - false - end - - # retrieve session data for a given +session_id+ from the database, - # return nil if no such session exists - def self.find_session(session_id) - find :first, :conditions => "session_id='#{session_id}'" - end - - # create a new session with given +session_id+ and +data+ - def self.create_session(session_id, data) - new(:session_id => session_id, :data => data) - end - - # update session data and store it in the database - def update_session(data) - update_attribute('data', data) - end -end +# An ActiveRecord class which corresponds to the database table +# +sessions+. Functions +find_session+, +create_session+, +# +update_session+ and +destroy+ constitute the interface to class +# +SqlSessionStore+. + +class SqlSession < ActiveRecord::Base + # this class should not be reloaded + def self.reloadable? + false + end + + # retrieve session data for a given +session_id+ from the database, + # return nil if no such session exists + def self.find_session(session_id) + find :first, :conditions => { :session_id => session_id } + end + + # create a new session with given +session_id+ and +data+ + def self.create_session(session_id, data) + new(:session_id => session_id, :data => data) + end + + # update session data and store it in the database + def update_session(data) + update_attribute('data', data) + end +end diff --git a/vendor/plugins/sql_session_store/lib/sql_session_store.rb b/vendor/plugins/sql_session_store/lib/sql_session_store.rb index 8b0ff156f..0a5fab7f0 100755 --- a/vendor/plugins/sql_session_store/lib/sql_session_store.rb +++ b/vendor/plugins/sql_session_store/lib/sql_session_store.rb @@ -1,47 +1,98 @@ -require 'active_record' -require 'cgi' -require 'cgi/session' -begin - require 'base64' -rescue LoadError -end +require 'base64' # +SqlSessionStore+ is a stripped down, optimized for speed version of # class +ActiveRecordStore+. -class SqlSessionStore +# Hack for older versions of Rails +unless defined?(ActionController::Session::AbstractStore) + module ActionController + module Session + class AbstractStore + end + end + end +end + +class SqlSessionStore < ActionController::Session::AbstractStore # The class to be used for creating, retrieving and updating sessions. - # Defaults to SqlSessionStore::Session, which is derived from +ActiveRecord::Base+. + # Defaults to SqlSessionStore::SqlSession, which is derived from +ActiveRecord::Base+. # # In order to achieve acceptable performance you should implement # your own session class, similar to the one provided for Myqsl. # # Only functions +find_session+, +create_session+, - # +update_session+ and +destroy+ are required. See file +mysql_session.rb+. - + # +update_session+ and +destroy+ are required. The best implementations + # are +postgresql_session.rb+ and +oracle_session.rb+. cattr_accessor :session_class - @@session_class = SqlSession + self.session_class = SqlSession + + # Rack-ism for Rails 2.3.0 + SESSION_RECORD_KEY = 'rack.session.record'.freeze + + # Backwards-compat indicators (booleans for speed) + cattr_accessor :use_rack_session, :use_cgi_session + self.use_rack_session = false + self.use_cgi_session = false + + # For Rack compatibility (Rails 2.3.0+) + def get_session(env, sid) + sid ||= generate_sid + #puts "get_session(#{sid})" + session = find_or_create_session(sid) + env[SESSION_RECORD_KEY] = session + [sid, session.data] + end - # Create a new SqlSessionStore instance. - # - # +session+ is the session for which this instance is being created. - # - # +option+ is currently ignored as no options are recognized. + # For Rack compatibility (Rails 2.3.0+) + def set_session(env, sid, session_data) + #puts "set_session(#{sid})" + session = env[SESSION_RECORD_KEY] + session.update_session(session_data) + return true # indicate ok to Rack + end - def initialize(session, option=nil) - if @session = @@session_class.find_session(session.session_id) - @data = unmarshalize(@session.data) + # Create a new SqlSessionStore instance. This method hooks into + # the find/create methods of a given driver class. + # + # +session_id+ is the session ID for which this instance is being created. + def find_or_create_session(session_id) + if @session = session_class.find_session(session_id) + @data = @session.data else - @session = @@session_class.create_session(session.session_id, marshalize({})) + @session = session_class.create_session(session_id) @data = {} end + @session + end + + # Below here is for pre-Rails 2.3.0 and not used in Rack-based servers + # The CGI::Session methods are a bit odd in that half are class and half + # are instance-based methods + # Note that +option+ is currently ignored as no options are recognized. + def initialize(session, options={}) + # This is just some optimization since this is called over and over and over + if self.use_rack_session + super # MUST call super for Rack sessions + return true + elsif self.use_cgi_session + find_or_create_session(session.session_id) + else + version ||= Rails.version.split('.') + if version[0].to_i == 2 && version[1].to_i < 3 + find_or_create_session(session.session_id) + self.use_cgi_session = true + else + super # MUST call super for Rack sessions + self.use_rack_session = true + end + end end # Update the database and disassociate the session object def close if @session - @session.update_session(marshalize(@data)) + @session.update_session(@data) @session = nil end end @@ -57,43 +108,33 @@ class SqlSessionStore # Restore session data from the session object def restore if @session - @data = unmarshalize(@session.data) + @data = @session.data end end # Save session data in the session object def update if @session - @session.update_session(marshalize(@data)) + @session.update_session(@data) end end - - private - if defined?(Base64) - def unmarshalize(data) - Marshal.load(Base64.decode64(data)) - end - - def marshalize(data) - Base64.encode64(Marshal.dump(data)) - end - else - def unmarshalize(data) - Marshal.load(data.unpack("m").first) - end - - def marshalize(data) - [Marshal.dump(data)].pack("m") - end + + def id + @session.id end - end +class CGI::Session + def id + @dbman.id + end +end __END__ # This software is released under the MIT license # -# Copyright (c) 2005-2008 Stefan Kaes +# Copyright (c) 2008, 2009 Nate Wiger +# Copyright (c) 2005, 2006 Stefan Kaes # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the diff --git a/vendor/plugins/sql_session_store/lib/sqlite_session.rb b/vendor/plugins/sql_session_store/lib/sqlite_session.rb index 822b23231..e675c488d 100755 --- a/vendor/plugins/sql_session_store/lib/sqlite_session.rb +++ b/vendor/plugins/sql_session_store/lib/sqlite_session.rb @@ -1,10 +1,5 @@ require 'sqlite3' -# allow access to the real Sqlite connection -#class ActiveRecord::ConnectionAdapters::SQLiteAdapter -# attr_reader :connection -#end - # SqliteSession is a down to the bare metal session store # implementation to be used with +SQLSessionStore+. It is much faster # than the default ActiveRecord implementation. @@ -13,37 +8,15 @@ require 'sqlite3' # 'data', 'created_at' and 'updated_at'. If you want use other names, # you will need to change the SQL statments in the code. -class SqliteSession - - # if you need Rails components, and you have a pages which create - # new sessions, and embed components insides this pages that need - # session access, then you *must* set +eager_session_creation+ to - # true (as of Rails 1.0). - cattr_accessor :eager_session_creation - @@eager_session_creation = false - - attr_accessor :id, :session_id, :data - - def initialize(session_id, data) - @session_id = session_id - @data = data - @id = nil - end +class SqliteSession < AbstractSession class << self - - # retrieve the session table connection and get the 'raw' Sqlite connection from it - def session_connection - SqlSession.connection.instance_variable_get(:@connection) - end - # try to find a session with a given +session_id+. returns nil if # no such session exists. note that we don't retrieve # +created_at+ and +updated_at+ as they are not accessed anywhyere # outside this class def find_session(session_id) connection = session_connection - session_id = SQLite3::Database.quote(session_id) result = connection.execute("SELECT id, data FROM sessions WHERE `session_id`='#{session_id}' LIMIT 1") my_session = nil # each is used below, as other methods barf on my 64bit linux machine @@ -59,7 +32,6 @@ class SqliteSession # create a new session with given +session_id+ and +data+ # and save it immediately to the database def create_session(session_id, data) - session_id = SQLite3::Database.quote(session_id) new_session = new(session_id, data) if @@eager_session_creation connection = session_connection @@ -110,8 +82,8 @@ __END__ # This software is released under the MIT license # -# Copyright (c) 2005-2008 Stefan Kaes -# Copyright (c) 2006-2008 Ted X Toth +# Copyright (c) 2005, 2006 Stefan Kaes +# Copyright (c) 2006 Ted X Toth # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the