redis-actionpack-4.0.0/0000755000175000017500000000000012543535027016227 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/Gemfile0000644000175000017500000000045312543535027017524 0ustar balasankarcbalasankarcsource 'https://rubygems.org' gemspec gem 'redis-store', '~> 1.1.0', path: '../redis-store' gem 'redis-rack', '~> 1.5.0', path: '../redis-rack' version = ENV["RAILS_VERSION"] || "4" rails = case version when "master" {:github => "rails/rails"} else "~> #{version}.0" end gem "rails", rails redis-actionpack-4.0.0/.gitignore0000644000175000017500000000004112543535027020212 0ustar balasankarcbalasankarc*.gem .bundle Gemfile.lock pkg/* redis-actionpack-4.0.0/Rakefile0000644000175000017500000000021512543535027017672 0ustar balasankarcbalasankarcrequire 'bundler' Bundler.setup require 'rake' require 'bundler/gem_tasks' load 'tasks/redis.tasks.rb' task :default => 'redis:test:suite' redis-actionpack-4.0.0/redis-actionpack.gemspec0000644000175000017500000000234012543535027023013 0ustar balasankarcbalasankarc# -*- encoding: utf-8 -*- $:.push File.expand_path("../lib", __FILE__) require "redis/actionpack/version" Gem::Specification.new do |s| s.name = "redis-actionpack" s.version = Redis::ActionPack::VERSION s.authors = ["Luca Guidi"] s.email = ["me@lucaguidi.com"] s.homepage = "http://redis-store.org/redis-actionpack" s.summary = %q{Redis session store for ActionPack} s.description = %q{Redis session store for ActionPack} s.rubyforge_project = "redis-actionpack" s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } s.require_paths = ["lib"] s.add_runtime_dependency 'redis-store', '~> 1.1.0' s.add_runtime_dependency 'redis-rack', '~> 1.5.0' s.add_runtime_dependency 'actionpack', '~> 4' s.add_development_dependency 'rake', '~> 10' s.add_development_dependency 'bundler', '~> 1.3' s.add_development_dependency 'mocha', '~> 0.14.0' s.add_development_dependency 'minitest', '~> 4.2' s.add_development_dependency 'tzinfo' s.add_development_dependency 'mini_specunit' s.add_development_dependency 'mini_backtrace' end redis-actionpack-4.0.0/metadata.yml0000644000175000017500000001332412543535027020535 0ustar balasankarcbalasankarc--- !ruby/object:Gem::Specification name: redis-actionpack version: !ruby/object:Gem::Version version: 4.0.0 platform: ruby authors: - Luca Guidi autorequire: bindir: bin cert_chain: [] date: 2013-08-20 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: redis-store requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 1.1.0 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 1.1.0 - !ruby/object:Gem::Dependency name: redis-rack requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 1.5.0 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 1.5.0 - !ruby/object:Gem::Dependency name: actionpack requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '4' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '4' - !ruby/object:Gem::Dependency name: rake requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '10' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '10' - !ruby/object:Gem::Dependency name: bundler requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '1.3' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '1.3' - !ruby/object:Gem::Dependency name: mocha requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 0.14.0 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 0.14.0 - !ruby/object:Gem::Dependency name: minitest requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '4.2' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '4.2' - !ruby/object:Gem::Dependency name: tzinfo requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: mini_specunit requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: mini_backtrace requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' description: Redis session store for ActionPack email: - me@lucaguidi.com executables: [] extensions: [] extra_rdoc_files: [] files: - .gitignore - Gemfile - MIT-LICENSE - README.md - Rakefile - lib/action_dispatch/middleware/session/redis_store.rb - lib/redis-actionpack.rb - lib/redis/actionpack/version.rb - redis-actionpack.gemspec - test/dummy/.gitignore - test/dummy/Rakefile - test/dummy/app/controllers/test_controller.rb - test/dummy/config.ru - test/dummy/config/application.rb - test/dummy/config/boot.rb - test/dummy/config/environment.rb - test/dummy/config/initializers/secret_token.rb - test/dummy/config/initializers/session_store.rb - test/dummy/config/routes.rb - test/dummy/script/rails - test/fixtures/session_autoload_test/session_autoload_test/foo.rb - test/integration/redis_store_integration_test.rb - test/redis/actionpack/version_test.rb - test/test_helper.rb homepage: http://redis-store.org/redis-actionpack licenses: [] metadata: {} post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: redis-actionpack rubygems_version: 2.0.3 signing_key: specification_version: 4 summary: Redis session store for ActionPack test_files: - test/dummy/.gitignore - test/dummy/Rakefile - test/dummy/app/controllers/test_controller.rb - test/dummy/config.ru - test/dummy/config/application.rb - test/dummy/config/boot.rb - test/dummy/config/environment.rb - test/dummy/config/initializers/secret_token.rb - test/dummy/config/initializers/session_store.rb - test/dummy/config/routes.rb - test/dummy/script/rails - test/fixtures/session_autoload_test/session_autoload_test/foo.rb - test/integration/redis_store_integration_test.rb - test/redis/actionpack/version_test.rb - test/test_helper.rb redis-actionpack-4.0.0/lib/0000755000175000017500000000000012543535027016775 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/lib/redis/0000755000175000017500000000000012543535027020103 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/lib/redis/actionpack/0000755000175000017500000000000012543535027022217 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/lib/redis/actionpack/version.rb0000644000175000017500000000010012543535027024220 0ustar balasankarcbalasankarcclass Redis module ActionPack VERSION = '4.0.0' end end redis-actionpack-4.0.0/lib/redis-actionpack.rb0000644000175000017500000000021012543535027022533 0ustar balasankarcbalasankarcrequire 'redis-store' require 'action_pack' require 'redis/actionpack/version' require 'action_dispatch/middleware/session/redis_store' redis-actionpack-4.0.0/lib/action_dispatch/0000755000175000017500000000000012543535027022131 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/lib/action_dispatch/middleware/0000755000175000017500000000000012543535027024246 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/lib/action_dispatch/middleware/session/0000755000175000017500000000000012543535027025731 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/lib/action_dispatch/middleware/session/redis_store.rb0000644000175000017500000000063412543535027030603 0ustar balasankarcbalasankarcrequire 'redis-store' require 'redis-rack' require 'action_dispatch/middleware/session/abstract_store' module ActionDispatch module Session class RedisStore < Rack::Session::Redis include Compatibility include StaleSessionCheck def initialize(app, options = {}) options = options.dup options[:redis_server] ||= options[:servers] super end end end end redis-actionpack-4.0.0/MIT-LICENSE0000644000175000017500000000204512543535027017664 0ustar balasankarcbalasankarcCopyright (c) 2009 - 2011 Luca Guidi 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. redis-actionpack-4.0.0/test/0000755000175000017500000000000012543535027017206 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/redis/0000755000175000017500000000000012543535027020314 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/redis/actionpack/0000755000175000017500000000000012543535027022430 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/redis/actionpack/version_test.rb0000644000175000017500000000023412543535027025500 0ustar balasankarcbalasankarcrequire 'test_helper' describe Redis::ActionPack::VERSION do it 'returns current version' do Redis::ActionPack::VERSION.must_equal '4.0.0' end end redis-actionpack-4.0.0/test/fixtures/0000755000175000017500000000000012543535027021057 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/fixtures/session_autoload_test/0000755000175000017500000000000012543535027025471 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/fixtures/session_autoload_test/session_autoload_test/0000755000175000017500000000000012543535027032103 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/fixtures/session_autoload_test/session_autoload_test/foo.rb0000644000175000017500000000025512543535027033215 0ustar balasankarcbalasankarcmodule SessionAutoloadTest class Foo def initialize(bar='baz') @bar = bar end def inspect "#<#{self.class} bar:#{@bar.inspect}>" end end end redis-actionpack-4.0.0/test/test_helper.rb0000644000175000017500000000122012543535027022044 0ustar balasankarcbalasankarcrequire 'bundler/setup' require 'minitest/autorun' require 'active_support/core_ext/numeric/time' ENV["RAILS_ENV"] = "test" require File.expand_path("../dummy/config/environment.rb", __FILE__) require "rails/test_help" Rails.backtrace_cleaner.remove_silencers! def with_autoload_path(path) path = File.join(File.dirname(__FILE__), "fixtures", path) if ActiveSupport::Dependencies.autoload_paths.include?(path) yield else begin ActiveSupport::Dependencies.autoload_paths << path yield ensure ActiveSupport::Dependencies.autoload_paths.reject! {|p| p == path} ActiveSupport::Dependencies.clear end end end redis-actionpack-4.0.0/test/dummy/0000755000175000017500000000000012543535027020341 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/dummy/config.ru0000644000175000017500000000023312543535027022154 0ustar balasankarcbalasankarc# This file is used by Rack-based servers to start the application. require ::File.expand_path('../config/environment', __FILE__) run Dummy::Application redis-actionpack-4.0.0/test/dummy/.gitignore0000644000175000017500000000000612543535027022325 0ustar balasankarcbalasankarclog/* redis-actionpack-4.0.0/test/dummy/config/0000755000175000017500000000000012543535027021606 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/dummy/config/environment.rb0000644000175000017500000000022512543535027024476 0ustar balasankarcbalasankarc# Load the rails application require File.expand_path('../application', __FILE__) # Initialize the rails application Dummy::Application.initialize! redis-actionpack-4.0.0/test/dummy/config/routes.rb0000644000175000017500000000011512543535027023451 0ustar balasankarcbalasankarcDummy::Application.routes.draw do get ':action', :to => TestController end redis-actionpack-4.0.0/test/dummy/config/application.rb0000644000175000017500000000146212543535027024441 0ustar balasankarcbalasankarcrequire File.expand_path('../boot', __FILE__) require "action_controller/railtie" Bundler.require module Dummy class Application < Rails::Application # Disable class caching for session auto-load test config.cache_classes = false config.eager_load = false # Show full error reports and disable caching config.consider_all_requests_local = true config.action_controller.perform_caching = false # Raise exceptions instead of rendering exception templates config.action_dispatch.show_exceptions = false # Disable request forgery protection in test environment config.action_controller.allow_forgery_protection = false # Print deprecation notices to the stderr config.active_support.deprecation = :stderr config.secret_key_base = 'secret' end end redis-actionpack-4.0.0/test/dummy/config/boot.rb0000644000175000017500000000035412543535027023100 0ustar balasankarcbalasankarcrequire 'rubygems' gemfile = File.expand_path('../../../../Gemfile', __FILE__) if File.exist?(gemfile) ENV['BUNDLE_GEMFILE'] = gemfile require 'bundler' Bundler.setup end $:.unshift File.expand_path('../../../../lib', __FILE__) redis-actionpack-4.0.0/test/dummy/config/initializers/0000755000175000017500000000000012543535027024314 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/dummy/config/initializers/session_store.rb0000644000175000017500000000077412543535027027550 0ustar balasankarcbalasankarc# Be sure to restart your server when you modify this file. Dummy::Application.config.session_store :redis_store, :key => '_session_id', :servers => ["redis://127.0.0.1:6380/1/theplaylist", "redis://127.0.0.1:6381/1/theplaylist"] # Use the database for sessions instead of the cookie-based default, # which shouldn't be used to store highly confidential information # (create the session table with "rails generate session_migration") # Dummy::Application.config.session_store :active_record_store redis-actionpack-4.0.0/test/dummy/config/initializers/secret_token.rb0000644000175000017500000000076012543535027027331 0ustar balasankarcbalasankarc# Be sure to restart your server when you modify this file. # Your secret key for verifying the integrity of signed cookies. # If you change this key, all old signed cookies will become invalid! # Make sure the secret is at least 30 characters and all random, # no regular words or you'll be exposed to dictionary attacks. Dummy::Application.config.secret_token = 'a7d2ff143cdb3d1f9470a3ce2df7bb220a9c4498cb5c4a35150705de6719114b12ab7512a9618a2d3c25f8d6e62ab22c042445ed856ff674f4ee2faabd9d2041' redis-actionpack-4.0.0/test/dummy/Rakefile0000644000175000017500000000041612543535027022007 0ustar balasankarcbalasankarc#!/usr/bin/env rake # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. require File.expand_path('../config/application', __FILE__) Dummy::Application.load_tasks redis-actionpack-4.0.0/test/dummy/app/0000755000175000017500000000000012543535027021121 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/dummy/app/controllers/0000755000175000017500000000000012543535027023467 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/dummy/app/controllers/test_controller.rb0000644000175000017500000000134512543535027027241 0ustar balasankarcbalasankarcclass TestController < ActionController::Base def no_session_access head :ok end def set_session_value session[:foo] = "bar" head :ok end def set_session_value_with_expiry request.session_options[:expire_after] = 1.second set_session_value end def set_serialized_session_value session[:foo] = SessionAutoloadTest::Foo.new head :ok end def get_session_value render :text => "foo: #{session[:foo].inspect}" end def get_session_id session_id = request.session_options[:id] || cookies["_session_id"] render :text => session_id end def call_reset_session session[:bar] reset_session session[:bar] = "baz" head :ok end def rescue_action(e) raise end end redis-actionpack-4.0.0/test/dummy/script/0000755000175000017500000000000012543535027021645 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/dummy/script/rails0000755000175000017500000000044712543535027022712 0ustar balasankarcbalasankarc#!/usr/bin/env ruby # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. APP_PATH = File.expand_path('../../config/application', __FILE__) require File.expand_path('../../config/boot', __FILE__) require 'rails/commands' redis-actionpack-4.0.0/test/integration/0000755000175000017500000000000012543535027021531 5ustar balasankarcbalasankarcredis-actionpack-4.0.0/test/integration/redis_store_integration_test.rb0000644000175000017500000000663612543535027030055 0ustar balasankarcbalasankarcrequire 'test_helper' class RedisStoreIntegrationTest < ActionDispatch::IntegrationTest test "reads the data" do get '/set_session_value' response.must_be :success? cookies['_session_id'].wont_be_nil get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: "bar"' end test "should get nil session value" do get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: nil' end test "should delete the data after session reset" do get '/set_session_value' response.must_be :success? cookies['_session_id'].wont_be_nil session_cookie = cookies.send(:hash_for)['_session_id'] get '/call_reset_session' response.must_be :success? headers['Set-Cookie'].wont_equal [] cookies << session_cookie get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: nil' end test "should not send cookies on write, not read" do get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: nil' cookies['_session_id'].must_be_nil end test "should set session value after session reset" do get '/set_session_value' response.must_be :success? cookies['_session_id'].wont_be_nil session_id = cookies['_session_id'] get '/call_reset_session' response.must_be :success? headers['Set-Cookie'].wont_equal [] get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: nil' get '/get_session_id' response.must_be :success? response.body.wont_equal session_id end test "should be able to read session id without accessing the session hash" do get '/set_session_value' response.must_be :success? cookies['_session_id'].wont_be_nil session_id = cookies['_session_id'] get '/get_session_id' response.must_be :success? response.body.must_equal session_id end test "should auto-load unloaded class" do with_autoload_path "session_autoload_test" do get '/set_serialized_session_value' response.must_be :success? cookies['_session_id'].wont_be_nil end with_autoload_path "session_autoload_test" do get '/get_session_id' assert_response :success end with_autoload_path "session_autoload_test" do get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: #' end end test "should not resend the cookie again if session_id cookie is already exists" do get '/set_session_value' response.must_be :success? cookies['_session_id'].wont_be_nil get '/get_session_value' response.must_be :success? headers['Set-Cookie'].must_be_nil end test "should prevent session fixation" do get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: nil' session_id = cookies['_session_id'] reset! get '/set_session_value', :_session_id => session_id response.must_be :success? cookies['_session_id'].wont_equal session_id end test "should write the data with expiration time" do get '/set_session_value_with_expiry' response.must_be :success? get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: "bar"' sleep 1 get '/get_session_value' response.must_be :success? response.body.must_equal 'foo: nil' end end redis-actionpack-4.0.0/README.md0000644000175000017500000000167612543535027017520 0ustar balasankarcbalasankarc# Redis stores for ActionPack __`redis-actionpack`__ provides a session store for __ActionPack__, specifically for __ActionDispatch__. See the main [redis-store readme](https://github.com/jodosha/redis-store) for general guidelines. ## Installation # Gemfile gem 'redis-actionpack' ### Usage If you are using redis-store with Rails, consider using the [redis-rails gem](https://github.com/jodosha/redis-store/tree/master/redis-rails) instead. For standalone usage: ActionController::Base.cache_store = ActionDispatch::Session::RedisSessionStore.new ## Running tests gem install bundler git clone git://github.com/jodosha/redis-store.git cd redis-store/redis-actionpack bundle install bundle exec rake If you are on **Snow Leopard** you have to run `env ARCHFLAGS="-arch x86_64" bundle exec rake` ## Copyright (c) 2009 - 2011 Luca Guidi - [http://lucaguidi.com](http://lucaguidi.com), released under the MIT license