diff --git a/rbenv.d/exec/gem-rehash/rubygems_plugin.rb b/rbenv.d/exec/gem-rehash/rubygems_plugin.rb index 21d5ad9a..0f718b13 100644 --- a/rbenv.d/exec/gem-rehash/rubygems_plugin.rb +++ b/rbenv.d/exec/gem-rehash/rubygems_plugin.rb @@ -6,13 +6,38 @@ hook = lambda do |installer| `rbenv rehash` end rescue - warn "rbenv: error in gem-rehash (#{$!})" + warn "rbenv: error in gem-rehash (#{$!.class.name}: #{$!.message})" end end -begin - Gem.post_install(&hook) - Gem.post_uninstall(&hook) -rescue - warn "rbenv: error installing gem-rehash hooks (#{$!})" +if defined?(Bundler::Installer) && Bundler::Installer.respond_to?(:install) + Bundler::Installer.class_eval do + class << self + alias install_without_rbenv_rehash install + def install(root, definition, options = {}) + begin + if Gem.default_path.include?(Bundler.bundle_path.to_s) + bin_dir = Gem.bindir(Bundler.bundle_path.to_s) + bins_before = File.exist?(bin_dir) ? Dir.entries(bin_dir).size : 2 + end + rescue + warn "rbenv: error in Bundler post-install hook (#{$!.class.name}: #{$!.message})" + end + + result = install_without_rbenv_rehash(root, definition, options) + + if bin_dir && File.exist?(bin_dir) && Dir.entries(bin_dir).size > bins_before + `rbenv rehash` + end + result + end + end + end +else + begin + Gem.post_install(&hook) + Gem.post_uninstall(&hook) + rescue + warn "rbenv: error installing gem-rehash hooks (#{$!.class.name}: #{$!.message})" + end end