Module: Busser::RubyGems

Included in:
Command::PluginInstall
Defined in:
lib/busser/rubygems.rb

Class Method Summary collapse

Class Method Details

.dep_installerObject



72
73
74
# File 'lib/busser/rubygems.rb', line 72

def dep_installer
  Gem::DependencyInstaller.new
end

.gem_installed?(name, version) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
30
31
32
33
34
35
36
# File 'lib/busser/rubygems.rb', line 27

def gem_installed?(name, version)
  installed = Array(Gem::Specification.find_all_by_name(name, version))
  version = latest_gem_version(name) if version.nil?

  if version.nil?
    ! installed.empty?
  else
    installed.find { |spec| spec.version.to_s == version }
  end
end

.install_gem(gem, version) ⇒ Object



38
39
40
41
42
43
# File 'lib/busser/rubygems.rb', line 38

def install_gem(gem, version)
  install_arg = gem =~ /\.gem$/ ? gem : new_dep(gem, version)
  spec = dep_installer.install(install_arg).find { |s| s.name == gem }
  Gem.clear_paths
  spec
end

.latest_gem_version(name) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/busser/rubygems.rb', line 45

def latest_gem_version(name)
  available_gems = dep_installer.find_gems_with_sources(new_dep(name))

  spec, source = if available_gems.respond_to?(:last)
    # DependencyInstaller sorts the results such that the last one is
    # always the one it considers best.
    spec_with_source = available_gems.last
    spec_with_source && spec_with_source
  else
    # Rubygems 2.0 returns a Gem::Available set, which is a
    # collection of AvailableSet::Tuple structs
    available_gems.pick_best!
    best_gem = available_gems.set.first
    best_gem && [best_gem.spec, best_gem.source]
  end

  spec && spec.version && spec.version.to_s
end

.new_dep(name, version = nil) ⇒ Object



76
77
78
# File 'lib/busser/rubygems.rb', line 76

def new_dep(name, version = nil)
  Gem::Dependency.new(name, version)
end

.silence_gem_uiObject



64
65
66
67
68
69
70
# File 'lib/busser/rubygems.rb', line 64

def silence_gem_ui
  interaction = Gem::DefaultUserInteraction.ui
  Gem::DefaultUserInteraction.ui = Gem::SilentUI.new
  yield
ensure
  Gem::DefaultUserInteraction.ui = interaction
end