Class: RippleNetworks::WarningShot::GemHandler
- Inherits:
-
Array
- Object
- Array
- RippleNetworks::WarningShot::GemHandler
- Defined in:
- lib/warning_shot/gem_handler.rb
Defined Under Namespace
Classes: CandidateGem
Constant Summary collapse
- DEFAULT_VERSION =
">0.0.0".freeze
- CONDITIONAL_RGX =
/[^\d]*/.freeze
- VERSION_RGX =
/[\d\.]+/.freeze
- DEFAULTS =
{ :install_all => false, :gem_path => Gem.dir }
Instance Method Summary collapse
- #add(gems) ⇒ Object
-
#initialize(gem_list, opts = {}) ⇒ GemHandler
constructor
A new instance of GemHandler.
-
#install_all! ⇒ Object
Loop over candidate gems, install each.
-
#installed?(gem_name, gem_version = DEFAULT_VERSION) ⇒ Boolean
- Name
- installed? Access
- public Description
- Determine if gem is installed Last_Edited
- Tue Feb 19 12:40:40 PST 2008 ===Parameters * Name: gem_name * Description: rubygems gem name (case sensitive) * Datatype: String * Default: None * Required: True * Name: gem_version * Description: Gem version (ex “>= 1.0.3”, “< 3.0”, “3.0.1”) * Datatype: String * Default: “> 0.0.0” * Required: false ===Returns Description
- Information queried gem Datatype
-
Hash.
- #remove(gems) ⇒ Object
- #split(gem_list) ⇒ Object
Constructor Details
#initialize(gem_list, opts = {}) ⇒ GemHandler
Returns a new instance of GemHandler.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/warning_shot/gem_handler.rb', line 20 def initialize(gem_list,opts={}) @opts = DEFAULTS.merge(opts) Gem.path.clear #Add custom paths to gem.. unless @opts[:gem_path].nil? || @opts[:gem_path].empty? @opts[:gem_path].split(";").each do |alt_path| Gem.path.push(alt_path) end end #Add candidate gems to array split(gem_list).each do |rgem,ver| self.push(CandidateGem.new(rgem,ver,:unchecked,"")) end #Check status of gems check_gems install_all! if @opts[:install_all] end |
Instance Method Details
#add(gems) ⇒ Object
58 59 60 61 |
# File 'lib/warning_shot/gem_handler.rb', line 58 def add(gems) #@gems_to_install.merge!(split(gems)) check_gems end |
#install_all! ⇒ Object
Loop over candidate gems, install each
71 72 73 74 75 |
# File 'lib/warning_shot/gem_handler.rb', line 71 def install_all! self.each do |c_gem| install(c_gem) if c_gem.status != :installed end end |
#installed?(gem_name, gem_version = DEFAULT_VERSION) ⇒ Boolean
- Name
-
installed?
- Access
-
public
- Description
-
Determine if gem is installed
- Last_Edited
-
Tue Feb 19 12:40:40 PST 2008
===Parameters
* Name: gem_name
* Description: rubygems gem name (case sensitive)
* Datatype: String
* Default: None
* Required: True
* Name: gem_version
* Description: Gem version (ex ">= 1.0.3", "< 3.0", "3.0.1")
* Datatype: String
* Default: "> 0.0.0"
* Required: false
===Returns
*Description*:: Information queried gem
*Datatype*:: Hash
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/warning_shot/gem_handler.rb', line 98 def installed?(gem_name,gem_version=DEFAULT_VERSION) gem_info = {} installed_versions = Gem::cache.search(gem_name) unless installed_versions.empty? #Gem is installed, determine version version_info = [] comparison_results = [] conditionals = gem_version.match(CONDITIONAL_RGX)[0] required_version = Gem::Version.create gem_version.match(VERSION_RGX)[0] installed_versions.each do |i_gem| comp_result = required_version <=> i_gem.version version_info.push(i_gem.version.version) comparison_results.push(comp_result) unless comparison_results.include? comp_result end gem_info[:versions] = version_info.join(",") if comparison_results.include?(0) && (conditionals =~ /=/ || conditionals.empty?) # && (conditionals =~ /<>/).nil? #Correct version installed gem_info[:installed] = true gem_info[:info] = "#{gem_name}:#{gem_version} is installed" elsif comparison_results.include?(1) && (conditionals =~ /</) #Older version installed gem_info[:installed] = true gem_info[:info] = "Older version installed" elsif comparison_results.include?(-1) && (conditionals =~ />/) #Newer version installed gem_info[:installed] = true gem_info[:info] = "Newer version installed" else gem_info[:installed] = false gem_info[:info] = "Other version installed" end else #Gem is NOT installed gem_info[:installed] = false gem_info[:info] = "No versions installed" end return gem_info end |
#remove(gems) ⇒ Object
64 65 66 67 |
# File 'lib/warning_shot/gem_handler.rb', line 64 def remove(gems) #gems.collect { |g| @gems_to_install.delete(g) } check_gems end |
#split(gem_list) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/warning_shot/gem_handler.rb', line 42 def split(gem_list) gems = {} gem_list.collect do |gem| case gem when String gem_name, gem_ver = gem.chomp.split(":") when Hash gem_name, gem_ver = gem.keys.first, gem.values.first end gems[gem_name] = gem_ver || DEFAULT_VERSION #Default to newest gem end return gems end |