reiki
Convoluted Rake task setups simplified
Reiki (GitHub) — a bash function you can call with the command r
— is a shortcut for running rake tasks with arguments. No brackets, just spaces and commas (and colons to separate serial tasks).
This is currently working wonderfully for me, but I’m open to pull requests and the project will develop further if my needs expand.
Why?
I get a little crazy with my Rakefiles in cases where it’s my command central, such as my Jekyll blog or my app Marked 2 where I need to perform a wide variety of tasks with various arguments and sequences. Typing out task names with arguments in Rake’s command line syntax can be tedious with square brackets, commas, quoted arguments, etc. I build Reiki for my own sanity.
I get that most people don’t abuse Rakefiles to the extent that I do. You probably don’t need this if you’ve never made a TextExpander shortcut to fill in tedious task names.
Usage
Reiki is called with r
followed by the task or fragment of a task (fuzzy matched), followed by task arguments, commas separated, and optionally more tasks, separated by colons.
If a build
task were the only task in your Rakefile starting with “b”:
r b
=> rake build
Reiki uses fuzzy matching to figure out which task you want to run.
- If the first argument to
r
fully matches a rake task and there are no other potential matches, it runs it with any following arguments as arguments for that task (e.g.r build true
becomesrake build[true]
). - If there is more than one possible match, it checks to see if the second argument makes sense as
$1_$2
. If that’s the case, it runs that with additional arguments. - If only the first letter(s) of a
$1_$2
task are provided, it guesses and checks before running (e.g.r f d jekyll blogging
becomesrake find_draft["jekyll blogging"]
). - Additional arguments are assumed to be a quoted string unless there are commas, in which case it combines them and automatically quotes only resulting arguments with spaces in them (e.g.
r gd true, publishing jekyll blogging post
runsrake gen_deploy[true,"publishing jekyll blogging post"]
on my blog, and thegen_deploy
task takes an argument and a git commit message).
For example, in my Jekyll setup:
r fdr jekyll
=> rake find_draft[jekyll]
r fdf reiki bash
=> rake find_draft_fulltext["reiki bash"]
r gen true, commit message
=> rake generate[true,"commit message"]
You can separate multiple (serial) tasks with a colon (:). Arguments after a task and before a colon are treated as arguments to each task. Multiple tasks are run by rake as a series.
$ r bld xcode true: launch debug
=> rake build[xcode,true] launch[debug]
Reiki can automatically run the first match, or it can be set to verify with a question on the command line if there are multiple matches (or forced to always verify with the “quiet” option). A timeout can be set on the verification to automatically run if no response is provided.
If your Terminal supports color, output will be highlighted. If not, you’ll get clean output with no escape sequences.
Installation
Save the reiki.plugin.bash
to disk and source it in your .bash_profile
.
source ~/plugins/reiki.plugin.bash
When loaded, it will define the r
command. Helpers are defined with __r_
prefixes as a namespace.
If you use Bash-it, you can just drop it in your ~/.bash_it/plugins/enabled
folder.
Configuration
You can configure defaults in the script (but see the next section to override them without modifying the original):
verify_task=1
- to force a verification after guessing
auto_timeout=X
- to change number of seconds to wait for verification, 0 to disable
quiet=1
- to force silent mode, using first option if multiple matches are found
debug=1
- for verbose reporting
Environment variables
Defaults can be overriden by environment variables in your login profile/rc:
export R_VERIFY_TASK=true
export R_AUTO_TIMEOUT=5
export R_DEBUG=true
export R_QUIET=true
Options
You can override the default configuration using switches as needed. Use r -T
to list options.
$ r -H
r: A shortcut for running rake tasks with fuzzy matching
Parameters are task fragments and arguments, multiple arguments comma-separated
Example:
$ r gen dep commit message
=> rake generate_deploy[commit message]
Options:
-h show options
-H show help
-T List available tasks
-v Interactively verify task matches before running
-a SECONDS Prompts run default result after SECONDS
-q Run quietly (use first match in case of multiples)
-d Output debug info
Bash completion
There’s an experimental completion function available for Bash in the reiki.completion.bash file. It mostly works for me, but has some issues and isn’t terribly necessary with something that takes shortcuts and fuzzy matches anyway…
Download
Reiki is available for download on GitHub.
Speaking of reiki…