warning-shot 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,4 +1,11 @@
1
- == 0.9.0 2008-03-12
1
+ == 0.9.2 2008-03-13
2
+ * 2 major enhancement:
3
+ * Optional gem repos to check
4
+ * Install gems in "frozen" or "burned-in" dependency directories
5
+ * 1 minor enhancement:
6
+ * Outline for WarningShot::Logger
7
+
8
+ == 0.9.1 2008-03-12
2
9
  * 1 minor enhancement:
3
10
  * Cleaned up gem output
4
11
 
data/README.txt CHANGED
@@ -9,23 +9,24 @@ USAGE
9
9
  WarningShot can be used from the command line or in a capistrano script via the 'warning-shot' binary.
10
10
 
11
11
  Options are:
12
-
13
- --environment=RAILS_ENV Environment to test in.
14
- Default: development
15
- -s, --strict URL Testing is only successful on 200 instead of 2xx
16
- -f, --flush Flush log before running
17
- -g, --gems Install/update all missing OR outdated gems
18
- --dir=DIR The root directory of the application to check.
19
- Default: .
20
- --log=LOG Path of log file.
21
- Default: (--dir path)/logs/warning_shot_(--environment).log
22
- --configs=PATH Path to config files to use.
23
- Default: (--dir path)/config/warning_shot/
24
- -v, --verbose Output verbose information.
25
- -n, --growl Output final results via growlnotify (Requires growlnotify)
26
- --templates=[PATH] Generates template files
27
- Default: Not Generated! (If specified, default is '.')
28
- -h, --help Show this help message.
12
+ --environment=APP_ENV Environment to test in.
13
+ Default: development
14
+ -s, --strict URL Testing is only successful on 200 instead of 2xx
15
+ -f, --flush Flush log before running
16
+ -g, --gems Install/update all missing OR outdated gems
17
+ --gempath=PATH Semicolon separated list of gem paths, gems will be installed in the 1st path
18
+ --dir=DIR The root directory of the application to check.
19
+ Default: .
20
+ --log=LOG Path of log file.
21
+ Default: (--dir path)/logs/warning_shot_(--environment).log
22
+ --configs=PATH Path to config files to use.
23
+ Default: (--dir path)/config/warning_shot/
24
+ -v, --verbose Output verbose information.
25
+ -n, --growl Output final results via growlnotify (Requires growlnotify)
26
+ --templates=[PATH] Generates template files
27
+ Default: Not Generated! (If specified, default is '.')
28
+ -h, --help Show this help message.
29
+ -d, --debug Enable debugging.
29
30
 
30
31
 
31
32
  CONFIGURATION FILES
data/bin/warning-shot CHANGED
@@ -31,6 +31,8 @@ BANNER
31
31
  "Flush log before running") { |OPTIONS[:flush]| }
32
32
  opts.on("-g", "--gems",
33
33
  "Install/update all missing OR outdated gems") { |OPTIONS[:gems]| }
34
+ opts.on("--gempath=PATH",String,
35
+ "Semicolon separated list of gem paths, gems will be installed in the first path") {|OPTIONS[:gempath]|}
34
36
  opts.on("--dir=DIR", String,
35
37
  "The root directory of the application to check.",
36
38
  "Default: #{OPTIONS[:dir]}") { |OPTIONS[:dir]| }
data/lib/warning_shot.rb CHANGED
@@ -25,11 +25,15 @@ include RippleNetworks::WarningShot
25
25
 
26
26
  =begin
27
27
  TODOs
28
- -->Output message for installed gems
29
- -->False negatives=> saysnot installed when it actually is...
28
+ -->Change from http reqs to protocol http://etc, memcached://etc, ftp://etc...
29
+
30
+ -->flag to install gems in first alt gem path
31
+
30
32
  -->Implement a WarningShot.logger.(info,fatal,etc...) instead of current logging mechanism
31
33
  ====>In programatic interface take a logger and override (for passing in external loggers)
34
+
32
35
  -->Further de-couple the dep_checker class
36
+
33
37
  -->Update GemHandler#installed? to use Gem::Requirement#satisfied_by?
34
38
 
35
39
 
@@ -49,7 +49,8 @@ module RippleNetworks
49
49
  :gems => false,
50
50
  :verbose => false,
51
51
  :growl => false,
52
- :templates => false
52
+ :templates => false,
53
+ :gempath => nil
53
54
  }
54
55
 
55
56
  #Set up CLEAR and Windows Add'l requirement
@@ -178,30 +179,19 @@ module RippleNetworks
178
179
 
179
180
  section("Checking gem dependencies")
180
181
  #Initialize gem handler
181
- @gh = GemHandler.new(self.configs["gems"])
182
182
 
