Rake tasks from a Rubygem
While recently working on IronHide, specifically the CouchDB Adapter, I needed a way to have the gem expose custom Rake tasks to an end user’s application.
For example, to make working with the IronHide CouchDB Adapter easier, I wanted to allow users to upload existing rules from disk to a remote CouchDB database.
The task could be something as simple as:
$ bundle exec rake iron_hide:load_rules\['/absolute/path/file.json','http://127.0.0.1:5984/rules'\]
where the two arguments are the path to the JSON file and the remote CouchDB database.
After thinking for a moment, I knew that I’ve come across at least one gem that when included, exposes Rake tasks that I can use in my project, Bundler. So, I started looking through the source and found this: https://github.com/bundler/bundler/blob/master/lib/bundler/gem_helper.rb
Essentially, you’d like an application owner to be able to “install” a few Rake tasks at their convenience. Borrowing from the
# iron_hide/couchdb_tasks.rb module IronHide class CouchDbTasks include Rake::DSL if defined? Rake::DSL def install_tasks namespace :iron_hide do desc 'Load rules from local JSON file to remote CouchDB server' task :load_rules, :file, :db_server do |t, args| ... end end end end end IronHide::CouchDbTasks.new.install_tasks
Now, in my application’s
Rakefile I just need to add this line:
# Rakefile require 'iron_hide/couchdb_tasks'
$ bundle exec rake -T #=> rake iron_hide:load_rules[file,db_server] # Load rules from local JSON