def install(force=false, install_dir=Gem.dir, ignore_this_parameter=false)
security_policy = @options[:security_policy]
security_policy = nil if force && security_policy && security_policy.only_signed != true
begin
format = Gem::Format.from_file_by_path @gem, security_policy
rescue Gem::Package::FormatError
raise Gem::InstallError, "invalid gem format for #{@gem}"
end
unless force
spec = format.spec
if (rrv = spec.required_ruby_version)
unless rrv.satisfied_by?(Gem::Version.new(RUBY_VERSION))
raise Gem::InstallError, "#{spec.name} requires Ruby version #{rrv}"
end
end
unless @options[:ignore_dependencies]
spec.dependencies.each do |dep_gem|
ensure_dependency!(spec, dep_gem)
end
end
end
raise Gem::FilePermissionError.new(install_dir) unless File.writable?(install_dir)
@directory = File.join(install_dir, "gems", format.spec.full_name).untaint
FileUtils.mkdir_p @directory
extract_files(@directory, format)
generate_bin(format.spec, install_dir)
build_extensions(@directory, format.spec)
build_support_directories(install_dir)
write_spec(format.spec, File.join(install_dir, "specifications"))
unless File.exist? File.join(install_dir, "cache", @gem.split(/\//).pop)
FileUtils.cp @gem, File.join(install_dir, "cache")
end
puts format.spec.post_install_message unless format.spec.post_install_message.nil?
format.spec.loaded_from = File.join(install_dir, 'specifications', format.spec.full_name+".gemspec")
return format.spec
rescue Zlib::GzipFile::Error
raise InstallError, "gzip error installing #{@gem}"
end