Class: RippleNetworks::WarningShot::GemHandler

Inherits:
Array
  • Object
show all
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

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

Returns:

  • (Boolean)


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