bundler.plugin.zsh
1804 bytes
1## Aliases
2
3alias ba="bundle add"
4alias bck="bundle check"
5alias bcn="bundle clean"
6alias be="bundle exec"
7alias bi="bundle install"
8alias bl="bundle list"
9alias bo="bundle open"
10alias bout="bundle outdated"
11alias bp="bundle package"
12alias bu="bundle update"
13alias bua="bundle update --all"
14
15## Gem wrapper
16
17bundled_commands=(
18 annotate
19 cap
20 capify
21 cucumber
22 foodcritic
23 guard
24 hanami
25 irb
26 jekyll
27 kitchen
28 knife
29 middleman
30 nanoc
31 pry
32 puma
33 rackup
34 rainbows
35 rake
36 rspec
37 rubocop
38 shotgun
39 sidekiq
40 spec
41 spork
42 spring
43 strainer
44 tailor
45 taps
46 thin
47 thor
48 unicorn
49 unicorn_rails
50)
51
52# Remove $UNBUNDLED_COMMANDS from the bundled_commands list
53bundled_commands=(${bundled_commands:|UNBUNDLED_COMMANDS})
54unset UNBUNDLED_COMMANDS
55
56# Add $BUNDLED_COMMANDS to the bundled_commands list
57bundled_commands+=($BUNDLED_COMMANDS)
58unset BUNDLED_COMMANDS
59
60# Check if in the root or a subdirectory of a bundled project
61_within-bundled-project() {
62 local check_dir="$PWD"
63 while [[ "$check_dir" != "/" ]]; do
64 if [[ -f "$check_dir/Gemfile" || -f "$check_dir/gems.rb" ]]; then
65 return 0
66 fi
67 check_dir="${check_dir:h}"
68 done
69 return 1
70}
71
72_run-with-bundler() {
73 if (( ! $+commands[bundle] )) || ! _within-bundled-project; then
74 "$@"
75 return $?
76 fi
77
78 if [[ -f "./bin/${1}" ]]; then
79 ./bin/${^^@}
80 else
81 bundle exec "$@"
82 fi
83}
84
85for cmd in $bundled_commands; do
86 # Create wrappers for bundled and unbundled execution
87 eval "function unbundled_$cmd () { \"$cmd\" \"\$@\"; }"
88 eval "function bundled_$cmd () { _run-with-bundler \"$cmd\" \"\$@\"; }"
89 alias "$cmd"="bundled_$cmd"
90
91 # Bind completion function to wrapped gem if available
92 if (( $+functions[_$cmd] )); then
93 compdef "_$cmd" "bundled_$cmd"="$cmd"
94 fi
95done
96unset cmd bundled_commands