183
- #List already installed gems
184
- @gh.found_gems.each do |gem,version|
185
- record("#{gem} v. #{version} was found!",:info)
186
- end
187
-
188
- #install missing gems
189
- @gh.missing_gems.each do |gem,version|
190
- record("#{gem} v. #{version} was NOT found!",(self.options[:gems]) ? :warning : :error)
191
- @gh.install(gem,version) if self.options[:gems]
192
- end
193
-
194
- #List failed gems
195
- @gh.failed_gems.each do |gem,reason|
196
- record("#{gem} failed to install! Reason: #{reason}",:error)
197
- end
183
+ gem_handler = GemHandler.new(self.configs["gems"],{
184
+ :install_all => @options[:gems],
185
+ :gem_path => @options[:gempath]
186
+ })
198
187
 
199
- @gh.installed_gems.each do |gem|
200
- record("#{gem.name} v. #{gem.version} was installed!",:info)
188
+ gem_handler.each do |c_gem|
189
+ if c_gem.status != :installed
190
+ record("#{c_gem.name} v. #{c_gem.version}:: #{c_gem.details}", :error)
191
+ else
192
+ record("#{c_gem.name} v. #{c_gem.version} requirement met!")
193
+ end
201
194
  end
202
-
203
- gem_errors = @gh.missing_gems.size - @gh.installed_gems.size
204
- record("#{gem_errors} gems had errors", :info) if gem_errors > 0
205
195
 
206
196
  section("Loading Ruby test scripts")
207
197
  count = load_ruby_scripts
@@ -6,100 +6,72 @@ require 'rubygems/dependency_installer'
6
6
 
7
7
  module RippleNetworks
8
8
  module WarningShot
9
- class GemHandler
9
+ class GemHandler < Array
10
10
  DEFAULT_VERSION = ">0.0.0".freeze
11
11
  CONDITIONAL_RGX = /[^\d]*/.freeze
12
12
  VERSION_RGX = /[\d\.]+/.freeze
13
+ CandidateGem = Struct.new(:name,:version,:status,:details)
13
14
 
14
- attr_reader :gems_to_install, :missing_gems, :failed_gems, :installed_gems, :found_gems
15
+ DEFAULTS = {
16
+ :install_all => false,
17
+ :gem_path => Gem.dir
18
+ }
15
19
 
16
- def initialize(gem_list,install_all=false,install_dir=Gem.dir)
17
- @install_dir = install_dir
20
+ def initialize(gem_list,opts={})
21
+ @opts = DEFAULTS.merge(opts)
18
22
 
19
- @missing_gems = {} # gems that will attempted to be installed
20
- @failed_gems = {} # gems taht failed installation
21
- @installed_gems = [] # gems that were installed by this process
22
- @found_gems = {} # gems that were already installed
23
+ Gem.path.clear
24
+ #Add custom paths to gem..
25
+ unless @opts[:gem_path].nil? || @opts[:gem_path].empty?
26
+ @opts[:gem_path].split(";").each do |alt_path|
27
+ Gem.path.push(alt_path)
28
+ end
29
+ end
23
30
 
24
- @gems_to_install = split(gem_list)
25
- #TODO Create a Gem<Strunct(name,status,version,details) and get rid of all these
26
- #different gem variables
31
+ #Add candidate gems to array
32
+ split(gem_list).each do |rgem,ver|
33
+ self.push(CandidateGem.new(rgem,ver,:unchecked,""))
34
+ end
27
35
 
36
+ #Check status of gems
28
37
  check_gems
29
- install! if install_all
38
+ install_all! if @opts[:install_all]
30
39
  end
31
40
 
32
41
 
33
42
  def split(gem_list)
34
43
  gems = {}
35
44
  gem_list.collect do |gem|
36
- gem_name, gem_ver = gem.chomp.split(":")
45
+ case gem
46
+ when String
47
+ gem_name, gem_ver = gem.chomp.split(":")
48
+ when Hash
49
+ gem_name, gem_ver = gem.keys.first, gem.values.first
50
+ end
37
51
  gems[gem_name] = gem_ver || DEFAULT_VERSION #Default to newest gem
38
52
  end
39
-
53
+
40
54
  return gems
41
55
  end
42
56
 
43
57
 
44
58
  def add(gems)
45
- @gems_to_install.merge!(split(gems))
59
+ #@gems_to_install.merge!(split(gems))
46
60
  check_gems
47
61
  end
48
62
 
49
63
 
50
64
  def remove(gems)
51
- gems.collect { |g| @gems_to_install.delete(g) }
65
+ #gems.collect { |g| @gems_to_install.delete(g) }
52
66
  check_gems
53
67
  end
54
-
55
- def install(gem_name,gem_version)
56
- begin
57
- #RubyGems DependencyInstaller installs all dependencies, and the gem, woot!
58
- dep_inst = Gem::DependencyInstaller.new(gem_name,gem_version,{:install_dir => @install_dir})
59
- rescue Exception => e
60
- #Invalid Gem Name / Version
61
- @failed_gems[gem_name] = "Bad gem name or version #{gem_name} #{gem_version}"
62
- return false
63
- end
64
68
 
