module Realm::ROM::RakeTasks
Public Class Methods
setup(engine_name, engine_root: Rails.root.join('engines', engine_name.to_s), db_url: ENV['DATABASE_URL'])
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/BlockLength, Metrics/MethodLength
# File lib/realm/rom/rake_tasks.rb, line 9 def self.setup(engine_name, engine_root: Rails.root.join('engines', engine_name.to_s), db_url: ENV['DATABASE_URL']) return unless db_url options = { search_path: engine_name.to_s, migrator: { path: "#{engine_root}/db/migrate" } } config = ::ROM::Configuration.new(:sql, db_url, options) gateway = config.gateways[:default] Rake.application.in_namespace(:db) do Rake::Task.define_task(:init_schema) do gateway.run "CREATE SCHEMA IF NOT EXISTS \"#{engine_name}\"" puts "<= #{engine_name}:db:init_schema executed" end Rake::Task.define_task(:drop_schema) do gateway.run "DROP SCHEMA \"#{engine_name}\" CASCADE" puts "<= #{engine_name}:db:drop_schema executed" end Rake.application.last_description = 'Perform migration reset (full erase and migration up)' Rake::Task.define_task(:reset) do gateway.run_migrations(target: 0) gateway.run_migrations puts "<= #{engine_name}:db:reset executed" end Rake.application.last_description = 'Migrate the database (options [version_number])]' Rake::Task.define_task(:migrate, %i[version]) do |_, args| version = args[:version] if version.nil? gateway.run_migrations puts "<= #{engine_name}:db:migrate executed" else gateway.run_migrations(target: version.to_i) puts "<= #{engine_name}:db:migrate version=[#{version}] executed" end end Rake.application.last_description = 'Perform migration down (removes all tables)' Rake::Task.define_task(:clean) do gateway.run_migrations(target: 0) puts "<= #{engine_name}:db:clean executed" end Rake.application.last_description = 'Create a migration (parameters: NAME, VERSION)' Rake::Task.define_task(:create_migration, %i[name version]) do |_, args| name, version = args.values_at(:name, :version) if name.nil? puts "No NAME specified. Example usage: `rake #{engine_name}:db:create_migration[create_users]`" exit end path = gateway.migrator.create_file(*[name, version].compact) puts "<= migration file created #{path}" end end end