Class: RippleNetworks::WarningShot::GemHandler
- Inherits:
-
Object
- Object
- RippleNetworks::WarningShot::GemHandler
- Defined in:
- lib/warning_shot/gem_handler.rb
Constant Summary collapse
- DEFAULT_VERSION =
">0.0.0".freeze
- CONDITIONAL_RGX =
/[^\d]*/.freeze
- VERSION_RGX =
/[\d\.]+/.freeze
Instance Attribute Summary collapse
-
#failed_installs ⇒ Object
readonly
Returns the value of attribute failed_installs.
-
#gems_to_install ⇒ Object
readonly
Returns the value of attribute gems_to_install.
-
#installed_gems ⇒ Object
readonly
Returns the value of attribute installed_gems.
-
#missing_gems ⇒ Object
readonly
Returns the value of attribute missing_gems.
Instance Method Summary collapse
- #add(gems) ⇒ Object
-
#initialize(gem_list, do_install = false, install_dir = nil) ⇒ GemHandler
constructor
A new instance of GemHandler.
- #install! ⇒ Object
-
#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, do_install = false, install_dir = nil) ⇒ GemHandler
Returns a new instance of GemHandler.
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/warning_shot/gem_handler.rb', line 17 def initialize(gem_list,do_install=false,install_dir=nil) @install_dir ||= Gem.dir @missing_gems = {} @installed_gems = [] @gems_to_install = split(gem_list) @failed_installs = {} check_gems install! if do_install end |
Instance Attribute Details
#failed_installs ⇒ Object (readonly)
Returns the value of attribute failed_installs.
14 15 16 |
# File 'lib/warning_shot/gem_handler.rb', line 14 def failed_installs @failed_installs end |
#gems_to_install ⇒ Object (readonly)
Returns the value of attribute gems_to_install.
14 15 16 |
# File 'lib/warning_shot/gem_handler.rb', line 14 def gems_to_install @gems_to_install end |
#installed_gems ⇒ Object (readonly)
Returns the value of attribute installed_gems.
14 15 16 |
# File 'lib/warning_shot/gem_handler.rb', line 14 def installed_gems @installed_gems end |
#missing_gems ⇒ Object (readonly)
Returns the value of attribute missing_gems.
14 15 16 |
# File 'lib/warning_shot/gem_handler.rb', line 14 def missing_gems @missing_gems end |
Instance Method Details
#add(gems) ⇒ Object
43 44 45 46 |
# File 'lib/warning_shot/gem_handler.rb', line 43 def add(gems) @gems_to_install.merge!(split(gems)) check_gems end |
#install! ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/warning_shot/gem_handler.rb', line 55 def install! @failed_installs = {} #RubyGems DependencyInstaller installs all dependencies, and the gem, woot! @missing_gems.each do |gem_name,gem_version| begin dep_inst = Gem::DependencyInstaller.new(gem_name,gem_version,{:install_dir => @install_dir}) rescue Exception => e #Invalid Gem Name / Version @failed_installs[gem_name] = "Bad gem name or version #{gem_name} #{gem_version}" end #Determine what dependencies are missing dep_inst.gather_dependencies #Install missing dependencies begin dep_inst.install @installed_gems.push(*dep_inst.installed_gems) rescue Errno::EACCES => e @failed_installs[gem_name] = "Invalid permissions . . . try running w/ sudo" rescue Gem::FilePermissionError => e @failed_installs[gem_name] = "Invalid permissions . . . try running w/ sudo" rescue Exception => e @failed_installs[gem_name] = e. end end Gem::cache.refresh! check_gems return @failed_installs.length == 0 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
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 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/warning_shot/gem_handler.rb', line 110 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
49 50 51 52 |
# File 'lib/warning_shot/gem_handler.rb', line 49 def remove(gems) gems.collect { |g| @gems_to_install.delete(g) } check_gems end |
#split(gem_list) ⇒ Object
32 33 34 35 36 37 38 39 40 |
# File 'lib/warning_shot/gem_handler.rb', line 32 def split(gem_list) gems = {} gem_list.collect do |gem| gem_name, gem_ver = gem.chomp.split(":") gems[gem_name] = gem_ver || DEFAULT_VERSION #Default to newest gem end return gems end |