sequel-rails 0.1.8 → 0.4.0.pre

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.
Files changed (74) hide show
  1. data/.gitignore +1 -0
  2. data/.rspec +3 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +13 -16
  5. data/History.md +142 -0
  6. data/README.md +124 -0
  7. data/Rakefile +6 -30
  8. data/config.ru +7 -0
  9. data/lib/generators/sequel.rb +11 -8
  10. data/lib/generators/sequel/migration/migration_generator.rb +36 -11
  11. data/lib/generators/sequel/migration/templates/migration.rb.erb +48 -0
  12. data/lib/generators/sequel/model/model_generator.rb +8 -2
  13. data/lib/generators/sequel/model/templates/migration.rb.erb +16 -0
  14. data/lib/generators/sequel/model/templates/{model.rb → model.rb.erb} +4 -1
  15. data/lib/generators/sequel/observer/observer_generator.rb +2 -2
  16. data/lib/generators/sequel/observer/templates/{observer.rb → observer.rb.erb} +0 -0
  17. data/lib/sequel-rails.rb +1 -1
  18. data/lib/sequel_rails.rb +2 -0
  19. data/lib/sequel_rails/configuration.rb +64 -0
  20. data/lib/sequel_rails/migrations.rb +22 -0
  21. data/lib/sequel_rails/railtie.rb +94 -0
  22. data/lib/sequel_rails/railties/controller_runtime.rb +40 -0
  23. data/lib/sequel_rails/railties/database.rake +175 -0
  24. data/lib/sequel_rails/railties/i18n_support.rb +10 -0
  25. data/lib/sequel_rails/railties/log_subscriber.rb +56 -0
  26. data/lib/sequel_rails/sequel/database/active_support_notification.rb +28 -0
  27. data/lib/sequel_rails/sequel/plugins/rails_extensions.rb +35 -0
  28. data/lib/sequel_rails/session_store.rb +80 -0
  29. data/lib/sequel_rails/storage.rb +58 -0
  30. data/lib/sequel_rails/storage/abstract.rb +52 -0
  31. data/lib/sequel_rails/storage/jdbc.rb +45 -0
  32. data/lib/sequel_rails/storage/mysql.rb +31 -0
  33. data/lib/sequel_rails/storage/mysql2.rb +6 -0
  34. data/lib/sequel_rails/storage/postgres.rb +22 -0
  35. data/lib/sequel_rails/storage/sqlite.rb +26 -0
  36. data/lib/sequel_rails/version.rb +3 -0
  37. data/sequel-rails.gemspec +22 -86
  38. data/spec/internal/app/models/user.rb +2 -0
  39. data/spec/internal/config/database.yml +7 -0
  40. data/spec/internal/config/routes.rb +3 -0
  41. data/spec/internal/db/schema.rb +8 -0
  42. data/spec/internal/public/favicon.ico +0 -0
  43. data/spec/lib/generators/sequel/migration_spec.rb +256 -0
  44. data/spec/lib/sequel_rails/railtie_spec.rb +85 -0
  45. data/spec/lib/sequel_rails/railties/log_subscriber_spec.rb +29 -0
  46. data/spec/lib/sequel_rails/storage_spec.rb +108 -0
  47. data/spec/spec_helper.rb +30 -16
  48. data/tasks/spec.rake +63 -29
  49. metadata +194 -142
  50. data/CHANGELOG +0 -15
  51. data/README.rdoc +0 -86
  52. data/VERSION +0 -1
  53. data/autotest/discover.rb +0 -1
  54. data/lib/generators/sequel/migration/templates/migration.rb +0 -16
  55. data/lib/sequel-rails/configuration.rb +0 -61
  56. data/lib/sequel-rails/migrations.rb +0 -30
  57. data/lib/sequel-rails/railtie.rb +0 -90
  58. data/lib/sequel-rails/railties/benchmarking_mixin.rb +0 -23
  59. data/lib/sequel-rails/railties/controller_runtime.rb +0 -43
  60. data/lib/sequel-rails/railties/database.rake +0 -148
  61. data/lib/sequel-rails/railties/i18n_support.rb +0 -12
  62. data/lib/sequel-rails/railties/log_subscriber.rb +0 -31
  63. data/lib/sequel-rails/runtime.rb +0 -14
  64. data/lib/sequel-rails/session_store.rb +0 -82
  65. data/lib/sequel-rails/setup.rb +0 -19
  66. data/lib/sequel-rails/storage.rb +0 -210
  67. data/spec/rcov.opts +0 -6
  68. data/spec/setup_spec.rb +0 -7
  69. data/spec/spec.opts +0 -4
  70. data/tasks/ci.rake +0 -1
  71. data/tasks/clean.rake +0 -6
  72. data/tasks/metrics.rake +0 -37
  73. data/tasks/yard.rake +0 -9
  74. data/tasks/yardstick.rake +0 -20
