rakefile
@env = ARGV[1].nil? ? 'development' : ARGV[1]
task @env do ; end unless ARGV[1].nil?
namespace :db do
desc "Run DB migrations on db/migrate directory"
task :migrate do
require 'sequel'
require_relative 'helpers/environment_helper'
require_relative 'lib/chist'
Sequel.extension :migration
env ||= ENV['RACK_ENV'] || :development
ChistApp::Helpers.init_environment(env)
db_params = {
'host' => ENV["DATABASE_HOST"],
'port' => ENV["DATABASE_PORT"],
'user' => ENV["DATABASE_USER"],
'password' => ENV["DATABASE_PASS"],
'db_name' => ENV["DATABASE_NAME"]
}
DB = ChistApp::Database.connect(db_params)
puts 'Running migrations...'
Sequel::Migrator.run(DB, "db/migrate")
puts 'Done!'
end
namespace :schema do
desc "Dump the DB schema to db/schema.rb"
task :dump do
require 'sequel'
require_relative 'helpers/environment_helper'
require_relative 'lib/chist'
env ||= ENV['RACK_ENV'] || :development
db = ChistApp::Helpers.init_environment(env)
db.extension :schema_dumper
puts "Dumping schema to db/schema.rb..."
File.open("db/schema.rb", "w") do |f|
f.puts db.dump_schema_migration
end
puts "Done!"
end
desc "Load the DB schema defined in db/schema.rb"
task :load do
require 'sequel'
require_relative 'helpers/environment_helper'
require_relative 'lib/chist'
Sequel.extension :migration
puts "Loading schema..."
env ||= ENV['RACK_ENV'] || :test
db = ChistApp::Helpers.init_environment(env)
migration = eval(File.read('./db/schema.rb'))
puts "Dropping old tables..."
db.drop_table *db.tables, cascade: true
puts "Applying new schema..."
migration.apply(db, :up)
puts "Done!"
end
end
namespace :test do
desc "Prepares test DB by copying current dev schema"
task :prepare do
require 'sequel'
require_relative 'lib/chist'
env_val = ENV['RACK_ENV']
ENV['RACK_ENV'] = 'development'
Rake::Task["db:schema:dump"].invoke
ENV['RACK_ENV'] = 'test'
Rake::Task["db:schema:load"].invoke
end
end
end
namespace :test do
@env = 'test'
desc "Test all"
task :all do
load_files "test/helpers/*.rb"
load_files "test/routes/*.rb"
load_files "test/lib/*.rb"
end
end
def load_files(dir)
Dir[dir].each { |file| load file }
end