sequel-rails 0.7.0 → 0.8.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/.gitignore +1 -0
- data/.rubocop.yml +13 -0
- data/.travis.yml +15 -43
- data/Gemfile +10 -10
- data/History.md +8 -0
- data/README.md +36 -0
- data/Rakefile +70 -2
- data/ci/rails-3.2.gemfile +15 -12
- data/ci/rails-4.0.gemfile +12 -12
- data/config.ru +1 -1
- data/lib/generators/sequel/migration/migration_generator.rb +10 -13
- data/lib/generators/sequel/model/model_generator.rb +11 -9
- data/lib/generators/sequel/observer/observer_generator.rb +6 -7
- data/lib/generators/sequel/session_migration/session_migration_generator.rb +30 -0
- data/lib/generators/sequel/session_migration/templates/migration.rb.erb +10 -0
- data/lib/generators/sequel.rb +9 -13
- data/lib/sequel-rails.rb +1 -1
- data/lib/sequel_rails/configuration.rb +29 -35
- data/lib/sequel_rails/migrations.rb +4 -4
- data/lib/sequel_rails/railtie.rb +16 -20
- data/lib/sequel_rails/railties/controller_runtime.rb +2 -8
- data/lib/sequel_rails/railties/database.rake +42 -46
- data/lib/sequel_rails/railties/i18n_support.rb +0 -2
- data/lib/sequel_rails/railties/legacy_model_config.rb +1 -1
- data/lib/sequel_rails/railties/log_subscriber.rb +5 -9
- data/lib/sequel_rails/sequel/database/active_support_notification.rb +4 -6
- data/lib/sequel_rails/sequel/plugins/rails_extensions.rb +2 -3
- data/lib/sequel_rails/session_store.rb +6 -42
- data/lib/sequel_rails/shellwords.rb +3 -3
- data/lib/sequel_rails/storage/abstract.rb +14 -16
- data/lib/sequel_rails/storage/jdbc.rb +8 -10
- data/lib/sequel_rails/storage/mysql.rb +13 -15
- data/lib/sequel_rails/storage/postgres.rb +42 -45
- data/lib/sequel_rails/storage/sqlite.rb +0 -1
- data/lib/sequel_rails/storage.rb +10 -10
- data/lib/sequel_rails/version.rb +1 -1
- data/lib/sequel_rails.rb +3 -3
- data/rubocop-todo.yml +24 -0
- data/sequel-rails.gemspec +21 -19
- data/spec/internal/Rakefile +2 -2
- data/spec/internal/config/initializers/session.rb +1 -1
- data/spec/internal/db/schema.rb.init +6 -0
- data/spec/lib/generators/sequel/migration_spec.rb +77 -77
- data/spec/lib/generators/sequel/session_migration_spec.rb +41 -0
- data/spec/lib/sequel_rails/configuration_spec.rb +161 -161
- data/spec/lib/sequel_rails/jdbc_spec.rb +4 -4
- data/spec/lib/sequel_rails/migrations_spec.rb +29 -29
- data/spec/lib/sequel_rails/railtie_spec.rb +31 -29
- data/spec/lib/sequel_rails/railties/database_rake_spec.rb +16 -15
- data/spec/lib/sequel_rails/railties/log_subscriber_spec.rb +6 -6
- data/spec/lib/sequel_rails/storage/mysql_spec.rb +31 -31
- data/spec/lib/sequel_rails/storage/postgres_spec.rb +67 -67
- data/spec/lib/sequel_rails/storage/sqlite_spec.rb +40 -40
- data/spec/lib/sequel_rails/storage_spec.rb +77 -89
- data/spec/spec_helper.rb +16 -10
- metadata +61 -28
- data/tasks/spec.rake +0 -81
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'active_support/core_ext/class/attribute_accessors'
|
2
2
|
|
3
3
|
module SequelRails
|
4
|
-
|
5
4
|
mattr_accessor :configuration
|
6
5
|
|
7
6
|
def self.setup(environment)
|
@@ -9,7 +8,6 @@ module SequelRails
|
|
9
8
|
end
|
10
9
|
|
11
10
|
class Configuration < ActiveSupport::OrderedOptions
|
12
|
-
|
13
11
|
def self.for(root, database_yml_hash)
|
14
12
|
::SequelRails.configuration ||= begin
|
15
13
|
config = new
|
@@ -35,7 +33,7 @@ module SequelRails
|
|
35
33
|
end
|
36
34
|
|
37
35
|
def environments
|
38
|
-
@environments ||= raw.
|
36
|
+
@environments ||= raw.reduce({}) do |normalized, environment|
|
39
37
|
name, config = environment.first, environment.last
|
40
38
|
normalized[name] = normalize_repository_config(config)
|
41
39
|
normalized
|
@@ -44,47 +42,45 @@ module SequelRails
|
|
44
42
|
|
45
43
|
def connect(environment)
|
46
44
|
normalized_config = environment_for environment
|
47
|
-
|
45
|
+
if normalized_config['url']
|
48
46
|
::Sequel.connect normalized_config['url'], normalized_config
|
49
47
|
else
|
50
48
|
::Sequel.connect normalized_config
|
51
|
-
end
|
52
|
-
after_connect.call if after_connect.respond_to?(:call)
|
53
|
-
db
|
49
|
+
end.tap { after_connect.call if after_connect.respond_to?(:call) }
|
54
50
|
end
|
55
51
|
|
56
|
-
|
52
|
+
private
|
57
53
|
|
58
54
|
def default_schema_dump
|
59
|
-
|
55
|
+
!%w(test production).include? Rails.env
|
60
56
|
end
|
61
57
|
|
62
58
|
def normalize_repository_config(hash)
|
63
59
|
config = {}
|
64
60
|
hash.each do |key, value|
|
65
61
|
config[key.to_s] =
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
62
|
+
if key.to_s == 'port'
|
63
|
+
value.to_i
|
64
|
+
elsif key.to_s == 'adapter' && value == 'sqlite3'
|
65
|
+
'sqlite'
|
66
|
+
elsif key.to_s == 'database' && (hash['adapter'] == 'sqlite3' ||
|
67
|
+
hash['adapter'] == 'sqlite' ||
|
68
|
+
hash[:adapter] == 'sqlite3' ||
|
69
|
+
hash[:adapter] == 'sqlite')
|
70
|
+
value == ':memory:' ? value : File.expand_path((hash['database'] || hash[:database]), root)
|
71
|
+
elsif key.to_s == 'adapter' && value == 'postgresql'
|
72
|
+
'postgres'
|
73
|
+
else
|
74
|
+
value
|
75
|
+
end
|
80
76
|
end
|
81
77
|
|
82
78
|
# always use jdbc when running jruby
|
83
79
|
if SequelRails.jruby?
|
84
80
|
if config['adapter']
|
85
81
|
case config['adapter'].to_sym
|
86
|
-
|
87
|
-
|
82
|
+
when :postgres
|
83
|
+
config['adapter'] = :postgresql
|
88
84
|
end
|
89
85
|
config['adapter'] = "jdbc:#{config['adapter']}"
|
90
86
|
end
|
@@ -95,29 +91,27 @@ module SequelRails
|
|
95
91
|
config['search_path'] = search_path if search_path
|
96
92
|
|
97
93
|
# some adapters only support an url
|
98
|
-
if config['adapter'] && config['adapter'] =~ /^(jdbc|do):/ && !config.
|
94
|
+
if config['adapter'] && config['adapter'] =~ /^(jdbc|do):/ && !config.key?('url')
|
99
95
|
params = {}
|
100
96
|
config.each do |k, v|
|
101
|
-
next if
|
97
|
+
next if %w(adapter host port database).include?(k)
|
102
98
|
if k == 'search_path'
|
103
|
-
v = v.split(',').map
|
104
|
-
v = URI
|
99
|
+
v = v.split(',').map(&:strip) unless v.is_a? Array
|
100
|
+
v = URI.escape(v.join(','))
|
105
101
|
end
|
106
102
|
params[k] = v
|
107
103
|
end
|
108
104
|
params_str = params.map { |k, v| "#{k}=#{v}" }.join('&')
|
109
105
|
port = config['port'] ? ":#{config['port']}" : ''
|
110
|
-
config['url'] ||=
|
111
|
-
|
112
|
-
|
106
|
+
config['url'] ||=
|
107
|
+
if config['adapter'].include?('sqlite')
|
108
|
+
sprintf('%s:%s', config['adapter'], config['database'])
|
113
109
|
else
|
114
|
-
|
110
|
+
sprintf('%s://%s%s/%s?%s', config['adapter'], config['host'], port, config['database'], params_str)
|
115
111
|
end
|
116
112
|
end
|
117
113
|
|
118
114
|
config
|
119
115
|
end
|
120
|
-
|
121
116
|
end
|
122
|
-
|
123
117
|
end
|
@@ -3,7 +3,7 @@ require 'sequel/extensions/migration'
|
|
3
3
|
module SequelRails
|
4
4
|
class Migrations
|
5
5
|
class << self
|
6
|
-
def migrate(version=nil)
|
6
|
+
def migrate(version = nil)
|
7
7
|
opts = {}
|
8
8
|
opts[:target] = version.to_i if version
|
9
9
|
::Sequel::Migrator.run(::Sequel::Model.db, migrations_dir, opts)
|
@@ -16,10 +16,10 @@ module SequelRails
|
|
16
16
|
!::Sequel::Migrator.is_current?(::Sequel::Model.db, migrations_dir)
|
17
17
|
end
|
18
18
|
|
19
|
-
def dump_schema_information(opts={})
|
19
|
+
def dump_schema_information(opts = {})
|
20
20
|
sql = opts.fetch :sql
|
21
21
|
db = ::Sequel::Model.db
|
22
|
-
res =
|
22
|
+
res = ''
|
23
23
|
|
24
24
|
if available_migrations?
|
25
25
|
migrator_class = ::Sequel::Migrator.send(:migrator_class, migrations_dir)
|
@@ -40,7 +40,7 @@ module SequelRails
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def migrations_dir
|
43
|
-
Rails.root.join(
|
43
|
+
Rails.root.join('db/migrate')
|
44
44
|
end
|
45
45
|
|
46
46
|
def available_migrations?
|
data/lib/sequel_rails/railtie.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require 'sequel'
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'rails'
|
4
|
+
require 'active_model/railtie'
|
5
5
|
|
6
6
|
# Comment taken from active_record/railtie.rb
|
7
7
|
#
|
@@ -9,37 +9,35 @@ require "active_model/railtie"
|
|
9
9
|
# rails, so let's make sure that it gets required before
|
10
10
|
# here. This is needed for correctly setting up the middleware.
|
11
11
|
# In the future, this might become an optional require.
|
12
|
-
require
|
12
|
+
require 'action_controller/railtie'
|
13
13
|
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
14
|
+
require 'sequel_rails/configuration'
|
15
|
+
require 'sequel_rails/migrations'
|
16
|
+
require 'sequel_rails/railties/log_subscriber'
|
17
|
+
require 'sequel_rails/railties/i18n_support'
|
18
|
+
require 'sequel_rails/railties/controller_runtime'
|
19
|
+
require 'sequel_rails/sequel/database/active_support_notification'
|
20
20
|
|
21
21
|
module SequelRails
|
22
|
+
autoload :SessionStore, 'sequel_rails/session_store'
|
22
23
|
|
23
24
|
class Railtie < Rails::Railtie
|
24
|
-
|
25
25
|
::SequelRails::Railties::LogSubscriber.attach_to :sequel
|
26
26
|
|
27
27
|
config.app_generators.orm :sequel, :migration => true
|
28
28
|
config.rails_fancy_pants_logging = true
|
29
29
|
|
30
30
|
config.action_dispatch.rescue_responses.merge!(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
'Sequel::Plugins::RailsExtensions::ModelNotFound' => :not_found,
|
32
|
+
'Sequel::NoMatchingRow' => :not_found,
|
33
|
+
'Sequel::ValidationFailed' => :unprocessable_entity,
|
34
|
+
'Sequel::NoExistingObject' => :unprocessable_entity
|
35
35
|
)
|
36
36
|
|
37
37
|
config.sequel = ::SequelRails::Configuration.new
|
38
38
|
|
39
39
|
rake_tasks do |app|
|
40
|
-
if app.config.sequel.load_database_tasks
|
41
|
-
load "sequel_rails/railties/database.rake"
|
42
|
-
end
|
40
|
+
load 'sequel_rails/railties/database.rake' if app.config.sequel.load_database_tasks
|
43
41
|
end
|
44
42
|
|
45
43
|
initializer 'sequel.configuration' do |app|
|
@@ -84,7 +82,5 @@ module SequelRails
|
|
84
82
|
def setup_logger(app, logger)
|
85
83
|
app.config.sequel.logger = logger
|
86
84
|
end
|
87
|
-
|
88
85
|
end
|
89
|
-
|
90
86
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require 'active_support/core_ext/module/attr_internal'
|
2
2
|
|
3
3
|
module SequelRails
|
4
4
|
module Railties
|
5
|
-
|
6
5
|
module ControllerRuntime
|
7
|
-
|
8
6
|
extend ActiveSupport::Concern
|
9
7
|
|
10
8
|
protected
|
@@ -25,16 +23,12 @@ module SequelRails
|
|
25
23
|
end
|
26
24
|
|
27
25
|
module ClassMethods
|
28
|
-
|
29
26
|
def log_process_action(payload)
|
30
27
|
messages, db_runtime = super, payload[:db_runtime]
|
31
|
-
messages << (
|
28
|
+
messages << sprintf('Models: %.1fms', db_runtime.to_f) if db_runtime
|
32
29
|
messages
|
33
30
|
end
|
34
|
-
|
35
31
|
end
|
36
|
-
|
37
32
|
end
|
38
|
-
|
39
33
|
end
|
40
34
|
end
|
@@ -8,59 +8,59 @@ namespace :db do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
# desc "Raises an error if there are pending migrations"
|
11
|
-
task :abort_if_pending_migrations => [:environment,
|
11
|
+
task :abort_if_pending_migrations => [:environment, 'db:migrate:load'] do
|
12
12
|
if SequelRails::Migrations.pending_migrations?
|
13
|
-
puts
|
14
|
-
abort
|
13
|
+
puts 'You have pending migrations:'
|
14
|
+
abort 'Run `rake db:migrate` to update your database then try again.'
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
namespace :schema do
|
19
|
-
desc
|
19
|
+
desc 'Create a db/schema.rb file that can be portably used against any DB supported by Sequel'
|
20
20
|
task :dump => :environment do
|
21
21
|
db_for_current_env.extension :schema_dumper
|
22
22
|
filename = ENV['SCHEMA'] || "#{Rails.root}/db/schema.rb"
|
23
|
-
File.open filename,
|
23
|
+
File.open filename, 'w' do |file|
|
24
24
|
file << db_for_current_env.dump_schema_migration(:same_db => true)
|
25
25
|
file << SequelRails::Migrations.dump_schema_information(:sql => false)
|
26
26
|
end
|
27
|
-
Rake::Task[
|
27
|
+
Rake::Task['db:schema:dump'].reenable
|
28
28
|
end
|
29
29
|
|
30
|
-
desc
|
30
|
+
desc 'Load a schema.rb file into the database'
|
31
31
|
task :load => :environment do
|
32
32
|
file = ENV['SCHEMA'] || "#{Rails.root}/db/schema.rb"
|
33
33
|
if File.exists?(file)
|
34
34
|
require 'sequel/extensions/migration'
|
35
35
|
load(file)
|
36
|
-
::Sequel::Migration.descendants.each{|m| m.apply(db_for_current_env, :up)}
|
36
|
+
::Sequel::Migration.descendants.each { |m| m.apply(db_for_current_env, :up) }
|
37
37
|
else
|
38
|
-
abort
|
38
|
+
abort "#{file} doesn't exist yet. Run 'rake db:migrate' to create it, then try again."
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
namespace :structure do
|
44
|
-
desc
|
44
|
+
desc 'Dump the database structure to db/structure.sql'
|
45
45
|
task :dump, [:env] => :environment do |t, args|
|
46
46
|
args.with_defaults(:env => Rails.env)
|
47
47
|
|
48
|
-
filename = ENV['DB_STRUCTURE'] || File.join(Rails.root,
|
48
|
+
filename = ENV['DB_STRUCTURE'] || File.join(Rails.root, 'db', 'structure.sql')
|
49
49
|
if SequelRails::Storage.dump_environment args.env, filename
|
50
|
-
::File.open filename,
|
50
|
+
::File.open filename, 'a' do |file|
|
51
51
|
file << SequelRails::Migrations.dump_schema_information(:sql => true)
|
52
52
|
end
|
53
53
|
else
|
54
54
|
abort "Could not dump structure for #{args.env}."
|
55
55
|
end
|
56
56
|
|
57
|
-
Rake::Task[
|
57
|
+
Rake::Task['db:structure:dump'].reenable
|
58
58
|
end
|
59
59
|
|
60
60
|
task :load, [:env] => :environment do |t, args|
|
61
61
|
args.with_defaults(:env => Rails.env)
|
62
62
|
|
63
|
-
filename = ENV['DB_STRUCTURE'] || File.join(Rails.root,
|
63
|
+
filename = ENV['DB_STRUCTURE'] || File.join(Rails.root, 'db', 'structure.sql')
|
64
64
|
unless SequelRails::Storage.load_environment args.env, filename
|
65
65
|
abort "Could not load structure for #{args.env}."
|
66
66
|
end
|
@@ -70,9 +70,9 @@ namespace :db do
|
|
70
70
|
task :dump => :environment do
|
71
71
|
case (SequelRails.configuration.schema_format ||= :ruby)
|
72
72
|
when :ruby
|
73
|
-
Rake::Task[
|
73
|
+
Rake::Task['db:schema:dump'].invoke
|
74
74
|
when :sql
|
75
|
-
Rake::Task[
|
75
|
+
Rake::Task['db:structure:dump'].invoke
|
76
76
|
else
|
77
77
|
abort "unknown schema format #{SequelRails.configuration.schema_format}"
|
78
78
|
end
|
@@ -81,9 +81,9 @@ namespace :db do
|
|
81
81
|
task :load => :environment do
|
82
82
|
case (SequelRails.configuration.schema_format ||= :ruby)
|
83
83
|
when :ruby
|
84
|
-
Rake::Task[
|
84
|
+
Rake::Task['db:schema:load'].invoke
|
85
85
|
when :sql
|
86
|
-
Rake::Task[
|
86
|
+
Rake::Task['db:structure:load'].invoke
|
87
87
|
else
|
88
88
|
abort "unknown schema format #{SequelRails.configuration.schema_format}"
|
89
89
|
end
|
@@ -92,13 +92,11 @@ namespace :db do
|
|
92
92
|
namespace :create do
|
93
93
|
desc 'Create all the local databases defined in config/database.yml'
|
94
94
|
task :all => :environment do
|
95
|
-
unless SequelRails::Storage.create_all
|
96
|
-
abort "Could not create all databases."
|
97
|
-
end
|
95
|
+
abort 'Could not create all databases.' unless SequelRails::Storage.create_all
|
98
96
|
end
|
99
97
|
end
|
100
98
|
|
101
|
-
desc
|
99
|
+
desc 'Create the database defined in config/database.yml for the current Rails.env'
|
102
100
|
task :create, [:env] => :environment do |t, args|
|
103
101
|
args.with_defaults(:env => Rails.env)
|
104
102
|
|
@@ -110,13 +108,11 @@ namespace :db do
|
|
110
108
|
namespace :drop do
|
111
109
|
desc 'Drops all the local databases defined in config/database.yml'
|
112
110
|
task :all => :environment do
|
113
|
-
unless SequelRails::Storage.drop_all
|
114
|
-
warn "Couldn't drop all databases"
|
115
|
-
end
|
111
|
+
warn "Couldn't drop all databases" unless SequelRails::Storage.drop_all
|
116
112
|
end
|
117
113
|
end
|
118
114
|
|
119
|
-
desc
|
115
|
+
desc 'Drop the database defined in config/database.yml for the current Rails.env'
|
120
116
|
task :drop, [:env] => :environment do |t, args|
|
121
117
|
args.with_defaults(:env => Rails.env)
|
122
118
|
|
@@ -132,39 +128,39 @@ namespace :db do
|
|
132
128
|
|
133
129
|
desc 'Rollbacks the database one migration and re migrate up. If you want to rollback more than one step, define STEP=x. Target specific version with VERSION=x.'
|
134
130
|
task :redo => :load do
|
135
|
-
if ENV[
|
136
|
-
Rake::Task[
|
137
|
-
Rake::Task[
|
131
|
+
if ENV['VERSION']
|
132
|
+
Rake::Task['db:migrate:down'].invoke
|
133
|
+
Rake::Task['db:migrate:up'].invoke
|
138
134
|
else
|
139
|
-
Rake::Task[
|
140
|
-
Rake::Task[
|
135
|
+
Rake::Task['db:rollback'].invoke
|
136
|
+
Rake::Task['db:migrate'].invoke
|
141
137
|
end
|
142
138
|
end
|
143
139
|
|
144
140
|
desc 'Resets your database using your migrations for the current environment'
|
145
|
-
task :reset =>
|
141
|
+
task :reset => %w(db:drop db:create db:migrate)
|
146
142
|
|
147
143
|
desc 'Runs the "up" for a given migration VERSION.'
|
148
144
|
task :up => :load do
|
149
|
-
version = ENV[
|
150
|
-
|
145
|
+
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
|
146
|
+
fail 'VERSION is required' unless version
|
151
147
|
SequelRails::Migrations.migrate_up!(version)
|
152
|
-
Rake::Task[
|
148
|
+
Rake::Task['db:dump'].invoke if SequelRails.configuration.schema_dump
|
153
149
|
end
|
154
150
|
|
155
151
|
desc 'Runs the "down" for a given migration VERSION.'
|
156
152
|
task :down => :load do
|
157
|
-
version = ENV[
|
158
|
-
|
153
|
+
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
|
154
|
+
fail 'VERSION is required' unless version
|
159
155
|
SequelRails::Migrations.migrate_down!(version)
|
160
|
-
Rake::Task[
|
156
|
+
Rake::Task['db:dump'].invoke if SequelRails.configuration.schema_dump
|
161
157
|
end
|
162
158
|
end
|
163
159
|
|
164
160
|
desc 'Migrate the database to the latest version'
|
165
|
-
task :migrate =>
|
166
|
-
SequelRails::Migrations.migrate_up!(ENV[
|
167
|
-
Rake::Task[
|
161
|
+
task :migrate => 'migrate:load' do
|
162
|
+
SequelRails::Migrations.migrate_up!(ENV['VERSION'] ? ENV['VERSION'].to_i : nil)
|
163
|
+
Rake::Task['db:dump'].invoke if SequelRails.configuration.schema_dump
|
168
164
|
end
|
169
165
|
|
170
166
|
desc 'Load the seed data from db/seeds.rb'
|
@@ -174,10 +170,10 @@ namespace :db do
|
|
174
170
|
end
|
175
171
|
|
176
172
|
desc 'Create the database, load the schema, and initialize with the seed data'
|
177
|
-
task :setup =>
|
173
|
+
task :setup => %w(db:create db:load db:seed)
|
178
174
|
|
179
175
|
desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
|
180
|
-
task :reset =>
|
176
|
+
task :reset => %w(db:drop db:setup)
|
181
177
|
|
182
178
|
desc 'Forcibly close any open connections to the current env database (PostgreSQL specific)'
|
183
179
|
task :force_close_open_connections, [:env] => :environment do |t, args|
|
@@ -186,8 +182,8 @@ namespace :db do
|
|
186
182
|
end
|
187
183
|
|
188
184
|
namespace :test do
|
189
|
-
desc
|
190
|
-
task :prepare =>
|
185
|
+
desc '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).'
|
186
|
+
task :prepare => 'db:abort_if_pending_migrations' do
|
191
187
|
previous_env, Rails.env = Rails.env, 'test'
|
192
188
|
Rake::Task['db:drop'].execute
|
193
189
|
Rake::Task['db:create'].execute
|
@@ -200,4 +196,4 @@ namespace :db do
|
|
200
196
|
end
|
201
197
|
end
|
202
198
|
|
203
|
-
task
|
199
|
+
task 'test:prepare' => 'db:test:prepare'
|
@@ -1,14 +1,12 @@
|
|
1
1
|
module SequelRails
|
2
2
|
module Railties
|
3
|
-
|
4
3
|
class LogSubscriber < ActiveSupport::LogSubscriber
|
5
|
-
|
6
4
|
def self.runtime=(value)
|
7
|
-
Thread.current[
|
5
|
+
Thread.current['sequel_sql_runtime'] = value
|
8
6
|
end
|
9
7
|
|
10
8
|
def self.runtime
|
11
|
-
Thread.current[
|
9
|
+
Thread.current['sequel_sql_runtime'] ||= 0
|
12
10
|
end
|
13
11
|
|
14
12
|
def self.reset_runtime
|
@@ -22,14 +20,14 @@ module SequelRails
|
|
22
20
|
|
23
21
|
payload = event.payload
|
24
22
|
|
25
|
-
name = '%s (%.1fms)'
|
23
|
+
name = sprintf('%s (%.1fms)', payload[:name], event.duration)
|
26
24
|
sql = payload[:sql].squeeze(' ')
|
27
25
|
binds = nil
|
28
26
|
|
29
27
|
unless (payload[:binds] || []).empty?
|
30
|
-
binds =
|
28
|
+
binds = ' ' + payload[:binds].map do |col, v|
|
31
29
|
[col.name, v]
|
32
|
-
|
30
|
+
end.inspect
|
33
31
|
end
|
34
32
|
|
35
33
|
if odd?
|
@@ -49,8 +47,6 @@ module SequelRails
|
|
49
47
|
def logger
|
50
48
|
::SequelRails.configuration.logger
|
51
49
|
end
|
52
|
-
|
53
50
|
end
|
54
|
-
|
55
51
|
end
|
56
52
|
end
|
@@ -1,15 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'sequel/database/logging'
|
2
|
+
require 'active_support/notifications'
|
3
3
|
|
4
4
|
module Sequel
|
5
5
|
class Database
|
6
|
-
|
7
|
-
def log_yield(sql, args=nil)
|
6
|
+
def log_yield(sql, args = nil)
|
8
7
|
sql_for_log = args ? "#{sql}; #{args.inspect}" : sql
|
9
8
|
start = Time.now
|
10
9
|
begin
|
11
10
|
::ActiveSupport::Notifications.instrument(
|
12
|
-
|
11
|
+
'sql.sequel',
|
13
12
|
:sql => sql,
|
14
13
|
:name => self.class,
|
15
14
|
:binds => args
|
@@ -23,6 +22,5 @@ module Sequel
|
|
23
22
|
log_duration(Time.now - start, sql_for_log) unless e || @loggers.empty?
|
24
23
|
end
|
25
24
|
end
|
26
|
-
|
27
25
|
end
|
28
26
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'sequel'
|
2
2
|
|
3
3
|
module Sequel
|
4
4
|
module Plugins
|
@@ -25,11 +25,10 @@ module Sequel
|
|
25
25
|
module ClassMethods
|
26
26
|
def find!(args)
|
27
27
|
m = self[args]
|
28
|
-
|
28
|
+
fail ModelNotFound, "Couldn't find #{self} matching #{args}." unless m
|
29
29
|
m
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
33
32
|
end
|
34
33
|
end
|
35
34
|
end
|
@@ -1,49 +1,15 @@
|
|
1
|
-
require
|
1
|
+
require 'sequel'
|
2
2
|
|
3
3
|
# Implements Sequel-specific session store.
|
4
4
|
|
5
5
|
module SequelRails
|
6
|
-
|
7
6
|
class SessionStore < ActionDispatch::Session::AbstractStore
|
8
|
-
|
9
|
-
class Session < ::Sequel::Model
|
10
|
-
|
11
|
-
# property :id, Serial
|
12
|
-
# property :session_id, String, :required => true, :unique => true, :unique_index => true
|
13
|
-
# property :data, Object, :required => true, :default => ActiveSupport::Base64.encode64(Marshal.dump({}))
|
14
|
-
# property :updated_at, DateTime, :required => false, :index => true
|
15
|
-
|
16
|
-
class << self
|
17
|
-
|
18
|
-
def auto_migrate!
|
19
|
-
self.db.create_table :sessions do
|
20
|
-
primary_key :id
|
21
|
-
column :session_id, String,
|
22
|
-
:null => false,
|
23
|
-
:unique => true,
|
24
|
-
:index => true
|
25
|
-
|
26
|
-
column :data, :text,
|
27
|
-
:null => false
|
28
|
-
|
29
|
-
column :updated_at, DateTime,
|
30
|
-
:null => true,
|
31
|
-
:index => true
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.name
|
38
|
-
'session'
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
7
|
SESSION_RECORD_KEY = 'rack.session.record'.freeze
|
44
8
|
|
45
9
|
cattr_accessor :session_class
|
46
|
-
self.session_class
|
10
|
+
def self.session_class
|
11
|
+
@@session_class ||= Class.new(Sequel::Model(:sessions))
|
12
|
+
end
|
47
13
|
|
48
14
|
private
|
49
15
|
|
@@ -51,7 +17,7 @@ module SequelRails
|
|
51
17
|
sid ||= generate_sid
|
52
18
|
session = find_session(sid)
|
53
19
|
env[SESSION_RECORD_KEY] = session
|
54
|
-
[
|
20
|
+
[sid, session.data]
|
55
21
|
end
|
56
22
|
|
57
23
|
def set_session(env, sid, session_data)
|
@@ -71,10 +37,8 @@ module SequelRails
|
|
71
37
|
|
72
38
|
def find_session(sid)
|
73
39
|
klass = self.class.session_class
|
74
|
-
|
40
|
+
|
75
41
|
klass.where(:session_id => sid).first || klass.new(:session_id => sid)
|
76
42
|
end
|
77
|
-
|
78
43
|
end
|
79
|
-
|
80
44
|
end
|