url_session 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in url_session.gemspec
4
+ gemspec
@@ -0,0 +1,61 @@
1
+ # UrlSession
2
+
3
+ UrlSession stores your session in memcache (dalli), puts session_id to every url and parses it in midleware
4
+
5
+ ![Chrome url bar with UrlSession enabled](https://img.skitch.com/20120524-pp89sj3c5i5tf27id698gdw6y9.jpg "UrlSession in action")
6
+
7
+ ## Installation
8
+
9
+ $ gem install url_session
10
+
11
+ ## Usage
12
+
13
+ Add gem to your Gemfile
14
+
15
+ ```ruby
16
+ gem 'url_session'
17
+ ```
18
+
19
+ configure session_store to use url_session (session_store.rb)
20
+ ```ruby
21
+ UrlSessionExample::Application.config.session_store :url_session_store, :namespace => 'sessions',
22
+ :key =>"_session", :compress => true, :expire_after => 1.day, :cookie_enabled => false, :param => 'session_id'
23
+ ```
24
+
25
+ and include UrlSession in your ApplicationController
26
+
27
+ ```ruby
28
+ class ApplicationController < ActionController::Base
29
+ include ControllerAuthentication
30
+ protect_from_forgery
31
+
32
+ include UrlSession::Controller
33
+ end
34
+ ```
35
+
36
+
37
+ You can put your all routes in session_id scope, if you want (routes.rb)
38
+
39
+ ```ruby
40
+ scope "/(:session_id)" do
41
+ resources :sessions
42
+ resources :users
43
+ resources :posts
44
+ ...
45
+ match '/' => 'posts#index', :as => :root # root :to => 'posts#index' doesn't work here
46
+ end
47
+ ```
48
+
49
+ ## Options
50
+
51
+ The same like dalli_store plus:
52
+
53
+ ```ruby
54
+ :param => 'PHPSESSID' # name of session id parameter, default 'session_id'
55
+ :cookie_enabled => false # try to use cookie before url, default true
56
+ ```
57
+
58
+ ## Example
59
+
60
+ http://url-session-example.herokuapp.com
61
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,35 @@
1
+ require 'active_support/cache'
2
+ require 'action_dispatch/middleware/session/abstract_store'
3
+ require 'action_dispatch/middleware/session/dalli_store'
4
+ require 'dalli'
5
+
6
+ module ActionDispatch
7
+ module Session
8
+ class UrlSessionStore < DalliStore
9
+
10
+ def initialize(app, options = {})
11
+ super
12
+
13
+ @default_options = { :param => 'session_id',
14
+ :cookie_enabled => false }.merge(@default_options)
15
+ @cookie_enabled = @default_options[:cookie_enabled]
16
+ @param = @default_options[:param].to_s
17
+ end
18
+
19
+ private
20
+
21
+ def set_cookie(*args)
22
+ super if @cookie_enabled
23
+ end
24
+
25
+ def extract_session_id(env)
26
+ request = ActionDispatch::Request.new(env)
27
+ (
28
+ (super if @cookie_enabled) ||
29
+ request.path.scan(/^\/(\w{32})/).flatten.first ||
30
+ request.query_parameters[@param].to_s.scan(/^(\w{32})$/).flatten.first
31
+ ).presence
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ require "url_session/version"
2
+ require "url_session/controller"
3
+ require "action_dispatch/session/url_session_store"
@@ -0,0 +1,26 @@
1
+ module UrlSession::Controller
2
+ def self.included(base)
3
+ base.send :before_filter, :set_session_id
4
+ end
5
+
6
+ def url_options
7
+ options = Rails.application.config.session_options
8
+ key = options[:key] || '_session_id'
9
+ param = options[:param] || 'session_id'
10
+ cookie = !options[:cookie_enabled] || cookies[key].blank?
11
+ session_id = request.session_options[:id]
12
+ { param.to_sym => cookie.presence && session_id }.merge super
13
+ end
14
+
15
+ def reset_session
16
+ super
17
+ set_session_id
18
+ end
19
+
20
+ private
21
+ def set_session_id
22
+ unless request.session_options[:id]
23
+ request.session_options.merge!({:id => SecureRandom.hex(16)})
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module UrlSession
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "url_session/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "url_session"
7
+ s.version = UrlSession::VERSION
8
+ s.authors = ["Krzysztof Jablonski"]
9
+ s.email = ["jablko@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Session id in url}
12
+ s.description = %q{UrlSession stores your session in memcache (dalli), puts session_id to every url and parses it in midleware}
13
+
14
+ s.rubyforge_project = "url_session"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency "dalli", '>= 1.1.0'
24
+ s.add_runtime_dependency "rails", '~> 3.2.0'
25
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: url_session
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Krzysztof Jablonski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: dalli
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.1.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 3.2.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.2.0
46
+ description: UrlSession stores your session in memcache (dalli), puts session_id to
47
+ every url and parses it in midleware
48
+ email:
49
+ - jablko@gmail.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - README.md
57
+ - Rakefile
58
+ - lib/action_dispatch/session/url_session_store.rb
59
+ - lib/url_session.rb
60
+ - lib/url_session/controller.rb
61
+ - lib/url_session/version.rb
62
+ - url_session.gemspec
63
+ homepage: ''
64
+ licenses: []
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ segments:
76
+ - 0
77
+ hash: -3217570099020623775
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ segments:
85
+ - 0
86
+ hash: -3217570099020623775
87
+ requirements: []
88
+ rubyforge_project: url_session
89
+ rubygems_version: 1.8.24
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Session id in url
93
+ test_files: []