123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Source::Path::Installer

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, ::Bundler::RubyGemsGemInstaller, Gem::Installer
Instance Chain:
self, ::Bundler::RubyGemsGemInstaller, Gem::Installer
Inherits: Bundler::RubyGemsGemInstaller
Defined in: lib/bundler/source/path/installer.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(spec, options = {}) ⇒ Installer

[ GitHub ]

  
# File 'lib/bundler/source/path/installer.rb', line 11

def initialize(spec, options = {})
  @options            = options
  @spec               = spec
  @gem_dir            = Bundler.rubygems.path(spec.full_gem_path)
  @wrappers           = true
  @env_shebang        = true
  @format_executable  = options[:format_executable] || false
  @build_args         = options[:build_args] || Bundler.rubygems.build_args
  @gem_bin_dir        = "#{Bundler.rubygems.gem_dir}/bin"
  @disable_extensions = options[:disable_extensions]

  if Bundler.requires_sudo?
    @tmp_dir = Bundler.tmp(spec.full_name).to_s
    @bin_dir = "#{@tmp_dir}/bin"
  else
    @bin_dir = @gem_bin_dir
  end
end

Instance Attribute Details

#spec (readonly)

[ GitHub ]

  
# File 'lib/bundler/source/path/installer.rb', line 9

attr_reader :spec

Instance Method Details

#generate_bin (private)

[ GitHub ]

  
# File 'lib/bundler/source/path/installer.rb', line 47

def generate_bin
  super

  if Bundler.requires_sudo?
    SharedHelpers.filesystem_access(@gem_bin_dir) do |p|
      Bundler.mkdir_p(p)
    end
    spec.executables.each do |exe|
      Bundler.sudo "cp -R #{@bin_dir}/#{exe} #{@gem_bin_dir}"
    end
  end
end

#post_install

[ GitHub ]

  
# File 'lib/bundler/source/path/installer.rb', line 30

def post_install
  run_hooks(:pre_install)

  unless @disable_extensions
    build_extensions
    run_hooks(:post_build)
  end

  generate_bin unless spec.executables.empty?

  run_hooks(:post_install)
ensure
  Bundler.rm_rf(@tmp_dir) if Bundler.requires_sudo?
end

#run_hooks(type) (private)

[ GitHub ]

  
# File 'lib/bundler/source/path/installer.rb', line 60

def run_hooks(type)
  hooks_meth = "#{type}_hooks"
  return unless Gem.respond_to?(hooks_meth)
  Gem.send(hooks_meth).each do |hook|
    result = hook.call(self)
    next unless result == false
    location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
    message = "#{type} hook#{location} failed for #{spec.full_name}"
    raise InstallHookError, message
  end
end