I've written a custom database adapter that works correctly and effectively when a rails server is running. I would now like to add the usual rake task definitions for creating, dropping and migrating the database.
I would like to implement:
db:[drop|create|migrate]
How do I package these definitions with my gem so that they override the default ones for anyone who uses the gem?
I looked through the source of other adapters but all the rake task logic appears to be baked into active_record itself, each task just switches on the adapter name.
This is possible with:
# somewhere in your gem's tasks
Rake::Task['db:create'].clear
# then re-define
namespace 'db' do
task 'create' do
# ...
end
end
When Take::Task#[]
can't resolve a task it will fail
.
If your tasks sometimes exists, you might want to:
task_exists = Rake.application.tasks.any? { |t| t.name == 'db:create' }
Rake::Task['db:create'].clear if task_exists
If you want to add tasks to an existing rake task, use enhance
.
Rake::Task['db:create'].enhance do
Rake::Task['db:after_create'].invoke
end
You can write
Rake::Task['db:create'].clear
to delete the original task before redefining it. Also check out Overriding rails' default rake tasks
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With