Determines the candidate version for a gem from a .gem file on disk and checks if it matches the version contraints in gem_dependency
Gem::Version a singular gem version object is returned if the gem
is available
nil returns nil if the gem on disk doesn't match the
version constraints for +gem_dependency+
# File lib/chef/provider/package/rubygems.rb, line 116 def candidate_version_from_file(gem_dependency, source) spec = Gem::Format.from_file_by_path(source).spec if spec.satisfies_requirement?(gem_dependency) logger.debug {"#{@new_resource} found candidate gem version #{spec.version} from local gem package #{source}"} spec.version else # This is probably going to end badly... logger.warn { "#{@new_resource} gem package #{source} does not satisfy the requirements #{gem_dependency.to_s}" } nil end end
Finds the newest version that satisfies the constraints of gem_dependency. The version is determined from the cache or a round-trip to the server as needed. The architecture and gem sources will be set before making the query.
Gem::Version a singular gem version object is returned if the gem
is available
nil returns nil if the gem could not be found
# File lib/chef/provider/package/rubygems.rb, line 137 def candidate_version_from_remote(gem_dependency, *sources) raise NotImplementedError end
# File lib/chef/provider/package/rubygems.rb, line 195 def dependency_installer(opts={}) Gem::DependencyInstaller.new(opts) end
Find the newest gem version available from Gem.sources that satisfies the constraints of gem_dependency
# File lib/chef/provider/package/rubygems.rb, line 144 def find_newest_remote_version(gem_dependency, *sources) # DependencyInstaller sorts the results such that the last one is # always the one it considers best. spec_with_source = dependency_installer.find_gems_with_sources(gem_dependency).last spec = spec_with_source && spec_with_source[0] version = spec && spec_with_source[0].version if version logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{spec_with_source[1]}" } version else source_list = sources.compact.empty? ? "[#{Gem.sources.join(', ')}]" : "[#{sources.join(', ')}]" logger.warn { "#{@new_resource} failed to find gem #{gem_dependency} from #{source_list}" } nil end end
The paths where rubygems should search for installed gems. Implemented by subclasses.
# File lib/chef/provider/package/rubygems.rb, line 54 def gem_paths raise NotImplementedError end
A rubygems source index containing the list of gemspecs for all available gems in the gem installation. Implemented by subclasses
Gem::SourceIndex
# File lib/chef/provider/package/rubygems.rb, line 64 def gem_source_index raise NotImplementedError end
A rubygems specification object containing the list of gemspecs for all available gems in the gem installation. Implemented by subclasses For rubygems >= 1.8.0
Gem::Specification
# File lib/chef/provider/package/rubygems.rb, line 75 def gem_specification raise NotImplementedError end
Installs a gem via the rubygems ruby API.
:sources rubygems servers to use Other options are passed to Gem::DependencyInstaller.new
# File lib/chef/provider/package/rubygems.rb, line 166 def install(gem_dependency, options={}) with_gem_sources(*options.delete(:sources)) do with_correct_verbosity do dependency_installer(options).install(gem_dependency) end end end
Lists the installed versions of gem_name, constrained by the version spec in gem_dep
Gem::Dependency gem_dep is a Gem::Dependency object, its version
specification constrains which gems are returned.
an array of Gem::Specification objects
# File lib/chef/provider/package/rubygems.rb, line 87 def installed_versions(gem_dep) if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0') gem_specification.find_all_by_name(gem_dep.name, gem_dep.requirement) else gem_source_index.search(gem_dep) end end
Uninstall the gem gem_name via the rubygems ruby API. If gem_version is provided, only that version will be uninstalled. Otherwise, all versions are uninstalled.
Options are passed to Gem::Uninstaller.new
# File lib/chef/provider/package/rubygems.rb, line 180 def uninstall(gem_name, gem_version=nil, opts={}) gem_version ? opts[:version] = gem_version : opts[:all] = true with_correct_verbosity do uninstaller(gem_name, opts).uninstall end end
# File lib/chef/provider/package/rubygems.rb, line 199 def uninstaller(gem_name, opts={}) Gem::Uninstaller.new(gem_name, DEFAULT_UNINSTALLER_OPTS.merge(opts)) end
Set rubygems' user interaction to ConsoleUI or SilentUI depending on our current debug level
# File lib/chef/provider/package/rubygems.rb, line 190 def with_correct_verbosity Gem::DefaultUserInteraction.ui = Chef::Log.debug? ? Gem::ConsoleUI.new : Gem::SilentUI.new yield end
Yields to the provided block with rubygems' source list set to the list provided. Always resets the list when the block returns or raises an exception.
# File lib/chef/provider/package/rubygems.rb, line 99 def with_gem_sources(*sources) sources.compact! original_sources = Gem.sources Gem.sources = sources unless sources.empty? yield ensure Gem.sources = original_sources end
Generated with the Darkfish Rdoc Generator 2.