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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 247dcfdfa34d2e6efd0e2f8c8c6bb8335e5fb345
4
- data.tar.gz: 96e82e9fd1043aecda045915458cdde8fb94ad36
3
+ metadata.gz: 395942ff9378ccc865cd522cc7f9007900357a02
4
+ data.tar.gz: f6f81cc77327938dd8a151e43f3c7edc9fd73b61
5
5
  SHA512:
6
- metadata.gz: 2e267ef1a1b2d2ba8f73895e8fd663dd0826479d4dac9da11ec0737e4f1863b3f17c961dfd823f65910edab0d8f997e3254e758cd332940cf3fa0bf3503f141e
7
- data.tar.gz: 9d4b2d24a2f383d7a1c57b05989881125b03612825cd5f5b914df840330fdef13cb9d950972426ed2fafdda0e5e8a2af161335c4e939f69b831ecb8ece5a97cd
6
+ metadata.gz: a0bdf0d65e0b1bbb43b59db21e2522f00cea7627c6dd0c944a662c74696f1c30241f4324fc7675decbaa6e7ab48242785924c528b0d518763b25ec29d6f9fb7b
7
+ data.tar.gz: 2f2159dbe2b44a605860661316f2e803975e21caf15fd4938c18cb12a9da6204dae1a1f8573078a4da7acaddf14ee9ae50ff32f3209ddd55d1b0a9465843457c
data/Gemfile CHANGED
@@ -2,6 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'actionpack'
5
6
  gem 'fakefs', :require => 'fakefs/safe'
6
7
  gem 'pry'
7
8
 
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 `SequelRails::SessionStore` similar to the `ActiveRecord` one, which stores
128
- sessions in database backed by a `Sequel` model.
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 `SequelRails::SessionStore` to store session in database
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 SequelRails::SessionStore
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
- SequelRails::SessionStore.session_class = MyCustomSessionModelClass
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
@@ -19,7 +19,7 @@ module Sequel
19
19
  protected
20
20
 
21
21
  def session_table_name
22
- SequelRails::SessionStore.session_class.table_name
22
+ ActionDispatch::Session::SequelStore.session_class.table_name
23
23
  end
24
24
 
25
25
  def validate_file_name!
data/lib/sequel_rails.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'sequel_rails/version'
2
2
  require 'sequel_rails/railtie' if defined? Rails
3
+ require 'English'
3
4
 
4
5
  module SequelRails
5
6
  def self.jruby?
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module SequelRails
2
- VERSION = '0.8.0'
2
+ VERSION = '0.9.0'
3
3
  end
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,2 @@
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class SessionsController < ApplicationController
2
+ def create
3
+ session[:status] = params[:status]
4
+ head :status => 200
5
+ end
6
+
7
+ def destroy
8
+ reset_session
9
+ head :status => 200
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ Combustion::Application.config.session_store :sequel_store
@@ -1,3 +1,3 @@
1
1
  Rails.application.routes.draw do
2
- #
2
+ resource :session, :only => [:create, :destroy]
3
3
  end
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 happend before loading rspec/rails
7
- Combustion.initialize! 'sequel_rails'
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.8.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-10 00:00:00.000000000 Z
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: '0'
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: '0'
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/session.rb
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/session.rb
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