warning-shot 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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