Module: Busser::RubyGems
- Included in:
- Command::PluginInstall
- Defined in:
- lib/busser/rubygems.rb
Overview
RubyGems API abstraction logic, used to install and verify plugins.
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
76 77 78 |
# File 'lib/busser/rubygems.rb', line 76 def dep_installer Gem::DependencyInstaller.new end |
.gem_installed?(name, version) ⇒ Boolean
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/busser/rubygems.rb', line 31 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
42 43 44 45 46 47 |
# File 'lib/busser/rubygems.rb', line 42 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
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/busser/rubygems.rb', line 49 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
80 81 82 |
# File 'lib/busser/rubygems.rb', line 80 def new_dep(name, version = nil) Gem::Dependency.new(name, version) end |
.silence_gem_ui ⇒ Object
68 69 70 71 72 73 74 |
# File 'lib/busser/rubygems.rb', line 68 def silence_gem_ui interaction = Gem::DefaultUserInteraction.ui Gem::DefaultUserInteraction.ui = Gem::SilentUI.new yield ensure Gem::DefaultUserInteraction.ui = interaction end |