{"id":19010314,"url":"https://github.com/railsware/rack_session_access","last_synced_at":"2025-05-16T06:07:00.064Z","repository":{"id":2177060,"uuid":"3124047","full_name":"railsware/rack_session_access","owner":"railsware","description":"Rack middleware that provides access to rack.session environment","archived":false,"fork":false,"pushed_at":"2019-10-29T16:32:08.000Z","size":39,"stargazers_count":258,"open_issues_count":4,"forks_count":30,"subscribers_count":56,"default_branch":"master","last_synced_at":"2025-05-11T13:46:09.201Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/railsware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-01-07T11:05:02.000Z","updated_at":"2025-01-22T17:41:12.000Z","dependencies_parsed_at":"2022-08-06T12:01:11.387Z","dependency_job_id":null,"html_url":"https://github.com/railsware/rack_session_access","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/railsware%2Frack_session_access","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/railsware%2Frack_session_access/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/railsware%2Frack_session_access/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/railsware%2Frack_session_access/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/railsware","download_url":"https://codeload.github.com/railsware/rack_session_access/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478190,"owners_count":22077676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T19:10:51.263Z","updated_at":"2025-05-16T06:06:55.056Z","avatar_url":"https://github.com/railsware.png","language":"Ruby","funding_links":[],"categories":["Middlewares"],"sub_categories":[],"readme":"# Rack Session Access [![Build Status](https://travis-ci.org/railsware/rack_session_access.svg?branch=master)](https://travis-ci.org/railsware/rack_session_access)\n\nRackSessionAccess provides rack middleware for 'rack.session' environment management.\n\n## Problem\n\nAcceptance testing assumes that you can't directly access an applications session.\nFor example, if you use capybara with selenium webdriver you can't change some session values\nbecause your tests use the same browser that accesses the application(via the backend server).\n\n## Solution\n\nBut what if you still want to change session values?\nOne possible solution is to inject into the application some code that will manage the session independently.\nIf you use rack based framework this gem does it!\n\n## Installation\n\n```ruby\ngem install rack_session_access\n```\n\n## Using with Rails\n\nAdd to `Gemfile`:\n\n```ruby\ngem 'rack_session_access'\n```\n\nAdd RackSessionAccess middleware to rails middleware stack.\nAdd the following in`config/environments/test.rb`:\n\n```ruby\n[MyRailsApp]::Application.configure do |config|\n  ...\n  # Access to rack session\n  config.middleware.use RackSessionAccess::Middleware\n  ...\nend\n```\n\n*Note* Ensure you include rack_session_access middleware only for *test* environment\notherwise you will have security issue.\n\n\n## Using with Sinatra\n\nAdd to your sinatra application:\n\n```ruby\nclass MySinatraApplication \u003c Sinatra::Base\n  enable :sessions\n  use RackSessionAccess::Middleware if environment == :test\n  ...\nend\n```\n\nIf you use rspec you may prefer to inject middleware only for rspec tests:\nPut into `spec/spec_helper`:\n\n```ruby\nMySinatraApplication.configure do |app|\n  app.use RackSessionAccess::Middleware\nend\n```\n\n## Using with Rack builder\n\n```ruby\nRack::Builder.new do\n  ...\n  use Rack::Session::Cookie\n  use RackSessionAccess::Middleware\n  use MyRackApplication\nend.to_app\n```\n\n## Testing with Capybara\n\nAdd to `spec/spec_helper.rb`\n\n```ruby\nrequire \"rack_session_access/capybara\"\n```\n\nUse:\n\n* `page.set_rack_session` to set your desired session data\n* `page.get_rack_session` to obtain your application session data\n* `page.get_rack_session_key` to obtain certain key of your application session data\n\nExample:\n\n```ruby\nrequire 'spec_helper'\n\nfeature \"My feature\" do\n  given!(:user) { create(:user, email: 'jack@daniels.com') }\n\n  scenario \"logged in user access profile page\" do\n    page.set_rack_session(user_id: user.id)\n    visit \"/profile\"\n    expect(page).to have_content(\"Hi, jack@daniels.com\")\n  end\n\n  scenario \"visit landing page\" do\n    visit \"/landing?ref=123\"\n    expect(page.get_rack_session_key('ref')).to eq(\"123\")\n  end\nend\n```\n\n### Authlogic integration\n\n```ruby\nmodule FeatureHelpers\n  def logged_as(user)\n    page.set_rack_session('user_credentials' =\u003e user.persistence_token)\n  end\nend\n```\n\n### Devise integration\n\n```ruby\nmodule FeatureHelpers\n  def logged_as(user)\n    # Devise v3.x.x\n    page.set_rack_session('warden.user.user.key' =\u003e User.serialize_into_session(user).unshift('User'))\n\n    # Devise v4.x.x\n    page.set_rack_session('warden.user.user.key' =\u003e User.serialize_into_session(user))\n  end\nend\n```\n\n## Authentication helper\n\nPut corresponding implementation of `logged_as` in `spec/support/feature_helpers.rb` and include module into rspec config:\n\n```ruby\nRSpec.configure do |config|\n  ...\n  config.include FeatureHelpers, type: :feature\n  ...\nend\n```\nStart your scenarios with already logged in user:\n\n```ruby\nfeature 'User dashboard', type: :feature do\n  given(:user) { create(:user) }\n  background do\n    logged_as user\n  end\n  scenario 'User reviews a dashboard' do\n    ...\n  end\nend\n```\n\n## Notes\n\nThus we use marshalized data it's possible to set any ruby object into application session hash.\n\nEnjoy!\n\n## Running rack_session_access tests\n\n\nRun to test against Rails4, Sinatra and Rack applications\n\n```sh\nBUNDLE_GEMFILE=Gemfile.rails4 bundle install\nBUNDLE_GEMFILE=Gemfile.rails4 bundle exec rspec -fd spec/\n```\n\n```sh\nBUNDLE_GEMFILE=Gemfile.rails5 bundle install\nBUNDLE_GEMFILE=Gemfile.rails5 bundle exec rspec -fd spec/\n```\n\n## Author\n\n[Andriy Yanko](http://ayanko.github.com/)\n\n## License\n\n* Copyright (c) 2015 Railsware [www.railsware.com](http://www.railsware.com)\n* [MIT](www.opensource.org/licenses/MIT)\n\n\n## References\n\n* [capybara](https://github.com/jnicklas/capybara)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frailsware%2Frack_session_access","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frailsware%2Frack_session_access","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frailsware%2Frack_session_access/lists"}