@@ -0,0 +1,48 @@
1
+ Sequel.migration do
2
+ <%- if use_change -%>
3
+ change do
4
+ <%= table_action %>_table :<%= table_name %> do
5
+ <%- if table_action == 'create' -%>
6
+ primary_key :id
7
+ <%- end -%>
8
+ <%- attributes.each do |attribute| -%>
9
+ <%- if table_action == 'create' -%>
10
+ <%= attribute.type_class %> :<%= attribute.name %>
11
+ <%- else -%>
12
+ <%= column_action %>_column :<%= attribute.name %><% if column_action == 'add' %>, <%= attribute.type_class %><% end %>
13
+ <%- end -%>
14
+ <%- end -%>
15
+ end
16
+ end
17
+ <%- else -%>
18
+ up do
19
+ <%- if table_action == 'drop' -%>
20
+ drop_table :<%= table_name %>
21
+ <%- else -%>
22
+ <%= table_action %>_table :<%= table_name %> do
23
+ <%- attributes.each do |attribute| -%>
24
+ <%- if table_action == 'create' -%>
25
+ <%= attribute.type_class %> :<%= attribute.name %>
26
+ <%- else -%>
27
+ <%= column_action %>_column :<%= attribute.name %><% if column_action == 'add' %>, <%= attribute.type_class %><% end %>
28
+ <%- end -%>
29
+ <%- end -%>
30
+ end
31
+ <%- end -%>
32
+ end
33
+
34
+ down do
35
+ <%- alter_table_action = (table_action == 'drop') ? 'create' : table_action -%>
36
+ <%- alter_column_action = (column_action == 'add') ? 'drop' : 'add' -%>
37
+ <%= alter_table_action %>_table :<%= table_name %> do
38
+ <%- attributes.each do |attribute| -%>
39
+ <%- if alter_table_action == 'create' -%>
40
+ <%= attribute.type_class %> :<%= attribute.name %>
41
+ <%- else -%>
42
+ <%= alter_column_action %>_column :<%= attribute.name %><% if alter_column_action == 'add' %>, <%= attribute.type_class %><% end %>
43
+ <%- end -%>
44
+ <%- end -%>
45
+ end
46
+ end
47
+ <%- end -%>
48
+ end
@@ -1,4 +1,4 @@
1
- require 'generators/sequel'
1
+ require "generators/sequel"
2
2
 
3
3
  module Sequel
4
4
  module Generators
@@ -8,11 +8,17 @@ module Sequel
8
8
 
9
9
  check_class_collision
10
10
 
11
+ class_option :migration, :type => :boolean
11
12
  class_option :timestamps, :type => :boolean
12
13
  class_option :parent, :type => :string, :desc => "The parent class for the generated model"
13
14
 
15
+ def create_migration_file
16
+ return unless options[:migration]
17
+ migration_template "migration.rb.erb", "db/migrate/create_#{table_name}.rb"
18
+ end
19
+
14
20
  def create_model_file
15
- template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
21
+ template 'model.rb.erb', File.join('app/models', class_path, "#{file_name}.rb")
16
22
  end
17
23
 
18
24
  hook_for :test_framework
