egalite 1.3.3 → 1.4.0

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.
@@ -10,6 +10,7 @@ class Session
10
10
  @cookies = cookies
11
11
  @cookie_name = opts[:cookie_name] || 'egalite_session'
12
12
  @expire_after = opts[:expire_after] || (86400 * 30)
13
+ @individual_expire = opts[:individual_expire]
13
14
  @secure = opts[:secure] || false
14
15
  @path = opts[:path] || '/'
15
16
  @hash = {}
@@ -42,8 +43,17 @@ class SessionSequel < Session
42
43
  primary_key :id, :integer, :auto_increment => true
43
44
  column :mac, :varchar
44
45
  column :updated_at, :timestamp
46
+ column :expire_sec, :integer # 任意項目: 個別に有効期限設定可能
45
47
  }
46
48
  end
49
+ def expire(t = nil)
50
+ t ||= Time.now
51
+ if @individual_expire and @hash and @hash[:expire_sec]
52
+ t + @hash[:expire_sec]
53
+ else
54
+ t + @expire_after
55
+ end
56
+ end
47
57
 
48
58
  def initialize(env, cookies, opts = {})
49
59
  @db = env.db
@@ -54,7 +64,7 @@ class SessionSequel < Session
54
64
  def cookie
55
65
  {
56
66
  :value => @sstr,
57
- :expires => Time.now + @expire_after,
67
+ :expires => expire,
58
68
  :path => @path,
59
69
  :secure => @secure
60
70
  }
@@ -75,7 +85,7 @@ class SessionSequel < Session
75
85
 
76
86
  # timeout check
77
87
  updated = rec[:updated_at]
78
- return false if Time.now > (updated + @expire_after)
88
+ return false if Time.now > expire(updated)
79
89
 
80
90
  @sstr = _sstr
81
91
  @hash = rec
@@ -1,3 +1,3 @@
1
1
  module Egalite
2
- VERSION = "1.3.3"
2
+ VERSION = "1.4.0"
3
3
  end
data/test/test_session.rb CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH << File.join(File.dirname(__FILE__), '..')
2
2
 
3
3
  require 'rubygems'
4
4
  require 'test/unit'
5
- require 'egalite'
5
+ require 'lib/egalite/session'
6
6
  require 'sequel'
7
7
 
8
8
  require 'rack/test'
@@ -11,7 +11,9 @@ require 'setup'
11
11
 
12
12
  class SessionController < Egalite::Controller
13
13
  def login(id)
14
- session.create(:user_id => id)
14
+ exp = nil
15
+ exp = params[:expire].to_i if params[:expire].to_i > 0
16
+ session.create(:user_id => id, :expire_sec => exp)
15
17
  redirect :action => :page
16
18
  end
17
19
  def page
@@ -40,7 +42,8 @@ class T_Session < Test::Unit::TestCase
40
42
  end
41
43
  Egalite::Handler.new(
42
44
  :db => db,
43
- :session_handler => Egalite::SessionSequel
45
+ :session_handler => Egalite::SessionSequel,
46
+ :session_opts => {:individual_expire => true}
44
47
  )
45
48
  end
46
49
  def test_session
@@ -52,6 +55,9 @@ class T_Session < Test::Unit::TestCase
52
55
  assert last_response.redirect?
53
56
  assert last_response.headers['location'] == "/session/page"
54
57
  assert last_response.headers['set-cookie'] =~ /^egalite_session=[0-9]+_[0-9a-z]+;\s+/
58
+ last_response.headers['set-cookie'] =~ /expires=(.+?)(;|\Z|$)/
59
+ t = Time.parse($1)
60
+ assert t > (Time.now + 600)
55
61
  get "/session/page"
56
62
  assert last_response.ok?
57
63
  assert last_response.body =~ /9876/
@@ -80,4 +86,13 @@ class T_Session < Test::Unit::TestCase
80
86
  assert_raise(NotImplementedError) { session.save }
81
87
  assert_raise(NotImplementedError) { session.delete }
82
88
  end
89
+ def test_session_exp
90
+ get "/session/login/9876?expire=1"
91
+ last_response.headers['set-cookie'] =~ /expires=(.+?)(;|\Z|$)/
92
+ t = Time.parse($1)
93
+ assert last_response.redirect?
94
+ assert last_response.headers['location'] == "/session/page"
95
+ assert last_response.headers['set-cookie'] =~ /^egalite_session=[0-9]+_[0-9a-z]+;\s+/
96
+ assert t < (Time.now + 60)
97
+ end
83
98
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: egalite
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 3
9
- - 3
10
- version: 1.3.3
8
+ - 4
9
+ - 0
10
+ version: 1.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Shunichi Arai
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2014-07-02 00:00:00 Z
18
+ date: 2014-09-24 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bundler