Parent directory

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