Module: Busser::RubyGems
- Included in:
- Command::PluginInstall
- Defined in:
- lib/busser/rubygems.rb
Class Method Summary collapse
- .dep_installer ⇒ Object
- .gem_installed?(name, version) ⇒ Boolean
- .install_gem(gem, version) ⇒ Object
- .latest_gem_version(name) ⇒ Object
- .new_dep(name, version = nil) ⇒ Object
- .silence_gem_ui ⇒ Object
Class Method Details
.dep_installer ⇒ Object
72 73 74 |
# File 'lib/busser/rubygems.rb', line 72 def dep_installer Gem::DependencyInstaller.new end |
.gem_installed?(name, version) ⇒ 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_ui ⇒ Object
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 |