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.
- data/lib/egalite/session.rb +12 -2
- data/lib/egalite/version.rb +1 -1
- data/test/test_session.rb +18 -3
- metadata +5 -5
data/lib/egalite/session.rb
CHANGED
@@ -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 =>
|
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
|
88
|
+
return false if Time.now > expire(updated)
|
79
89
|
|
80
90
|
@sstr = _sstr
|
81
91
|
@hash = rec
|
data/lib/egalite/version.rb
CHANGED
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
|
-
|
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:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
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-
|
18
|
+
date: 2014-09-24 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: bundler
|