65
- #Determine what dependencies are missing
66
- dep_inst.gather_dependencies
67
-
68
- begin
69
- #Install the dependencies and the gem
70
- dep_inst.install
71
-
72
- #Add list of installed gems to @installed_gems
73
- @installed_gems.push(*dep_inst.installed_gems)
74
-
75
- #Remove any isntalled gems from failed list
76
- dep_inst.installed_gems.each do |gem|
77
- @failed_gems.delete(gem.name) if @failed_gems.has_key?(gem.name)
78
- end
79
-
80
- #Update the local gem cache
81
- Gem::cache.refresh!
82
-
83
- #Update missing gems
84
- check_gems
85
- return true
86
- rescue Errno::EACCES => e
87
- @failed_gems[gem_name] = "Invalid permissions . . . try running w/ su"
88
- rescue Gem::FilePermissionError => e
89
- @failed_gems[gem_name] = "Invalid permissions . . . try running w/ su"
90
- rescue Exception => e
91
- @failed_gems[gem_name] = e.message
92
- end
93
-
94
- return false
95
- end
96
69
 
97
- def install!
98
- @missing_gems.each do |gem_name,gem_version|
99
- install(gem_name,gem_version)
70
+ #Loop over candidate gems, install each
71
+ def install_all!
72
+ self.each do |c_gem|
73
+ install(c_gem) if c_gem.status != :installed
100
74
  end
101
-
102
- return @failed_gems.length == 0
103
75
  end
104
76
 
105
77
 
@@ -172,6 +144,50 @@ module RippleNetworks
172
144
 
173
145
 
174
146
  private
147
+
148
+ #Install a candidate gem
149
+ def install(c_gem)
150
+ begin
151
+ #RubyGems DependencyInstaller installs all dependencies, and the gem, woot!
152
+ dep_inst = Gem::DependencyInstaller.new(c_gem.name,c_gem.version,{:install_dir => Gem.path.first})
153
+ rescue Gem::GemNotFoundException => e
154
+ #Invalid Gem Name / Version
155
+ c_gem.status = :invalid
156
+ c_gem.details = "Invalid gem name or version #{c_gem.name} #{c_gem.version}"
157
+ return false
158
+ end
159
+
160
+ #Determine what dependencies are missing
161
+ dep_inst.gather_dependencies
162
+
163
+ begin
164
+ #Install the dependencies and the gem
165
+ dep_inst.install
166
+
167
+ #add dependency details to gem
168
+ c_gem.details = "Installed Dependencies: " << dep_inst.installed_gems.collect { |d_gem| d_gem.name }.join(",")
169
+
170
+ #Update the local gem cache
171
+ Gem::cache.refresh!
172
+
173
+ #Update missing gems
174
+ check_gems
175
+ return true
176
+ rescue Errno::EACCES => e
177
+ c_gem.status = :failed
178
+ c_gem.details = "Invalid permissions . . . try running w/ su"
179
+ rescue Gem::FilePermissionError => e
180
+ c_gem.status = :failed
181
+ c_gem.details = "Invalid permissions . . . try running w/ su"
182
+ rescue Exception => e
183
+ c_gem.status = :failed
184
+ c_gem.details = e.message
185
+ end
186
+
187
+ return false
188
+ end
189
+
190
+
175
191
  =begin rdoc
176
192
  *Name*:: check_gems
177
193
  *Access*:: private
@@ -179,14 +195,11 @@ module RippleNetworks
179
195
  *Last_Edited*:: Tue Feb 19 15:09:00 PST 2008
180
196
  =end
181
197
  def check_gems
182
- @missing_gems = {}
183
-
184
- @gems_to_install.each do |gem_name,gem_version|
185
- gem_info = installed?(gem_name,gem_version)
198
+ self.each do |c_gem|
199
+ gem_info = installed?(c_gem.name,c_gem.version)
186
200
  if gem_info[:installed]
187
- @found_gems[gem_name] = gem_version
188
- else
189
- @missing_gems[gem_name] = gem_version
201
+ c_gem.status = :installed
202
+ c_gem.details = gem_info[:info]
190
203
  end
191
204
  end
192
205
  end
@@ -3,7 +3,7 @@ module WarningShot #:nodoc:
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 0
5
5
  MINOR = 9
6
- TINY = 1
6
+ TINY = 2
7
7
  RC = 1
8
8
 
9
9
  STRING = [MAJOR, MINOR, TINY].join('.')
data/website/index.html CHANGED
@@ -33,7 +33,7 @@
33
33
  <h1>warning_shot</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/warning_shot"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/warning_shot" class="numbers">0.9.1</a>
36
+ <a href="http://rubyforge.org/projects/warning_shot" class="numbers">0.9.2</a>
37
37
  </div>
38
38
  <h1>&#x2192; &#8216;warning_shot&#8217;</h1>
39
39
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warning-shot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cory O'Daniel
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-03-12 00:00:00 -07:00
12
+ date: 2008-03-13 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15