activerecord-session_store 0.1.2 → 1.0.0.pre
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.
Potentially problematic release.
This version of activerecord-session_store might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/lib/action_dispatch/session/active_record_store.rb +60 -43
- data/lib/action_dispatch/session/legacy_support.rb +51 -0
- data/lib/active_record/session_store.rb +10 -2
- data/lib/active_record/session_store/extension/logger_silencer.rb +5 -3
- data/lib/active_record/session_store/session.rb +3 -1
- metadata +42 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e266cfc34f1078245ab5c7b89003a2fba65041d3
|
4
|
+
data.tar.gz: c9f398c65a0511ca359d45c09b824d1af1965142
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc865efe6b4efdb8e448b227787bfcc153069796ec22de12e803293f3798124764aee1b3feb50766248399b15795ab12f5775f273677ef4f841521bb2f825e25
|
7
|
+
data.tar.gz: 930fa087e6dd906fb2d5df43d3131cbe75808e1008e9280a0e67307f257d800ce0d7885987c6382d423361fa2bfb5aa7840b5062f6860b755bcf29a92ca8f518
|
data/MIT-LICENSE
CHANGED
@@ -58,66 +58,83 @@ module ActionDispatch
|
|
58
58
|
cattr_accessor :session_class
|
59
59
|
|
60
60
|
SESSION_RECORD_KEY = 'rack.session.record'
|
61
|
-
|
61
|
+
if Rack.const_defined?(:RACK_SESSION_OPTIONS)
|
62
|
+
ENV_SESSION_OPTIONS_KEY = Rack::RACK_SESSION_OPTIONS
|
63
|
+
else
|
64
|
+
ENV_SESSION_OPTIONS_KEY = Rack::Session::Abstract::ENV_SESSION_OPTIONS_KEY
|
65
|
+
end
|
62
66
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
env[SESSION_RECORD_KEY] = session
|
73
|
-
[sid, session.data]
|
67
|
+
private
|
68
|
+
def get_session(request, sid)
|
69
|
+
logger.silence_logger do
|
70
|
+
unless sid and session = @@session_class.find_by_session_id(sid)
|
71
|
+
# If the sid was nil or if there is no pre-existing session under the sid,
|
72
|
+
# force the generation of a new sid and associate a new session associated with the new sid
|
73
|
+
sid = generate_sid
|
74
|
+
session = @@session_class.new(:session_id => sid, :data => {})
|
74
75
|
end
|
76
|
+
request.env[SESSION_RECORD_KEY] = session
|
77
|
+
[sid, session.data]
|
75
78
|
end
|
79
|
+
end
|
76
80
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
81
|
+
def write_session(request, sid, session_data, options)
|
82
|
+
logger.silence_logger do
|
83
|
+
record = get_session_model(request, sid)
|
84
|
+
record.data = session_data
|
85
|
+
return false unless record.save
|
82
86
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
87
|
+
session_data = record.data
|
88
|
+
if session_data && session_data.respond_to?(:each_value)
|
89
|
+
session_data.each_value do |obj|
|
90
|
+
obj.clear_association_cache if obj.respond_to?(:clear_association_cache)
|
88
91
|
end
|
89
|
-
|
90
|
-
sid
|
91
92
|
end
|
92
|
-
end
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
get_session_model(env, sid).destroy
|
98
|
-
env[SESSION_RECORD_KEY] = nil
|
99
|
-
end
|
94
|
+
sid
|
95
|
+
end
|
96
|
+
end
|
100
97
|
|
101
|
-
|
98
|
+
def delete_session(request, session_id, options)
|
99
|
+
logger.silence_logger do
|
100
|
+
if sid = current_session_id(request)
|
101
|
+
get_session_model(request, sid).destroy
|
102
|
+
request.env[SESSION_RECORD_KEY] = nil
|
102
103
|
end
|
104
|
+
generate_sid unless options[:drop]
|
103
105
|
end
|
106
|
+
end
|
104
107
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
+
def get_session_model(request, id)
|
109
|
+
logger.silence_logger do
|
110
|
+
model = @@session_class.find_by_session_id(id)
|
111
|
+
if !model
|
112
|
+
id = generate_sid
|
113
|
+
model = @@session_class.new(:session_id => id, :data => {})
|
114
|
+
model.save
|
115
|
+
end
|
116
|
+
if request.env[ENV_SESSION_OPTIONS_KEY][:id].nil?
|
117
|
+
request.env[SESSION_RECORD_KEY] = model
|
108
118
|
else
|
109
|
-
env[SESSION_RECORD_KEY] ||=
|
119
|
+
request.env[SESSION_RECORD_KEY] ||= model
|
110
120
|
end
|
121
|
+
model
|
111
122
|
end
|
123
|
+
end
|
112
124
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
125
|
+
def find_session(request, id)
|
126
|
+
model = get_session_model(request, id)
|
127
|
+
[model.session_id, model.data]
|
128
|
+
end
|
117
129
|
|
118
|
-
|
119
|
-
|
120
|
-
|
130
|
+
def logger
|
131
|
+
ActiveRecord::Base.logger || ActiveRecord::SessionStore::NilLogger
|
132
|
+
end
|
121
133
|
end
|
122
134
|
end
|
123
135
|
end
|
136
|
+
|
137
|
+
if ActiveRecord::VERSION::MAJOR == 4
|
138
|
+
require 'action_dispatch/session/legacy_support'
|
139
|
+
ActionDispatch::Session::ActiveRecordStore.send(:include, ActionDispatch::Session::LegacySupport)
|
140
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ActionDispatch
|
2
|
+
module Session
|
3
|
+
module LegacySupport
|
4
|
+
EnvWrapper = Struct.new(:env)
|
5
|
+
|
6
|
+
def self.included(klass)
|
7
|
+
[
|
8
|
+
:get_session,
|
9
|
+
:get_session_model,
|
10
|
+
:write_session,
|
11
|
+
:delete_session,
|
12
|
+
:find_session
|
13
|
+
].each do |m|
|
14
|
+
klass.send(:alias_method, "#{m}_rails5".to_sym, m)
|
15
|
+
klass.send(:remove_method, m)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_session(env, sid)
|
20
|
+
request = EnvWrapper.new(env)
|
21
|
+
get_session_rails5(request, sid)
|
22
|
+
end
|
23
|
+
|
24
|
+
def set_session(env, sid, session_data, options)
|
25
|
+
request = EnvWrapper.new(env)
|
26
|
+
write_session_rails5(request, sid, session_data, options)
|
27
|
+
end
|
28
|
+
|
29
|
+
def destroy_session(env, session_id, options)
|
30
|
+
request = EnvWrapper.new(env)
|
31
|
+
if sid = current_session_id(request.env)
|
32
|
+
get_session_model(request, sid).destroy
|
33
|
+
request.env[self.class::SESSION_RECORD_KEY] = nil
|
34
|
+
end
|
35
|
+
generate_sid unless options[:drop]
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_session_model(request, sid)
|
39
|
+
if request.env[self.class::ENV_SESSION_OPTIONS_KEY][:id].nil?
|
40
|
+
request.env[self.class::SESSION_RECORD_KEY] = find_session(sid)
|
41
|
+
else
|
42
|
+
request.env[self.class::SESSION_RECORD_KEY] ||= find_session(sid)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def find_session(id)
|
47
|
+
self.class.session_class.find_by_session_id(id) || self.class.session_class.new(:session_id => id, :data => {})
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -13,12 +13,20 @@ module ActiveRecord
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def drop_table!
|
16
|
-
connection.schema_cache.
|
16
|
+
if connection.schema_cache.respond_to?(:clear_data_source_cache!)
|
17
|
+
connection.schema_cache.clear_data_source_cache!(table_name)
|
18
|
+
else
|
19
|
+
connection.schema_cache.clear_table_cache!(table_name)
|
20
|
+
end
|
17
21
|
connection.drop_table table_name
|
18
22
|
end
|
19
23
|
|
20
24
|
def create_table!
|
21
|
-
connection.schema_cache.
|
25
|
+
if connection.schema_cache.respond_to?(:clear_data_source_cache!)
|
26
|
+
connection.schema_cache.clear_data_source_cache!(table_name)
|
27
|
+
else
|
28
|
+
connection.schema_cache.clear_table_cache!(table_name)
|
29
|
+
end
|
22
30
|
connection.create_table(table_name) do |t|
|
23
31
|
t.string session_id_column, :limit => 255
|
24
32
|
t.text data_column_name
|
@@ -13,8 +13,10 @@ module ActiveRecord
|
|
13
13
|
included do
|
14
14
|
cattr_accessor :silencer
|
15
15
|
self.silencer = true
|
16
|
-
|
17
|
-
|
16
|
+
alias_method :level_without_threadsafety, :level
|
17
|
+
alias_method :level, :level_with_threadsafety
|
18
|
+
alias_method :add_without_threadsafety, :add
|
19
|
+
alias_method :add, :add_with_threadsafety
|
18
20
|
end
|
19
21
|
|
20
22
|
def thread_level
|
@@ -30,7 +32,7 @@ module ActiveRecord
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def add_with_threadsafety(severity, message = nil, progname = nil, &block)
|
33
|
-
if
|
35
|
+
if (defined?(@logdev) && @logdev.nil?) || (severity || UNKNOWN) < level
|
34
36
|
true
|
35
37
|
else
|
36
38
|
add_without_threadsafety(severity, message, progname, &block)
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require "active_support/core_ext/module/attribute_accessors"
|
2
|
+
require "thread"
|
2
3
|
|
3
4
|
module ActiveRecord
|
4
5
|
module SessionStore
|
5
6
|
# The default Active Record class.
|
6
7
|
class Session < ActiveRecord::Base
|
7
8
|
extend ClassMethods
|
9
|
+
SEMAPHORE = Mutex.new
|
8
10
|
|
9
11
|
##
|
10
12
|
# :singleton-method:
|
@@ -29,7 +31,7 @@ module ActiveRecord
|
|
29
31
|
|
30
32
|
# Hook to set up sessid compatibility.
|
31
33
|
def find_by_session_id(session_id)
|
32
|
-
|
34
|
+
SEMAPHORE.synchronize { setup_sessid_compatibility! }
|
33
35
|
find_by_session_id(session_id)
|
34
36
|
end
|
35
37
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-session_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,60 +16,80 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.0
|
19
|
+
version: '4.0'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '5'
|
22
|
+
version: '5.1'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 4.0
|
29
|
+
version: '4.0'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '5'
|
32
|
+
version: '5.1'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: actionpack
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 4.0
|
39
|
+
version: '4.0'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '5'
|
42
|
+
version: '5.1'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 4.0
|
49
|
+
version: '4.0'
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '5'
|
52
|
+
version: '5.1'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: railties
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 4.0
|
59
|
+
version: '4.0'
|
60
60
|
- - "<"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '5'
|
62
|
+
version: '5.1'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 4.0
|
69
|
+
version: '4.0'
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: '5'
|
72
|
+
version: '5.1'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: rack
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.5.2
|
80
|
+
- - "<"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.5.2
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '3'
|
73
93
|
- !ruby/object:Gem::Dependency
|
74
94
|
name: sqlite3
|
75
95
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,16 +108,16 @@ dependencies:
|
|
88
108
|
name: appraisal
|
89
109
|
requirement: !ruby/object:Gem::Requirement
|
90
110
|
requirements:
|
91
|
-
- - "
|
111
|
+
- - "~>"
|
92
112
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
113
|
+
version: 2.1.0
|
94
114
|
type: :development
|
95
115
|
prerelease: false
|
96
116
|
version_requirements: !ruby/object:Gem::Requirement
|
97
117
|
requirements:
|
98
|
-
- - "
|
118
|
+
- - "~>"
|
99
119
|
- !ruby/object:Gem::Version
|
100
|
-
version:
|
120
|
+
version: 2.1.0
|
101
121
|
description:
|
102
122
|
email: david@loudthinking.com
|
103
123
|
executables: []
|
@@ -108,6 +128,7 @@ files:
|
|
108
128
|
- MIT-LICENSE
|
109
129
|
- README.md
|
110
130
|
- lib/action_dispatch/session/active_record_store.rb
|
131
|
+
- lib/action_dispatch/session/legacy_support.rb
|
111
132
|
- lib/active_record/session_store.rb
|
112
133
|
- lib/active_record/session_store/extension/logger_silencer.rb
|
113
134
|
- lib/active_record/session_store/railtie.rb
|
@@ -134,12 +155,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
155
|
version: 1.9.3
|
135
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
157
|
requirements:
|
137
|
-
- - "
|
158
|
+
- - ">"
|
138
159
|
- !ruby/object:Gem::Version
|
139
|
-
version:
|
160
|
+
version: 1.3.1
|
140
161
|
requirements: []
|
141
162
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.5.1
|
143
164
|
signing_key:
|
144
165
|
specification_version: 4
|
145
166
|
summary: An Action Dispatch session store backed by an Active Record class.
|