sequel-rails 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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