@@ -0,0 +1,16 @@
1
+ Sequel.migration do
2
+ change do
3
+
4
+ create_table :<%= table_name %> do
5
+ primary_key :id
6
+ <%- if options[:timestamps] -%>
7
+ DateTime :created_at
8
+ DateTime :updated_at
9
+ <%- end -%>
10
+ <%- attributes.each do |attribute| -%>
11
+ <%= attribute.type_class %> :<%= attribute.name %>
12
+ <%- end -%>
13
+ end
14
+
15
+ end
16
+ end
@@ -1,3 +1,6 @@
1
1
  class <%= class_name %><%= options[:parent] ? " < #{options[:parent].classify}" : " < Sequel::Model" %>
2
-
2
+ <%- if options[:timestamps] -%>
3
+ plugin :timestamps
4
+ <%- end -%>
5
+
3
6
  end
@@ -1,4 +1,4 @@
1
- require 'generators/sequel'
1
+ require "generators/sequel"
2
2
 
3
3
  module Sequel
4
4
  module Generators
@@ -8,7 +8,7 @@ module Sequel
8
8
  check_class_collision :suffix => "Observer"
9
9
 
10
10
  def create_observer_file
11
- template 'observer.rb', File.join('app/models', class_path, "#{file_name}_observer.rb")
11
+ template 'observer.rb.erb', File.join('app/models', class_path, "#{file_name}_observer.rb")
12
12
  end
13
13
 
14
14
  hook_for :test_framework
