sequel-rails 0.8.0 → 0.9.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/History.md +22 -0
- data/README.md +7 -6
- data/lib/action_dispatch/middleware/session/sequel_store.rb +62 -0
- data/lib/generators/sequel/session_migration/session_migration_generator.rb +1 -1
- data/lib/sequel_rails.rb +1 -0
- data/lib/sequel_rails/railtie.rb +1 -2
- data/lib/sequel_rails/version.rb +1 -1
- data/sequel-rails.gemspec +3 -1
- data/spec/integration/sessions_controller_spec.rb +28 -0
- data/spec/internal/app/controllers/application_controller.rb +2 -0
- data/spec/internal/app/controllers/sessions_controller.rb +11 -0
- data/spec/internal/config/initializers/session_store.rb +1 -0
- data/spec/internal/config/routes.rb +1 -1
- data/spec/spec_helper.rb +5 -2
- metadata +43 -9
- data/lib/sequel_rails/session_store.rb +0 -44
- data/spec/internal/config/initializers/session.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 395942ff9378ccc865cd522cc7f9007900357a02
|
4
|
+
data.tar.gz: f6f81cc77327938dd8a151e43f3c7edc9fd73b61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0bdf0d65e0b1bbb43b59db21e2522f00cea7627c6dd0c944a662c74696f1c30241f4324fc7675decbaa6e7ab48242785924c528b0d518763b25ec29d6f9fb7b
|
7
|
+
data.tar.gz: 2f2159dbe2b44a605860661316f2e803975e21caf15fd4938c18cb12a9da6204dae1a1f8573078a4da7acaddf14ee9ae50ff32f3209ddd55d1b0a9465843457c
|
data/Gemfile
CHANGED
data/History.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
0.9.0 (2013-11-16)
|
2
|
+
==================
|
3
|
+
|
4
|
+
* Add `require 'english'` to ensure we have access to english equivalents of
|
5
|
+
Ruby's special variable [#57](https://github.com/TalentBox/sequel-rails/issues/57)
|
6
|
+
* Rename `SequelRails::SessionStore` as `ActionDispatch::Session::SequelStore`
|
7
|
+
and fix methods to be compatible with `Rails` >= 3.2.
|
8
|
+
|
9
|
+
Previous sequel session store did not work and should be enabled using:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
MyApplication::Application.config.session_store SequelRails::SessionStore
|
13
|
+
```
|
14
|
+
|
15
|
+
now you can enable it using:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
MyApplication::Application.config.session_store :sequel_store
|
19
|
+
```
|
20
|
+
|
21
|
+
A basic integration spec was added to ensure it works as expected. [#56](https://github.com/TalentBox/sequel-rails/issues/56)
|
22
|
+
|
1
23
|
0.8.0 (2013-11-10)
|
2
24
|
==================
|
3
25
|
|
data/README.md
CHANGED
@@ -124,8 +124,9 @@ Features provided by `sequel-rails`
|
|
124
124
|
7. Add a hook in `ActionController::Base` so that the sum of SQL queries time
|
125
125
|
for the current action is reported as `DB` for the controller's line in logs.
|
126
126
|
|
127
|
-
8. Provide a `
|
128
|
-
sessions in database backed by a `Sequel`
|
127
|
+
8. Provide a `ActionDispatch::Session::SequelStore` similar to the
|
128
|
+
`ActiveRecord` one, which stores sessions in database backed by a `Sequel`
|
129
|
+
model.
|
129
130
|
|
130
131
|
Configuration
|
131
132
|
=============
|
@@ -221,15 +222,15 @@ loaded. Loading plugins into `Sequel::Model` after subclasses are already
|
|
221
222
|
created is not supported by Sequel. You can also load extensions in
|
222
223
|
`after_connect` or perform any custom actions that you need.
|
223
224
|
|
224
|
-
Using the `
|
225
|
-
|
225
|
+
Using the `SequelStore` to store session in database
|
226
|
+
====================================================
|
226
227
|
|
227
228
|
If you want to store your session in the database you can use the provided
|
228
229
|
session store backed by a `Sequel` model. Edit your
|
229
230
|
`config/initializers/session.rb` file and replace the existing code with:
|
230
231
|
|
231
232
|
```ruby
|
232
|
-
YourAppName::Application.config.session_store
|
233
|
+
YourAppName::Application.config.session_store :sequel_store
|
233
234
|
```
|
234
235
|
|
235
236
|
You can then generate a migration for the session table using the provided
|
@@ -244,7 +245,7 @@ Optionally if you want to use your own `Sequel` model to handle the session,
|
|
244
245
|
you can do so in your `config/initializers/session.rb`:
|
245
246
|
|
246
247
|
```ruby
|
247
|
-
|
248
|
+
ActionDispatch::Session::SequelStore.session_class = MyCustomSessionModelClass
|
248
249
|
```
|
249
250
|
|
250
251
|
Available sequel specific rake tasks
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'sequel'
|
2
|
+
require 'action_dispatch/middleware/session/abstract_store'
|
3
|
+
|
4
|
+
# Implements Sequel model based session store.
|
5
|
+
|
6
|
+
module ActionDispatch
|
7
|
+
module Session
|
8
|
+
class SequelStore < AbstractStore
|
9
|
+
SESSION_RECORD_KEY = 'rack.session.record'.freeze
|
10
|
+
ENV_SESSION_OPTIONS_KEY = Rack::Session::Abstract::ENV_SESSION_OPTIONS_KEY
|
11
|
+
|
12
|
+
cattr_accessor :session_class
|
13
|
+
def self.session_class
|
14
|
+
@@session_class ||= begin
|
15
|
+
res = Class.new(Sequel::Model(:sessions))
|
16
|
+
res.plugin :timestamps, :update_on_create => true
|
17
|
+
res.plugin :serialization, :marshal, :data
|
18
|
+
res
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def get_session(env, sid)
|
25
|
+
sid ||= generate_sid
|
26
|
+
session = find_session(sid)
|
27
|
+
env[SESSION_RECORD_KEY] = session
|
28
|
+
[sid, session.data]
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_session(env, sid, session_data, options)
|
32
|
+
session = get_session_model(env, sid)
|
33
|
+
session.data = session_data
|
34
|
+
session.save(:raise_on_failure => false) && sid
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy_session(env, sid, options)
|
38
|
+
sid = current_session_id(env)
|
39
|
+
if sid
|
40
|
+
get_session_model(env, sid).destroy
|
41
|
+
env[SESSION_RECORD_KEY] = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
generate_sid unless options[:drop]
|
45
|
+
end
|
46
|
+
|
47
|
+
def get_session_model(env, sid)
|
48
|
+
if env[ENV_SESSION_OPTIONS_KEY][:id].nil?
|
49
|
+
env[SESSION_RECORD_KEY] = find_session(sid)
|
50
|
+
else
|
51
|
+
env[SESSION_RECORD_KEY] ||= find_session(sid)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def find_session(sid)
|
56
|
+
klass = self.class.session_class
|
57
|
+
klass.where(:session_id => sid).first ||
|
58
|
+
klass.new(:session_id => sid, :data => {})
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/sequel_rails.rb
CHANGED
data/lib/sequel_rails/railtie.rb
CHANGED
@@ -17,10 +17,9 @@ require 'sequel_rails/railties/log_subscriber'
|
|
17
17
|
require 'sequel_rails/railties/i18n_support'
|
18
18
|
require 'sequel_rails/railties/controller_runtime'
|
19
19
|
require 'sequel_rails/sequel/database/active_support_notification'
|
20
|
+
require 'action_dispatch/middleware/session/sequel_store'
|
20
21
|
|
21
22
|
module SequelRails
|
22
|
-
autoload :SessionStore, 'sequel_rails/session_store'
|
23
|
-
|
24
23
|
class Railtie < Rails::Railtie
|
25
24
|
::SequelRails::Railties::LogSubscriber.attach_to :sequel
|
26
25
|
|
data/lib/sequel_rails/version.rb
CHANGED
data/sequel-rails.gemspec
CHANGED
@@ -22,11 +22,13 @@ Gem::Specification.new do |s|
|
|
22
22
|
|
23
23
|
s.add_dependency 'activemodel'
|
24
24
|
s.add_dependency 'railties', '>= 3.2.0'
|
25
|
+
s.add_dependency 'actionpack', '>= 3.2.0'
|
25
26
|
s.add_dependency 'sequel', ['>= 3.28', '< 5.0']
|
26
27
|
|
27
28
|
s.add_development_dependency 'combustion'
|
28
29
|
s.add_development_dependency 'generator_spec'
|
29
30
|
s.add_development_dependency 'rake', '>= 0.8.7'
|
30
|
-
s.add_development_dependency 'rspec'
|
31
|
+
s.add_development_dependency 'rspec', '~> 2.14'
|
32
|
+
s.add_development_dependency 'rspec-rails', '~> 2.14'
|
31
33
|
s.add_development_dependency 'rubocop' unless RUBY_VERSION < '1.9.2'
|
32
34
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SessionsController do
|
4
|
+
let(:session_class) { ::ActionDispatch::Session::SequelStore.session_class }
|
5
|
+
|
6
|
+
def login
|
7
|
+
post '/session', :status => 'logged_in'
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#create' do
|
11
|
+
it 'creates a new session' do
|
12
|
+
expect do
|
13
|
+
login
|
14
|
+
end.to change { session_class.count }.from(0).to(1)
|
15
|
+
expect(session[:status]).to eq 'logged_in'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#destroy' do
|
20
|
+
before { login }
|
21
|
+
it 'reset session' do
|
22
|
+
old_session_id = cookies['_session_id']
|
23
|
+
delete '/session'
|
24
|
+
expect(old_session_id).not_to eq cookies['_session_id']
|
25
|
+
expect(session[:status]).to be_nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Combustion::Application.config.session_store :sequel_store
|
data/spec/spec_helper.rb
CHANGED
@@ -3,8 +3,11 @@ require 'bundler'
|
|
3
3
|
|
4
4
|
Bundler.require :default, :development, :test
|
5
5
|
|
6
|
-
# Combustion initialization has to
|
7
|
-
Combustion.initialize!
|
6
|
+
# Combustion initialization has to happen before loading rspec/rails
|
7
|
+
Combustion.initialize! :sequel_rails
|
8
|
+
|
9
|
+
require 'rspec/rails'
|
10
|
+
require 'rspec/autorun'
|
8
11
|
|
9
12
|
# Load support files
|
10
13
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brasten Sager (brasten)
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - '>='
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 3.2.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: actionpack
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 3.2.0
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 3.2.0
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: sequel
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,16 +119,30 @@ dependencies:
|
|
105
119
|
name: rspec
|
106
120
|
requirement: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - ~>
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
124
|
+
version: '2.14'
|
111
125
|
type: :development
|
112
126
|
prerelease: false
|
113
127
|
version_requirements: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- -
|
129
|
+
- - ~>
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
131
|
+
version: '2.14'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: rspec-rails
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ~>
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.14'
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '2.14'
|
118
146
|
- !ruby/object:Gem::Dependency
|
119
147
|
name: rubocop
|
120
148
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,6 +179,7 @@ files:
|
|
151
179
|
- ci/rails-3.2.gemfile
|
152
180
|
- ci/rails-4.0.gemfile
|
153
181
|
- config.ru
|
182
|
+
- lib/action_dispatch/middleware/session/sequel_store.rb
|
154
183
|
- lib/generators/sequel.rb
|
155
184
|
- lib/generators/sequel/migration/migration_generator.rb
|
156
185
|
- lib/generators/sequel/migration/templates/migration.rb.erb
|
@@ -173,7 +202,6 @@ files:
|
|
173
202
|
- lib/sequel_rails/railties/log_subscriber.rb
|
174
203
|
- lib/sequel_rails/sequel/database/active_support_notification.rb
|
175
204
|
- lib/sequel_rails/sequel/plugins/rails_extensions.rb
|
176
|
-
- lib/sequel_rails/session_store.rb
|
177
205
|
- lib/sequel_rails/shellwords.rb
|
178
206
|
- lib/sequel_rails/storage.rb
|
179
207
|
- lib/sequel_rails/storage/abstract.rb
|
@@ -185,10 +213,13 @@ files:
|
|
185
213
|
- lib/sequel_rails/version.rb
|
186
214
|
- rubocop-todo.yml
|
187
215
|
- sequel-rails.gemspec
|
216
|
+
- spec/integration/sessions_controller_spec.rb
|
188
217
|
- spec/internal/Rakefile
|
218
|
+
- spec/internal/app/controllers/application_controller.rb
|
219
|
+
- spec/internal/app/controllers/sessions_controller.rb
|
189
220
|
- spec/internal/app/models/user.rb
|
190
221
|
- spec/internal/config/database.yml
|
191
|
-
- spec/internal/config/initializers/
|
222
|
+
- spec/internal/config/initializers/session_store.rb
|
192
223
|
- spec/internal/config/routes.rb
|
193
224
|
- spec/internal/db/migrate/1273253849_add_twitter_handle_to_users.rb
|
194
225
|
- spec/internal/db/schema.rb.init
|
@@ -232,10 +263,13 @@ signing_key:
|
|
232
263
|
specification_version: 4
|
233
264
|
summary: Use Sequel with Rails (3.x and 4.x)
|
234
265
|
test_files:
|
266
|
+
- spec/integration/sessions_controller_spec.rb
|
235
267
|
- spec/internal/Rakefile
|
268
|
+
- spec/internal/app/controllers/application_controller.rb
|
269
|
+
- spec/internal/app/controllers/sessions_controller.rb
|
236
270
|
- spec/internal/app/models/user.rb
|
237
271
|
- spec/internal/config/database.yml
|
238
|
-
- spec/internal/config/initializers/
|
272
|
+
- spec/internal/config/initializers/session_store.rb
|
239
273
|
- spec/internal/config/routes.rb
|
240
274
|
- spec/internal/db/migrate/1273253849_add_twitter_handle_to_users.rb
|
241
275
|
- spec/internal/db/schema.rb.init
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'sequel'
|
2
|
-
|
3
|
-
# Implements Sequel-specific session store.
|
4
|
-
|
5
|
-
module SequelRails
|
6
|
-
class SessionStore < ActionDispatch::Session::AbstractStore
|
7
|
-
SESSION_RECORD_KEY = 'rack.session.record'.freeze
|
8
|
-
|
9
|
-
cattr_accessor :session_class
|
10
|
-
def self.session_class
|
11
|
-
@@session_class ||= Class.new(Sequel::Model(:sessions))
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def get_session(env, sid)
|
17
|
-
sid ||= generate_sid
|
18
|
-
session = find_session(sid)
|
19
|
-
env[SESSION_RECORD_KEY] = session
|
20
|
-
[sid, session.data]
|
21
|
-
end
|
22
|
-
|
23
|
-
def set_session(env, sid, session_data)
|
24
|
-
session = get_session_resource(env, sid)
|
25
|
-
session.data = session_data
|
26
|
-
session.updated_at = Time.now if session.dirty?
|
27
|
-
session.save
|
28
|
-
end
|
29
|
-
|
30
|
-
def get_session_resource(env, sid)
|
31
|
-
if env[ENV_SESSION_OPTIONS_KEY][:id].nil?
|
32
|
-
env[SESSION_RECORD_KEY] = find_session(sid)
|
33
|
-
else
|
34
|
-
env[SESSION_RECORD_KEY] ||= find_session(sid)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def find_session(sid)
|
39
|
-
klass = self.class.session_class
|
40
|
-
|
41
|
-
klass.where(:session_id => sid).first || klass.new(:session_id => sid)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
Combustion::Application.config.session_store SequelRails::SessionStore
|