sequel-rails 1.0.1 → 1.2.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 +5 -5
- data/.github/workflows/ci.yml +121 -0
- data/.rubocop.yml +9 -3
- data/.rubocop_todo.yml +490 -0
- data/Gemfile +0 -1
- data/History.md +40 -0
- data/README.md +58 -11
- data/Rakefile +1 -4
- data/ci/{rails-5.0.gemfile → rails-5.2.gemfile} +5 -5
- data/ci/{rails-4.0.gemfile → rails-6.0.gemfile} +5 -4
- data/ci/{rails-4.1.gemfile → rails-6.1.gemfile} +5 -4
- data/ci/{rails-4.2.gemfile → rails-7.0.gemfile} +5 -4
- data/lib/action_dispatch/middleware/session/sequel_store.rb +21 -9
- data/lib/generators/sequel/migration/migration_generator.rb +1 -1
- data/lib/generators/sequel/migration/templates/migration.rb.erb +2 -0
- data/lib/generators/sequel/session_migration/session_migration_generator.rb +1 -1
- data/lib/sequel_rails/configuration.rb +5 -0
- data/lib/sequel_rails/db_config.rb +6 -2
- data/lib/sequel_rails/migrations.rb +16 -7
- data/lib/sequel_rails/railtie.rb +6 -9
- data/lib/sequel_rails/railties/database.rake +17 -0
- data/lib/sequel_rails/storage/abstract.rb +2 -0
- data/lib/sequel_rails/storage/mysql.rb +1 -0
- data/lib/sequel_rails/version.rb +1 -1
- data/sequel-rails.gemspec +7 -6
- data/spec/helpers/io.rb +5 -0
- data/spec/integration/sessions_controller_spec.rb +1 -1
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/db/schema.rb.init +2 -2
- data/spec/lib/generators/sequel/migration_spec.rb +9 -1
- data/spec/lib/generators/sequel/session_migration_spec.rb +1 -1
- data/spec/lib/sequel_rails/configuration_spec.rb +109 -10
- data/spec/lib/sequel_rails/migrations_spec.rb +27 -4
- data/spec/lib/sequel_rails/railtie_spec.rb +7 -3
- data/spec/lib/sequel_rails/railties/database_rake_spec.rb +42 -0
- data/spec/lib/sequel_rails/storage/mysql_spec.rb +1 -1
- data/spec/lib/sequel_rails/storage/postgres_spec.rb +11 -0
- data/spec/lib/sequel_rails/storage/sqlite_spec.rb +4 -1
- data/spec/spec_helper.rb +1 -1
- metadata +46 -41
- data/.travis.yml +0 -37
- data/ci/rails-5.1.gemfile +0 -28
- data/lib/sequel_rails/railties/spring_support.rb +0 -14
- data/rubocop-todo.yml +0 -39
data/History.md
CHANGED
@@ -1,3 +1,43 @@
|
|
1
|
+
1.2.0 (2022-04-15)
|
2
|
+
==================
|
3
|
+
|
4
|
+
* Migrate CI to Github actions (Jonathan Tron)
|
5
|
+
* Add a new sequel-rails hook: `after_new_connection` which
|
6
|
+
sets `Sequel`'s `after_connect`, and is triggered for every
|
7
|
+
new connection (@kamilpavlicko)
|
8
|
+
[#186](https://github.com/TalentBox/sequel-rails/pull/186)
|
9
|
+
* Database drop fix for Sequel (>= 5.38.0) (@AnotherRegularDude)
|
10
|
+
[#184](https://github.com/TalentBox/sequel-rails/pull/184)
|
11
|
+
* Fix for simplified Spring integration (Janko Marohnić, Adrián Mugnolo)
|
12
|
+
[#181](https://github.com/TalentBox/sequel-rails/pull/181)
|
13
|
+
* Simplify Spring integration (Janko Marohnić)
|
14
|
+
[#180](https://github.com/TalentBox/sequel-rails/pull/180)
|
15
|
+
|
16
|
+
1.1.1 (2020-06-08)
|
17
|
+
==================
|
18
|
+
|
19
|
+
* When using SQL schema dump in MySQL, don't output the generation date in order
|
20
|
+
to have the same output if nothing changed. (Joseph Halter)
|
21
|
+
* Fix readme formatting (Ben Koshy)
|
22
|
+
[#175](https://github.com/TalentBox/sequel-rails/pull/175)
|
23
|
+
* Add frozen_string_literal to migration template (Semyon Pupkov)
|
24
|
+
[#174](https://github.com/TalentBox/sequel-rails/pull/174)
|
25
|
+
* Add allow_missing_migration_files option (Semyon Pupkov)
|
26
|
+
[#172](https://github.com/TalentBox/sequel-rails/pull/172)
|
27
|
+
[#173](https://github.com/TalentBox/sequel-rails/pull/173)
|
28
|
+
|
29
|
+
1.1.0 (2019-10-29)
|
30
|
+
==================
|
31
|
+
|
32
|
+
* Add test_connect option (p-leger)
|
33
|
+
[#165](https://github.com/TalentBox/sequel-rails/pull/165)
|
34
|
+
* Silence logger for sessions store (Michael Coyne)
|
35
|
+
[#171](https://github.com/TalentBox/sequel-rails/pull/171)
|
36
|
+
* Add db:sessions:clear and db:sessions:trim rake tasks (Michael Coyne)
|
37
|
+
[#170](https://github.com/TalentBox/sequel-rails/pull/170)
|
38
|
+
* Allow 'servers' to propagate to Sequel connection (Dustin Byrne)
|
39
|
+
[#169](https://github.com/TalentBox/sequel-rails/pull/169)
|
40
|
+
|
1
41
|
1.0.1 (2018-02-27)
|
2
42
|
==================
|
3
43
|
|
data/README.md
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
# sequel-rails
|
2
2
|
|
3
3
|
[][gem]
|
4
|
-
|
4
|
+

|
5
5
|
[][codeclimate]
|
6
6
|
|
7
7
|
[gem]: https://rubygems.org/gems/sequel-rails
|
8
|
-
[travis]: http://travis-ci.org/TalentBox/sequel-rails
|
9
8
|
[codeclimate]: https://codeclimate.com/github/TalentBox/sequel-rails
|
10
9
|
|
11
10
|
This gem provides the railtie that allows
|
12
11
|
[sequel](http://github.com/jeremyevans/sequel) to hook into
|
13
|
-
[Rails (
|
12
|
+
[Rails (5.2.x, 6.x, 7.x)](http://github.com/rails/rails) and thus behave like a
|
14
13
|
rails framework component. Just like activerecord does in rails,
|
15
14
|
[sequel-rails](http://github.com/talentbox/sequel-rails) uses the railtie API to
|
16
15
|
hook into rails. The two are actually hooked into rails almost identically.
|
@@ -28,7 +27,7 @@ Since January 2013, we've become the official maintainers of the gem after
|
|
28
27
|
Using sequel-rails
|
29
28
|
==================
|
30
29
|
|
31
|
-
Using sequel with Rails (
|
30
|
+
Using sequel with Rails (5.2.x, 6.x, 7.x) requires a couple minor changes.
|
32
31
|
|
33
32
|
First, add the following to your Gemfile (after the `Rails` lines):
|
34
33
|
|
@@ -166,6 +165,9 @@ You can configure some options with the usual rails mechanism, in
|
|
166
165
|
# Allowed options: :sql, :ruby.
|
167
166
|
config.sequel.schema_format = :sql
|
168
167
|
|
168
|
+
# Allowed options: true, false, default false
|
169
|
+
config.sequel.allow_missing_migration_files = true
|
170
|
+
|
169
171
|
# Whether to dump the schema after successful migrations.
|
170
172
|
# Defaults to false in production and test, true otherwise.
|
171
173
|
config.sequel.schema_dump = true
|
@@ -188,6 +190,21 @@ You can configure some options with the usual rails mechanism, in
|
|
188
190
|
# This setting disabled the automatic connect after Rails init
|
189
191
|
config.sequel.skip_connect = true
|
190
192
|
|
193
|
+
# Configure if Sequel should try to 'test' the database connection in order
|
194
|
+
# to fail early
|
195
|
+
config.sequel.test_connect = true
|
196
|
+
|
197
|
+
# Configure what should happend after SequelRails will create new connection with Sequel (applicable only for the first new connection)
|
198
|
+
# config.sequel.after_connect = proc do
|
199
|
+
# Sequel::Model.plugin :timestamps, update_on_create: true
|
200
|
+
# end
|
201
|
+
|
202
|
+
# Configure what should happend after new connection in connection pool is created (applicable only for all connections)
|
203
|
+
# to fail early
|
204
|
+
# config.sequel.after_new_connection = proc do |db|
|
205
|
+
# db.execute('SET statement_timeout = 30000;')
|
206
|
+
# end
|
207
|
+
|
191
208
|
# If you want to use a specific logger
|
192
209
|
config.sequel.logger = MyLogger.new($stdout)
|
193
210
|
```
|
@@ -246,11 +263,30 @@ Here's some examples:
|
|
246
263
|
|
247
264
|
For in memory testing:
|
248
265
|
|
249
|
-
|
250
|
-
|
266
|
+
```yaml
|
267
|
+
development:
|
251
268
|
adapter: sqlite # Also accept sqlite3
|
252
269
|
database: ":memory:"
|
253
|
-
|
270
|
+
```
|
271
|
+
|
272
|
+
after_connect hooks
|
273
|
+
================
|
274
|
+
|
275
|
+
There are 2 options how to set after_connect hooks in `config/application.rb`
|
276
|
+
|
277
|
+
1. `config.sequel.after_connect` will be called only on the first new connection. It can be used for enabling plugins or to set some global sequel settings.
|
278
|
+
```ruby
|
279
|
+
config.sequel.after_connect = proc do
|
280
|
+
Sequel::Model.plugin :timestamps, update_on_create: true
|
281
|
+
end
|
282
|
+
```
|
283
|
+
|
284
|
+
2. `config.sequel.after_new_connection` will be called after every new connection in connection pool is created. It can be used to run some specific `SET` commands on every new connection. It's using default `after_connect` hook in sequel. https://sequel.jeremyevans.net/rdoc/classes/Sequel/ConnectionPool.html#attribute-i-after_connect
|
285
|
+
```ruby
|
286
|
+
config.sequel.after_new_connection = proc do |db|
|
287
|
+
db.execute('SET statement_timeout = 30000;')
|
288
|
+
end
|
289
|
+
```
|
254
290
|
|
255
291
|
Enabling plugins
|
256
292
|
================
|
@@ -333,6 +369,8 @@ rake db:schema:load # Load a schema.rb file into the database
|
|
333
369
|
rake db:seed # Load the seed data from db/seeds.rb
|
334
370
|
rake db:setup # Create the database, load the schema, and initialize with the seed data
|
335
371
|
rake db:test:prepare # Prepare test database (ensure all migrations ran, drop and re-create database then load schema). This task can be run in the same invocation as other task (eg: rake db:migrate db:test:prepare).
|
372
|
+
rake db:sessions:clear # Delete all sessions from the database
|
373
|
+
rake db:sessions:trim[threshold] # Delete all sessions older than `threshold` days (default to 30 days, eg: rake db:session:trim[10])
|
336
374
|
```
|
337
375
|
|
338
376
|
Note on Patches/Pull Requests
|
@@ -349,15 +387,15 @@ Note on Patches/Pull Requests
|
|
349
387
|
The sequel-rails team
|
350
388
|
=====================
|
351
389
|
|
352
|
-
* Jonathan Tron (JonathanTron) - Current maintainer
|
353
|
-
* Joseph Halter (JosephHalter) - Current maintainer
|
390
|
+
* Jonathan Tron (@JonathanTron) - Current maintainer
|
391
|
+
* Joseph Halter (@JosephHalter) - Current maintainer
|
354
392
|
|
355
393
|
Previous maintainer
|
356
394
|
===================
|
357
395
|
|
358
396
|
[Original project](https://github.com/brasten/sequel-rails):
|
359
397
|
|
360
|
-
* Brasten Sager (brasten) - Project creator
|
398
|
+
* Brasten Sager (@brasten) - Project creator
|
361
399
|
|
362
400
|
Contributors
|
363
401
|
============
|
@@ -403,6 +441,15 @@ Improvements have been made by those awesome contributors:
|
|
403
441
|
* ckoenig (@ckoenig)
|
404
442
|
* Rolf Timmermans (@rolftimmermans)
|
405
443
|
* Olivier Lacan (@olivierlacan)
|
444
|
+
* Dustin Byrne (@dsbyrne)
|
445
|
+
* Michael Coyne (@mjc-gh)
|
446
|
+
* p-leger (@p-leger)
|
447
|
+
* Semyon Pupkov (@artofhuman)
|
448
|
+
* Ben Koshy (@BKSpurgeon)
|
449
|
+
* Janko Marohnić (@janko)
|
450
|
+
* Adrián Mugnolo (@xymbol)
|
451
|
+
* Ivan (@AnotherRegularDude)
|
452
|
+
* kamilpavlicko (@kamilpavlicko)
|
406
453
|
|
407
454
|
Credits
|
408
455
|
=======
|
@@ -412,4 +459,4 @@ The [dm-rails](http://github.com/datamapper/dm-rails) team wrote most of the ori
|
|
412
459
|
Copyright
|
413
460
|
=========
|
414
461
|
|
415
|
-
Copyright (c) 2010-
|
462
|
+
Copyright (c) 2010-2022 The sequel-rails team. See [LICENSE](http://github.com/brasten/sequel-rails/blob/master/LICENSE) for details.
|
data/Rakefile
CHANGED
@@ -19,6 +19,7 @@ begin
|
|
19
19
|
%w(
|
20
20
|
TEST_ADAPTER
|
21
21
|
TEST_DATABASE
|
22
|
+
TEST_DATABASE_HOST
|
22
23
|
TEST_OWNER
|
23
24
|
TEST_USERNAME
|
24
25
|
TEST_PASSWORD
|
@@ -33,10 +34,6 @@ begin
|
|
33
34
|
'sqlite3' => { 'TEST_DATABASE' => File.join(File.expand_path('.'), 'spec/internal/db/database.sqlite3') },
|
34
35
|
}
|
35
36
|
|
36
|
-
configs.merge!(
|
37
|
-
'mysql' => { 'TEST_ENCODING' => 'utf8', 'TEST_USERNAME' => 'root' }
|
38
|
-
) if RUBY_VERSION < '2.4'
|
39
|
-
|
40
37
|
configs.merge!(
|
41
38
|
'mysql2' => { 'TEST_ENCODING' => 'utf8', 'TEST_USERNAME' => 'root', 'TEST_DATABASE' => 'sequel_rails_test_mysql2' }
|
42
39
|
) unless SequelRails.jruby?
|
@@ -1,7 +1,8 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'railties', '~> 5.
|
4
|
-
gem 'activemodel', '~> 5.
|
3
|
+
gem 'railties', '~> 5.2.2'
|
4
|
+
gem 'activemodel', '~> 5.2.2'
|
5
|
+
gem 'actionpack', '~> 5.2.2'
|
5
6
|
|
6
7
|
gemspec :path => '../'
|
7
8
|
|
@@ -9,12 +10,11 @@ gem 'sequel', "#{ENV['SEQUEL']}"
|
|
9
10
|
|
10
11
|
gem 'fakefs', '0.11.2', :require => 'fakefs/safe'
|
11
12
|
|
13
|
+
gem 'rspec-rails', '~> 5.0'
|
14
|
+
|
12
15
|
# MRI/Rubinius Adapter Dependencies
|
13
16
|
platform :ruby do
|
14
17
|
gem 'pg'
|
15
|
-
if RUBY_VERSION < '2.4'
|
16
|
-
gem 'mysql'
|
17
|
-
end
|
18
18
|
gem 'mysql2'
|
19
19
|
gem 'sqlite3'
|
20
20
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'railties', '~>
|
3
|
+
gem 'railties', '~> 6.0.0'
|
4
|
+
gem 'activemodel', '~> 6.0.0'
|
5
|
+
gem 'actionpack', '~> 6.0.0'
|
4
6
|
|
5
7
|
gemspec :path => '../'
|
6
8
|
|
@@ -8,12 +10,11 @@ gem 'sequel', "#{ENV['SEQUEL']}"
|
|
8
10
|
|
9
11
|
gem 'fakefs', '0.11.2', :require => 'fakefs/safe'
|
10
12
|
|
13
|
+
gem 'rspec-rails', '~> 5.0'
|
14
|
+
|
11
15
|
# MRI/Rubinius Adapter Dependencies
|
12
16
|
platform :ruby do
|
13
17
|
gem 'pg'
|
14
|
-
if RUBY_VERSION < '2.4'
|
15
|
-
gem 'mysql'
|
16
|
-
end
|
17
18
|
gem 'mysql2'
|
18
19
|
gem 'sqlite3'
|
19
20
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'railties', '~>
|
3
|
+
gem 'railties', '~> 6.1.0'
|
4
|
+
gem 'activemodel', '~> 6.1.0'
|
5
|
+
gem 'actionpack', '~> 6.1.0'
|
4
6
|
|
5
7
|
gemspec :path => '../'
|
6
8
|
|
@@ -8,12 +10,11 @@ gem 'sequel', "#{ENV['SEQUEL']}"
|
|
8
10
|
|
9
11
|
gem 'fakefs', '0.11.2', :require => 'fakefs/safe'
|
10
12
|
|
13
|
+
gem 'rspec-rails', '~> 5.0'
|
14
|
+
|
11
15
|
# MRI/Rubinius Adapter Dependencies
|
12
16
|
platform :ruby do
|
13
17
|
gem 'pg'
|
14
|
-
if RUBY_VERSION < '2.4'
|
15
|
-
gem 'mysql'
|
16
|
-
end
|
17
18
|
gem 'mysql2'
|
18
19
|
gem 'sqlite3'
|
19
20
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'railties', '~>
|
3
|
+
gem 'railties', '~> 7.0.0'
|
4
|
+
gem 'activemodel', '~> 7.0.0'
|
5
|
+
gem 'actionpack', '~> 7.0.0'
|
4
6
|
|
5
7
|
gemspec :path => '../'
|
6
8
|
|
@@ -8,12 +10,11 @@ gem 'sequel', "#{ENV['SEQUEL']}"
|
|
8
10
|
|
9
11
|
gem 'fakefs', '0.11.2', :require => 'fakefs/safe'
|
10
12
|
|
13
|
+
gem 'rspec-rails', '~> 5.0'
|
14
|
+
|
11
15
|
# MRI/Rubinius Adapter Dependencies
|
12
16
|
platform :ruby do
|
13
17
|
gem 'pg'
|
14
|
-
if RUBY_VERSION < '2.4'
|
15
|
-
gem 'mysql'
|
16
|
-
end
|
17
18
|
gem 'mysql2'
|
18
19
|
gem 'sqlite3'
|
19
20
|
end
|
@@ -26,13 +26,17 @@ module ActionDispatch
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def get_session(env, sid)
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
with_silenced_logger do
|
30
|
+
session = load_from_store(sid)
|
31
|
+
env[SESSION_RECORD_KEY] = session
|
32
|
+
[session.session_id, session.data]
|
33
|
+
end
|
32
34
|
end
|
33
35
|
|
34
36
|
def write_session(req, sid, session_data, options)
|
35
|
-
|
37
|
+
with_silenced_logger do
|
38
|
+
set_session(req.env, sid, session_data, options)
|
39
|
+
end
|
36
40
|
end
|
37
41
|
|
38
42
|
def set_session(env, sid, session_data, options)
|
@@ -42,7 +46,9 @@ module ActionDispatch
|
|
42
46
|
end
|
43
47
|
|
44
48
|
def delete_session(req, sid, options)
|
45
|
-
|
49
|
+
with_silenced_logger do
|
50
|
+
destroy_session(req.env, sid, options)
|
51
|
+
end
|
46
52
|
end
|
47
53
|
|
48
54
|
def destroy_session(env, sid, options)
|
@@ -53,10 +59,12 @@ module ActionDispatch
|
|
53
59
|
end
|
54
60
|
|
55
61
|
def get_session_model(env, sid)
|
56
|
-
|
57
|
-
env[
|
58
|
-
|
59
|
-
|
62
|
+
with_silenced_logger do
|
63
|
+
if env[ENV_SESSION_OPTIONS_KEY][:id].nil?
|
64
|
+
env[SESSION_RECORD_KEY] = load_from_store(sid)
|
65
|
+
else
|
66
|
+
env[SESSION_RECORD_KEY] ||= load_from_store(sid)
|
67
|
+
end
|
60
68
|
end
|
61
69
|
end
|
62
70
|
|
@@ -65,6 +73,10 @@ module ActionDispatch
|
|
65
73
|
klass.where(:session_id => sid).first ||
|
66
74
|
klass.new(:session_id => generate_sid, :data => {})
|
67
75
|
end
|
76
|
+
|
77
|
+
def with_silenced_logger
|
78
|
+
Rails.application.config.sequel.logger.silence { yield }
|
79
|
+
end
|
68
80
|
end
|
69
81
|
end
|
70
82
|
end
|
@@ -27,7 +27,9 @@ module SequelRails
|
|
27
27
|
self.schema_dump = default_schema_dump
|
28
28
|
self.load_database_tasks = true
|
29
29
|
self.after_connect = nil
|
30
|
+
self.after_new_connection = nil
|
30
31
|
self.skip_connect = nil
|
32
|
+
self.test_connect = true
|
31
33
|
end
|
32
34
|
|
33
35
|
def environment_for(name)
|
@@ -72,6 +74,9 @@ module SequelRails
|
|
72
74
|
|
73
75
|
config['max_connections'] = max_connections if max_connections
|
74
76
|
config['search_path'] = search_path if search_path
|
77
|
+
config['servers'] = servers if servers
|
78
|
+
config['test'] = test_connect
|
79
|
+
config['after_connect'] = after_new_connection if after_new_connection
|
75
80
|
|
76
81
|
url = ENV['DATABASE_URL']
|
77
82
|
config['url'] ||= url if url
|
@@ -73,8 +73,8 @@ module SequelRails
|
|
73
73
|
return URI::Generic.build(:scheme => adapter, :opaque => database)
|
74
74
|
end
|
75
75
|
|
76
|
-
# these
|
77
|
-
params = cfg.reject { |k, _|
|
76
|
+
# these are handled separately
|
77
|
+
params = cfg.reject { |k, _| non_params.include? k }
|
78
78
|
|
79
79
|
if (v = params['search_path'])
|
80
80
|
# make sure there's no whitespace
|
@@ -96,6 +96,10 @@ module SequelRails
|
|
96
96
|
:query => q
|
97
97
|
)
|
98
98
|
end
|
99
|
+
|
100
|
+
def non_params
|
101
|
+
%w(adapter host port database servers)
|
102
|
+
end
|
99
103
|
end
|
100
104
|
end
|
101
105
|
|
@@ -6,6 +6,7 @@ module SequelRails
|
|
6
6
|
def migrate(version = nil)
|
7
7
|
opts = {}
|
8
8
|
opts[:target] = version.to_i if version
|
9
|
+
opts[:allow_missing_migration_files] = !!SequelRails.configuration.allow_missing_migration_files
|
9
10
|
|
10
11
|
if migrations_dir.directory?
|
11
12
|
::Sequel::Migrator.run(::Sequel::Model.db, migrations_dir, opts)
|
@@ -25,12 +26,10 @@ module SequelRails
|
|
25
26
|
def dump_schema_information(opts = {})
|
26
27
|
sql = opts.fetch :sql
|
27
28
|
adapter = SequelRails::Storage.adapter_for(Rails.env)
|
28
|
-
db = ::Sequel::Model.db
|
29
29
|
res = ''
|
30
30
|
|
31
31
|
if available_migrations?
|
32
|
-
|
33
|
-
migrator = migrator_class.new db, migrations_dir
|
32
|
+
migrator = init_migrator
|
34
33
|
res << adapter.schema_information_dump(migrator, sql)
|
35
34
|
end
|
36
35
|
res
|
@@ -43,8 +42,8 @@ module SequelRails
|
|
43
42
|
def current_migration
|
44
43
|
return unless available_migrations?
|
45
44
|
|
46
|
-
|
47
|
-
|
45
|
+
migrator = init_migrator
|
46
|
+
|
48
47
|
if migrator.respond_to?(:applied_migrations)
|
49
48
|
migrator.applied_migrations.last
|
50
49
|
elsif migrator.respond_to?(:current_version)
|
@@ -55,8 +54,8 @@ module SequelRails
|
|
55
54
|
def previous_migration
|
56
55
|
return unless available_migrations?
|
57
56
|
|
58
|
-
|
59
|
-
|
57
|
+
migrator = init_migrator
|
58
|
+
|
60
59
|
if migrator.respond_to?(:applied_migrations)
|
61
60
|
migrator.applied_migrations[-2] || '0'
|
62
61
|
elsif migrator.respond_to?(:current_version)
|
@@ -67,6 +66,16 @@ module SequelRails
|
|
67
66
|
def available_migrations?
|
68
67
|
File.exist?(migrations_dir) && Dir[File.join(migrations_dir, '*')].any?
|
69
68
|
end
|
69
|
+
|
70
|
+
def init_migrator
|
71
|
+
migrator_class = ::Sequel::Migrator.send(:migrator_class, migrations_dir)
|
72
|
+
|
73
|
+
migrator_class.new(
|
74
|
+
::Sequel::Model.db,
|
75
|
+
migrations_dir,
|
76
|
+
allow_missing_migration_files: !!SequelRails.configuration.allow_missing_migration_files
|
77
|
+
)
|
78
|
+
end
|
70
79
|
end
|
71
80
|
end
|
72
81
|
end
|
data/lib/sequel_rails/railtie.rb
CHANGED
@@ -15,7 +15,6 @@ require 'sequel_rails/configuration'
|
|
15
15
|
require 'sequel_rails/migrations'
|
16
16
|
require 'sequel_rails/railties/log_subscriber'
|
17
17
|
require 'sequel_rails/railties/i18n_support'
|
18
|
-
require 'sequel_rails/railties/spring_support'
|
19
18
|
require 'sequel_rails/railties/controller_runtime'
|
20
19
|
require 'sequel_rails/sequel/database/active_support_notification'
|
21
20
|
require 'action_dispatch/middleware/session/sequel_store'
|
@@ -76,19 +75,17 @@ module SequelRails
|
|
76
75
|
end
|
77
76
|
|
78
77
|
initializer 'sequel.spring' do |_app|
|
79
|
-
if defined?(
|
80
|
-
class ::Spring::Application # rubocop:disable Style/ClassAndModuleChildren
|
81
|
-
include ::SequelRails::SpringSupport
|
82
|
-
alias_method :disconnect_database_without_sequel, :disconnect_database
|
83
|
-
alias_method :disconnect_database, :disconnect_database_with_sequel
|
84
|
-
end
|
85
|
-
end
|
78
|
+
Spring.after_fork { Sequel::DATABASES.each(&:disconnect) } if defined?(Spring)
|
86
79
|
end
|
87
80
|
|
88
81
|
# Support overwriting crucial steps in subclasses
|
89
82
|
def configure_sequel(app)
|
90
83
|
rails_db_config = begin
|
91
84
|
app.config.database_configuration
|
85
|
+
rescue RuntimeError => e
|
86
|
+
raise unless e.message =~ /Cannot load database configuration/
|
87
|
+
|
88
|
+
{} # will try to use DATABASE_URL
|
92
89
|
rescue Errno::ENOENT
|
93
90
|
{} # will try to use DATABASE_URL
|
94
91
|
end
|
@@ -119,7 +116,7 @@ module SequelRails
|
|
119
116
|
end
|
120
117
|
|
121
118
|
def database_create_command?
|
122
|
-
[
|
119
|
+
['db:create', 'db:create:all'].any? { |c| ARGV.include?(c) }
|
123
120
|
end
|
124
121
|
end
|
125
122
|
end
|
@@ -213,6 +213,23 @@ namespace sequel_rails_namespace do
|
|
213
213
|
Rails.env = previous_env
|
214
214
|
end
|
215
215
|
end
|
216
|
+
|
217
|
+
namespace :sessions do
|
218
|
+
desc 'Clear the sessions table'
|
219
|
+
task clear: :environment do
|
220
|
+
db_for_current_env.from(:sessions).truncate
|
221
|
+
end
|
222
|
+
|
223
|
+
desc 'Trim old sessions from the table (default: > 30 days)'
|
224
|
+
task :trim, [:threshold] => :environment do |_, args|
|
225
|
+
cutoff_period = (args.fetch(:threshold) { 30 }).to_i.days.ago
|
226
|
+
|
227
|
+
db_for_current_env
|
228
|
+
.from(:sessions)
|
229
|
+
.where { updated_at < cutoff_period }
|
230
|
+
.delete
|
231
|
+
end
|
232
|
+
end
|
216
233
|
end
|
217
234
|
|
218
235
|
task 'test:prepare' => "#{sequel_rails_namespace}:test:prepare"
|
data/lib/sequel_rails/version.rb
CHANGED
data/sequel-rails.gemspec
CHANGED
@@ -29,12 +29,13 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.add_dependency 'actionpack', '>= 4.0.0'
|
30
30
|
s.add_dependency 'sequel', ['>= 3.28', '< 6.0']
|
31
31
|
|
32
|
-
s.add_development_dependency 'combustion'
|
32
|
+
s.add_development_dependency 'combustion', '~> 1.3'
|
33
33
|
s.add_development_dependency 'generator_spec'
|
34
|
-
s.add_development_dependency 'rake'
|
35
|
-
s.add_development_dependency 'rspec'
|
36
|
-
s.add_development_dependency 'rspec-rails'
|
37
|
-
s.add_development_dependency 'rubocop', '
|
38
|
-
s.add_development_dependency 'ammeter', '1.1.
|
34
|
+
s.add_development_dependency 'rake'
|
35
|
+
s.add_development_dependency 'rspec'
|
36
|
+
s.add_development_dependency 'rspec-rails'
|
37
|
+
s.add_development_dependency 'rubocop', '1.27.0'
|
38
|
+
s.add_development_dependency 'ammeter', '1.1.5'
|
39
39
|
s.add_development_dependency 'test-unit'
|
40
|
+
s.add_development_dependency 'nokogiri', '>= 1.13.4'
|
40
41
|
end
|
data/spec/helpers/io.rb
CHANGED
@@ -4,5 +4,10 @@ module IOSpecHelper
|
|
4
4
|
# if this isn't a good use for case equality I don't know what is
|
5
5
|
pattern === a.first ? raise(Errno::ENOENT) : m.call(*a) # rubocop:disable CaseEquality
|
6
6
|
end
|
7
|
+
# Rails > 6.1 uses Pathname#exists? instead of rescuing read error
|
8
|
+
allow(Pathname).to receive(:new).and_call_original
|
9
|
+
allow(Pathname).to receive(:new).with(pattern).and_return(
|
10
|
+
instance_double(Pathname, :exist? => false)
|
11
|
+
)
|
7
12
|
end
|
8
13
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
test:
|
2
2
|
adapter: "<%= ENV["TEST_ADAPTER"] || "postgresql" %>"
|
3
3
|
database: "<%= ENV["TEST_DATABASE"] || "sequel_rails_test" %>"
|
4
|
+
host: "<%= ENV["TEST_DATABASE_HOST"] %>"
|
4
5
|
<% if ENV['TEST_ADAPTER'] != 'sqlite3' %>
|
5
6
|
owner: "<%= ENV["TEST_OWNER"] || ENV["USER"] %>"
|
6
7
|
user: "<%= ENV["TEST_USERNAME"] || ENV["USER"] %>"
|
@@ -8,6 +9,8 @@ test:
|
|
8
9
|
<% end %>
|
9
10
|
<% if ENV['TEST_ADAPTER'] =~ /mysql/ %>
|
10
11
|
encoding: "<%= ENV["TEST_ENCODING"] || "utf8" %>"
|
12
|
+
port: "<%= ENV["TEST_DATABASE_PORT"] || "3306" %>"
|
11
13
|
<% elsif ENV['TEST_ADAPTER'] =~ /postgres/ %>
|
12
14
|
encoding: "<%= ENV["TEST_ENCODING"] || "unicode" %>"
|
15
|
+
port: "<%= ENV["TEST_DATABASE_PORT"] || "5432" %>"
|
13
16
|
<% end %>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
Sequel.migration do
|
2
2
|
change do
|
3
|
-
create_table :users do
|
3
|
+
create_table? :users do
|
4
4
|
primary_key :id
|
5
5
|
String :email
|
6
6
|
end
|
7
|
-
create_table :sessions do
|
7
|
+
create_table? :sessions do
|
8
8
|
primary_key :id
|
9
9
|
String :session_id, :null => false, :unique => true, :index => true
|
10
10
|
String :data, :text => true, :null => false
|