data/lib/sequel-rails.rb CHANGED
@@ -1 +1 @@
1
- require 'sequel-rails/railtie'
1
+ require "sequel_rails"
@@ -0,0 +1,2 @@
1
+ require "sequel_rails/version"
2
+ require "sequel_rails/railtie" if defined? Rails
@@ -0,0 +1,64 @@
1
+ require 'active_support/core_ext/class/attribute_accessors'
2
+
3
+ module SequelRails
4
+
5
+ mattr_accessor :configuration
6
+
7
+ def self.setup(environment)
8
+ ::Sequel.connect configuration.environment_for environment.to_s
9
+ end
10
+
11
+ class Configuration
12
+
13
+ def self.for(root, database_yml_hash)
14
+ ::SequelRails.configuration ||= new(root, database_yml_hash)
15
+ end
16
+
17
+ attr_reader :root, :raw
18
+ attr_accessor :logger
19
+ attr_accessor :migration_dir
20
+
21
+ def environment_for(name)
22
+ environments[name.to_s] || environments[name.to_sym]
23
+ end
24
+
25
+ def environments
26
+ @environments ||= @raw.inject({}) do |normalized, environment|
27
+ name, config = environment.first, environment.last
28
+ normalized[name] = normalize_repository_config(config)
29
+ normalized
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def initialize(root, database_yml_hash)
36
+ @root, @raw = root, database_yml_hash
37
+ end
38
+
39
+ def normalize_repository_config(hash)
40
+ config = {}
41
+ hash.each do |key, value|
42
+ config[key.to_s] =
43
+ if key.to_s == 'port'
44
+ value.to_i
45
+ elsif key.to_s == 'adapter' && value == 'sqlite3'
46
+ 'sqlite'
47
+ elsif key.to_s == 'database' && (hash['adapter'] == 'sqlite3' ||
48
+ hash['adapter'] == 'sqlite' ||
49
+ hash[:adapter] == 'sqlite3' ||
50
+ hash[:adapter] == 'sqlite')
51
+ value == ':memory:' ? value : File.expand_path((hash['database'] || hash[:database]), root)
52
+ elsif key.to_s == 'adapter' && value == 'postgresql'
53
+ 'postgres'
54
+ else
55
+ value
56
+ end
57
+ end
58
+
59
+ config
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,22 @@
1
+ require 'sequel/extensions/migration'
2
+
3
+ module SequelRails
4
+ class Migrations
5
+ def self.migrate_up!(version=nil)
6
+ opts = {}
7
+ opts[:target] = version.to_i if version
8
+ ::Sequel::Migrator.run(::Sequel::Model.db, "db/migrate", opts)
9
+ end
10
+
11
+ def self.migrate_down!(version=nil)
12
+ opts = {}
13
+ opts[:target] = version.to_i if version
14
+ ::Sequel::Migrator.run(::Sequel::Model.db, "db/migrate", opts)
15
+ end
16
+
17
+ def self.pending_migrations?
18
+ return false unless File.exists?("db/migrate")
19
+ !::Sequel::Migrator.is_current?(::Sequel::Model.db, "db/migrate")
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,94 @@
1
+ require "sequel"
2
+
3
+ require "rails"
4
+ require "active_model/railtie"
5
+
6
+ # Comment taken from active_record/railtie.rb
7
+ #
8
+ # For now, action_controller must always be present with
9
+ # rails, so let's make sure that it gets required before
10
+ # here. This is needed for correctly setting up the middleware.
11
+ # In the future, this might become an optional require.
12
+ require "action_controller/railtie"
13
+
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/plugins/rails_extensions"
20
+ require "sequel_rails/sequel/database/active_support_notification"
21
+
22
+ module SequelRails
23
+
24
+ class Railtie < Rails::Railtie
25
+
26
+ ::SequelRails::Railties::LogSubscriber.attach_to :sequel
27
+
28
+ config.app_generators.orm :sequel, :migration => true
29
+ config.rails_fancy_pants_logging = true
30
+
31
+ config.action_dispatch.rescue_responses.merge!(
32
+ "Sequel::Plugins::RailsExtensions::ModelNotFound" => :not_found,
33
+ "Sequel::ValidationFailed" => :unprocessable_entity,
34
+ "Sequel::NoExistingObject" => :unprocessable_entity
35
+ )
36
+
37
+ rake_tasks do
38
+ load "sequel_rails/railties/database.rake"
39
+ end
40
+
41
+ initializer 'sequel.configuration' do |app|
42
+ configure_sequel app
43
+ end
44
+
45
+ initializer 'sequel.logger' do |app|
46
+ setup_logger app, ::Rails.logger
47
+ end
48
+
49
+ initializer 'sequel.i18n_support' do |app|
50
+ setup_i18n_support app
51
+ end
52
+
53
+ # Expose database runtime to controller for logging.
54
+ initializer 'sequel.log_runtime' do |app|
55
+ setup_controller_runtime app
56
+ end
57
+
58
+ initializer 'sequel.connect' do |app|
59
+ ::SequelRails.setup ::Rails.env
60
+ end
61
+
62
+ # Run setup code after_initialize to make sure all config/initializers
63
+ # are in effect once we setup the connection. This is especially necessary
64
+ # for the cascaded adapter wrappers that need to be declared before setup.
65
+ config.after_initialize do |app|
66
+ ::Sequel::Model.plugin :active_model
67
+ ::Sequel::Model.plugin :validation_helpers
68
+ ::Sequel::Model.plugin :rails_extensions
69
+ ::Sequel::Model.raise_on_save_failure = false
70
+ end
71
+
72
+ # Support overwriting crucial steps in subclasses
73
+ def configure_sequel(app)
74
+ app.config.sequel = ::SequelRails::Configuration.for(
75
+ ::Rails.root, app.config.database_configuration
76
+ )
77
+ end
78
+
79
+ def setup_i18n_support(app)
80
+ ::Sequel::Model.send :include, ::SequelRails::I18nSupport
81
+ end
82
+
83
+ def setup_controller_runtime(app)
84
+ require 'sequel_rails/railties/controller_runtime'
85
+ ActionController::Base.send :include, SequelRails::Railties::ControllerRuntime
86
+ end
87
+
88
+ def setup_logger(app, logger)
89
+ app.config.sequel.logger = logger
90
+ end
91
+
92
+ end
93
+
94
+ end
@@ -0,0 +1,40 @@
1
+ require "active_support/core_ext/module/attr_internal"
2
+
3
+ module SequelRails
4
+ module Railties
5
+
6
+ module ControllerRuntime
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ protected
11
+
12
+ attr_internal :db_runtime
13
+
14
+ def cleanup_view_runtime
15
+ db_rt_before_render = ::SequelRails::Railties::LogSubscriber.reset_runtime
16
+ runtime = super
17
+ db_rt_after_render = ::SequelRails::Railties::LogSubscriber.reset_runtime
18
+ self.db_runtime = db_rt_before_render + db_rt_after_render
19
+ runtime - db_rt_after_render
20
+ end
21
+
22
+ def append_info_to_payload(payload)
23
+ super
24
+ payload[:db_runtime] = db_runtime
25
+ end
26
+
27
+ module ClassMethods
28
+
29
+ def log_process_action(payload)
30
+ messages, db_runtime = super, payload[:db_runtime]
31
+ messages << ("Models: %.1fms" % db_runtime.to_f) if db_runtime
32
+ messages
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,175 @@
1
+ require 'sequel_rails/storage'
2
+
3
+ # TODO: DRY these up
4
+ namespace :db do
5
+ def db_for_current_env
6
+ @db_for_current_env ||= {}
7
+ @db_for_current_env[Rails.env] ||= begin
8
+ config = ::SequelRails.configuration.environment_for(Rails.env)
9
+ ::Sequel.connect(config)
10
+ end
11
+ end
12
+
13
+ # desc "Raises an error if there are pending migrations"
14
+ task :abort_if_pending_migrations => [:environment, "db:migrate:load"] do
15
+ if SequelRails::Migrations.pending_migrations?
16
+ puts "You have pending migrations:"
17
+ abort %{Run `rake db:migrate` to update your database then try again.}
18
+ end
19
+ end
20
+
21
+ namespace :schema do
22
+ desc "Create a db/schema.rb file that can be portably used against any DB supported by Sequel"
23
+ task :dump => :environment do
24
+ ::Sequel.extension :schema_dumper
25
+ File.open(ENV['SCHEMA'] || "#{Rails.root}/db/schema.rb", "w") do |file|
26
+ file.write db_for_current_env.dump_schema_migration(same_db: true)
27
+ end
28
+ Rake::Task["db:schema:dump"].reenable
29
+ end
30
+
31
+ desc "Load a schema.rb file into the database"
32
+ task :load => :environment do
33
+ file = ENV['SCHEMA'] || "#{Rails.root}/db/schema.rb"
34
+ if File.exists?(file)
35
+ require 'sequel/extensions/migration'
36
+ load(file)
37
+ SequelRails::Migration.descendants.first.apply(db_for_current_env, :up)
38
+ else
39
+ abort %{#{file} doesn't exist yet. Run "rake db:migrate" to create it then try again. If you do not intend to use a database, you should instead alter #{Rails.root}/config/boot.rb to limit the frameworks that will be loaded}
40
+ end
41
+ end
42
+ end
43
+
44
+ namespace :create do
45
+ desc 'Create all the local databases defined in config/database.yml'
46
+ task :all => :environment do
47
+ SequelRails::Storage.create_all
48
+ end
49
+ end
50
+
51
+ desc "Create the database defined in config/database.yml for the current Rails.env"
52
+ task :create, [:env] => :environment do |t, args|
53
+ args.with_defaults(:env => Rails.env)
54
+
55
+ SequelRails::Storage.adapter_for(args.env).create
56
+ end
57
+
58
+ namespace :drop do
59
+ desc 'Drops all the local databases defined in config/database.yml'
60
+ task :all => :environment do
61
+ SequelRails::Storage.drop_all
62
+ end
63
+ end
64
+
65
+ desc "Create the database defined in config/database.yml for the current Rails.env"
66
+ task :drop, [:env] => :environment do |t, args|
67
+ args.with_defaults(:env => Rails.env)
68
+
69
+ Rails::Sequel::Storage.adapter_for(args.env).drop
70
+ end
71
+
72
+ namespace :migrate do
73
+ task :load => :environment do
74
+ require 'sequel_rails/migrations'
75
+ end
76
+
77
+ 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.'
78
+ task :redo => :load do
79
+ if ENV["VERSION"]
80
+ Rake::Task["db:migrate:down"].invoke
81
+ Rake::Task["db:migrate:up"].invoke
82
+ else
83
+ Rake::Task["db:rollback"].invoke
84
+ Rake::Task["db:migrate"].invoke
85
+ end
86
+ end
87
+
88
+
89
+ desc 'Resets your database using your migrations for the current environment'
90
+ task :reset => ["db:drop", "db:create", "db:migrate"]
91
+
92
+ desc 'Runs the "up" for a given migration VERSION.'
93
+ task :up => :load do
94
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
95
+ raise "VERSION is required" unless version
96
+ SequelRails::Migrations.migrate_up!(version)
97
+ Rake::Task["db:schema:dump"].invoke unless Rails.env.test?
98
+ end
99
+
100
+ desc 'Runs the "down" for a given migration VERSION.'
101
+ task :down => :load do
102
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
103
+ raise "VERSION is required" unless version
104
+ SequelRails::Migrations.migrate_down!(version)
105
+ Rake::Task["db:schema:dump"].invoke unless Rails.env.test?
106
+ end
107
+ end
108
+
109
+ desc 'Migrate the database to the latest version'
110
+ task :migrate => "migrate:load" do
111
+ SequelRails::Migrations.migrate_up!(ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
112
+ Rake::Task["db:schema:dump"].invoke unless Rails.env.test?
113
+ end
114
+
115
+ desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n'
116
+ task :rollback => "migrate:load" do
117
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
118
+ Sequel::Migrator.rollback('db/migrate/', step)
119
+ Rake::Task["db:schema:dump"].invoke unless Rails.env.test?
120
+ end
121
+
122
+ desc 'Pushes the schema to the next version. Specify the number of steps with STEP=n'
123
+ task :forward => "migrate:load" do
124
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
125
+ Sequel::Migrator.forward('db/migrate/', step)
126
+ Rake::Task["db:schema:dump"].invoke unless Rails.env.test?
127
+ end
128
+
129
+ desc 'Load the seed data from db/seeds.rb'
130
+ task :seed => :abort_if_pending_migrations do
131
+ seed_file = File.join(Rails.root, 'db', 'seeds.rb')
132
+ load(seed_file) if File.exist?(seed_file)
133
+ end
134
+
135
+ desc 'Create the database, load the schema, and initialize with the seed data'
136
+ task :setup => [ 'db:create', 'db:schema:load', 'db:seed' ]
137
+
138
+ desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
139
+ task :reset => [ 'db:drop', 'db:setup' ]
140
+
141
+ desc 'Forcibly close any open connections to the current env database (PostgreSQL specific)'
142
+ task :force_close_open_connections => :environment do
143
+ if db_for_current_env.database_type==:postgres
144
+ begin
145
+ # Will only work on Postgres > 8.4
146
+ pid_column = db_for_current_env.server_version < 90200 ? "procpid" : "pid"
147
+ db_for_current_env.execute <<-SQL.gsub(/^\s{9}/,'')
148
+ SELECT COUNT(pg_terminate_backend(#{pid_column}))
149
+ FROM pg_stat_activity
150
+ WHERE datname = '#{db_for_current_env.opts[:database]}';
151
+ SQL
152
+ rescue => e
153
+ #Will raise an error as it kills existing process running this command
154
+ #Seems to be only way to ensure *all* test connections are closed
155
+ end
156
+ end
157
+ end
158
+
159
+ namespace :test do
160
+ 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)."
161
+ task :prepare => "db:abort_if_pending_migrations" do
162
+ previous_env, Rails.env = Rails.env, 'test'
163
+ Rake::Task['db:force_close_open_connections'].execute
164
+ Rake::Task['db:drop'].execute
165
+ Rake::Task['db:create'].execute
166
+ Rake::Task['db:schema:load'].execute
167
+ Sequel::DATABASES.each do |db|
168
+ db.disconnect
169
+ end
170
+ Rails.env = previous_env
171
+ end
172
+ end
173
+ end
174
+
175
+ task "test:prepare" => "db:test:prepare"