warning-shot 0.9.2 → 0.9.3

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,3 +1,7 @@
1
+ == 0.9.2 2008-03-13
2
+ * 1 major enhancement:
3
+ * Finished logger class
4
+
1
5
  == 0.9.2 2008-03-13
2
6
  * 2 major enhancement:
3
7
  * Optional gem repos to check
data/lib/warning_shot.rb CHANGED
@@ -6,8 +6,6 @@ require 'net/http'
6
6
  require 'net/https'
7
7
  require 'uri'
8
8
 
9
-
10
-
11
9
  #IMPORTANT remember to add new includes to Manifest.txt
12
10
  Dir.glob(File.join(File.dirname(__FILE__), "warning_shot/*.rb")).each {|f|
13
11
  require f
@@ -18,7 +16,6 @@ include RippleNetworks::WarningShot
18
16
  =begin
19
17
  Useful URLS:
20
18
  http://rubygems.rubyforge.org/rdoc/
21
- http://en.wikipedia.org/wiki/ANSI_escape_code
22
19
  http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html
23
20
  =end
24
21
 
@@ -27,11 +24,6 @@ include RippleNetworks::WarningShot
27
24
  TODOs
28
25
  -->Change from http reqs to protocol http://etc, memcached://etc, ftp://etc...
29
26
 
30
- -->flag to install gems in first alt gem path
31
-
32
- -->Implement a WarningShot.logger.(info,fatal,etc...) instead of current logging mechanism
33
- ====>In programatic interface take a logger and override (for passing in external loggers)
34
-
35
27
  -->Further de-couple the dep_checker class
36
28
 
37
29
  -->Update GemHandler#installed? to use Gem::Requirement#satisfied_by?
@@ -24,20 +24,20 @@ module RippleNetworks
24
24
  ws.configs[config_file] = global.concat(running_env)
25
25
  ws.configs[config_file].uniq!
26
26
 
27
- ws.record("LOADED: #{config_file}.yml")
27
+ ws.logger.notice("LOADED: #{config_file}.yml")
28
28
  rescue Errno::ENOENT => e
29
29
  ws.configs[config_file] = {}
30
30
  configs_not_found += 1
31
- ws.record("NOT FOUND: #{config_file}.yml",:warning)
31
+ ws.logger.warning("NOT FOUND: #{config_file}.yml")
32
32
  rescue Exception => e
33
- ws.record(e.inspect)
33
+ ws.logger.error(e.inspect)
34
34
  ws.configs[config_file] = {}
35
- ws.record("MALFORMED: #{config_file}.yml",:error)
35
+ ws.logger.error("MALFORMED: #{config_file}.yml")
36
36
  end
37
37
  end
38
38
 
39
39
  if configs_not_found == DepChecker::DEP_FILES.size
40
- ws.record("No configuration files found!\n\t\tTo generate run 'warning-shot --templates=PATH'",:info)
40
+ ws.logger.info("No configuration files found!\n\t\tTo generate run 'warning-shot --templates=PATH'")
41
41
  end
42
42
  end
43
43
 
@@ -19,7 +19,7 @@ module RippleNetworks
19
19
  =end
20
20
  class DepChecker
21
21
  include RippleNetworks::WarningShot
22
- attr_reader :options, :warnings, :errors, :configs
22
+ attr_reader :options, :warnings, :errors, :configs, :logger
23
23
 
24
24
  LIB_DIRECTORY = $:[0]
25
25
 
@@ -52,33 +52,22 @@ module RippleNetworks
52
52
  :templates => false,
53
53
  :gempath => nil
54
54
  }
55
-
56
- #Set up CLEAR and Windows Add'l requirement
57
- if PLATFORM =~ /win32/
58
- CLEAR = `cls`
59
- begin
60
- require 'Win32/Console/ANSI'
61
- rescue LoadError => e
62
- puts "Run: 'gem install win32console' for colored output"
63
- end
64
- else
65
- CLEAR = `clear`
66
- end
67
55
 
68
56
 
69
57
  def initialize(options=DEFAULTS)
70
58
  @original_requires = $".clone
71
59
 
72
- ObjectSpace.define_finalizer(self, lambda{ @log_file.close unless @log_file.closed? })
73
-
74
60
  #Add directory information to defaults
75
- DEFAULTS[:log] = File.join(options[:dir],"log","warning_shot_#{options[:environment]}.log")
76
61
  DEFAULTS[:configs] = File.join(options[:dir],"config","warning_shot")
77
-
78
62
  @options = DEFAULTS.merge(options)
79
63
 
80
64
  #Map to correct running environment
81
65
  @options[:environment] = ENVIRONMENT_MAP[@options[:environment]]
66
+
67
+ @logger = Logger.new(
68
+ (@options[:log] || File.join(@options[:dir],"log","warning_shot_#{@options[:environment]}.log")),
69
+ {:verbose => @options[:verbose], :flush => @options[:flush]}
70
+ )
82
71
 
83
72
  #No errors or warnings
84
73
  @errors = 0
@@ -86,16 +75,9 @@ module RippleNetworks
86
75
 
87
76
  #initalize config file hash
88
77
  @configs = {}
89
-
90
- #Flush log
91
- flush_log! if @options[:flush]
92
-
93
- #Open log
94
- @log_file = File.open(@options[:log],"a+")
95
78
 
96
79
  #Check dependencies
97
80
  @which_installed = has_binary_prereqs?
98
- puts CLEAR if @options[:verbose]
99
81
  end
100
82
 
101
83
  =begin rdoc
@@ -149,68 +131,117 @@ module RippleNetworks
149
131
  =end
150
132
  def run
151
133
  start_time = Time.now
152
- section
153
- record("WarningShot (v. #{VERSION::INTERNAL}) - started @ #{start_time}")
154
- check_framework
155
- record("Environment: #{@options[:environment]}")
156
- record("Framework: #{@framework}")
157
-
158
- section("Loading YAML files:")
159
- ConfigParser.run(self)
160
-
161
- section("Preloading classes")
162
- class_loader("preload")
163
-
164
- section("Checking class dependencies")
165
- count = class_loader("classes")
166
- record "#{count} classes not found",:error if count > 0
134
+ tmp_errors = 0
135
+
136
+ @logger.heading
137
+ @logger.heading "WarningShot (v. #{VERSION::INTERNAL}) - started @ #{start_time}"
167
138
 
168
- section("Checking binary dependencies")
169
- count = check_binaries
170
- record "#{count} binaries not found", :error if count > 0
139
+ check_framework
140
+ @logger.info("Environment: #{@options[:environment]}")
141
+ @logger.info("Framework: #{@framework}")
171
142
 
172
- section("Checking filesystem dependencies")
173
- count = check_filesystem
174
- record "#{count} files/directories not found", :error if count > 0
143
+ @logger.heading("Loading YAML files:")
144
+ ConfigParser.run(self)
175
145
 
176
- section("Checking URL dependencies")
177
- count = check_urls
178
- record "#{count} sites unavailable", :error if count > 0
146
+ @logger.heading("Preloading classes")
147
+ class_loader("preload")
179
148
 
180
- section("Checking gem dependencies")
181
- #Initialize gem handler
149
+ @logger.heading("Checking class dependencies")
150
+ tmp_errors = class_loader("classes")
151
+ if tmp_errors > 0
152
+ @errors += tmp_errors
153
+ @logger.error("#{tmp_errors} classes not found!")
154
+ else
155
+ @logger.notice("All class dependencies found.")
156
+ end
157
+
158
+ @logger.heading("Checking binary dependencies")
159
+ tmp_errors = check_binaries
160
+ if tmp_errors > 0
161
+ @errors += tmp_errors
162
+ @logger.error("#{tmp_errors} binaries not found!")
163
+ else
164
+ @logger.notice("All binaries found.")
165
+ end
166
+
167
+ @logger.heading("Checking filesystem dependencies")
168
+ tmp_errors = check_filesystem
169
+ if tmp_errors > 0
170
+ @errors += tmp_errors
171
+ @logger.error("#{tmp_errors} files/directories not found!")
172
+ else
173
+ @logger.notice("All files/directories found.")
174
+ end
175
+
176
+ @logger.heading("Checking URL dependencies")
177
+ tmp_errors = check_urls
178
+ if tmp_errors > 0
179
+ @errors += tmp_errors
180
+ @logger.error("#{tmp_errors} sites unavailable!")
181
+ else
182
+ @logger.notice("All sites found.")
183
+ end
182
184
 
183
- gem_handler = GemHandler.new(self.configs["gems"],{
184
- :install_all => @options[:gems],
185
- :gem_path => @options[:gempath]
186
- })
185
+ @logger.heading("Checking gem dependencies")
186
+ #Initialize Gem Handler
187
+ gem_handler = GemHandler.new(self.configs["gems"],{
188
+ :install_all => @options[:gems],
189
+ :gem_path => @options[:gempath]
190
+ })
187
191
 
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
192
+ tmp_errors = 0
193
+ gem_handler.each do |c_gem|
194
+ if c_gem.status != :installed
195
+ tmp_errors += 1
196
+ @logger.notice("#{c_gem.name} v. #{c_gem.version}:: #{c_gem.details}")
197
+ else
198
+ @logger.info("#{c_gem.name} v. #{c_gem.version} requirement met.")
194
199
  end
200
+ end
201
+ if tmp_errors > 0
202
+ @errors += tmp_errors
203
+ @logger.error("#{tmp_errors} gems are missing!")
204
+ else
205
+ @logger.notice("All gems found.")
206
+ end
207
+
208
+ #Load the ruby scripts (not run yet)
209
+ @logger.heading("Loading Ruby test scripts")
210
+ tmp_errors = load_ruby_scripts
211
+ if tmp_errors > 0
212
+ @errors += tmp_errors
213
+ @logger.error("#{tmp_errors} scripts failed to load!")
214
+ else
215
+ @logger.notice("All scripts loaded successfully.")
216
+ end
195
217
 
196
- section("Loading Ruby test scripts")
197
- count = load_ruby_scripts
198
- record("#{count} scripts failed to load",:error) if count > 0
218
+ #Run the ruby scripts
219
+ @logger.heading("Running ruby tests scripts")
220
+ tmp_errors = test_ruby_scripts
221
+ if tmp_errors > 0
222
+ @errors += tmp_errors
223
+ @logger.error("#{tmp_errors} ruby tests failed!")
224
+ else
225
+ @logger.notice("All ruby tests ran successfully.")
226
+ end
199
227
 
200
- section("Running Ruby test scripts")
201
- count = test_ruby_scripts
202
- record("#{count} scripts failed",:error) if count > 0
228
+ #@logger.heading("Running shell tests scripts")
229
+ #tmp_errors = check_shell_scripts
230
+ #if tmp_errors > 0
231
+ # @errors += tmp_errors
232
+ # @logger.error("#{tmp_errors} shell tests failed!")
233
+ #else
234
+ # @logger.info("All shell tests ran successfully.")
235
+ #end
236
+
237
+ @logger.heading
238
+ @logger.heading("RESULTS")
203
239
 
204
- #section("Shell script dependencies")
205
- #count = check_shell_scripts
206
- #record("#{count} scripts failed",:error) if count > 0
240
+ @logger.info("Total Warnings: #{@warnings}")
241
+ @logger.info("Total Errors: #{@errors}")
242
+ @logger.info("Checked in #{Time.now.to_f-start_time.to_f}s")
207
243
 
208
- section
209
- section("RESULTS")
210
- record("Total Warnings #{@warnings}",(@warnings > 0) ? :warning : :info)
211
- record("Total Errors: #{@errors}",(@errors > 0) ? :error : :info)
212
- record("Checked in #{Time.now.to_f-start_time.to_f}s",:info)
213
- section
244
+ @logger.heading
214
245
 
215
246
  #Status via growlnotify
216
247
  if @options[:growl]
@@ -223,54 +254,9 @@ module RippleNetworks
223
254
  end
224
255
 
225
256
  unload
226
- @log_file.close unless @log_file.closed?
257
+ @logger.close
227
258
  end
228
-
229
-
230
- =begin rdoc
231
- *Name*:: record
232
- *Access*:: public
233
- *Description*:: Record message to log
234
- *Last_Edited*:: Wed Dec 12 15:37:21 PST 2007
235
- ===Parameters
236
- * Name: level
237
- * Description: Message level :error, :warning, :info, :none
238
- * Datatype: Symbol
239
- * Default: :info
240
- * Required: false
241
- =end
242
- def record(msg,level=:none)
243
- if [:error,:warning,:info,:fatal].include? level
244
- msg = %{#{level.to_s.upcase}: #{msg}}
245
- end
246
-
247
- case level
248
- when :error
249
- @errors += 1
250
- when :warning
251
- @warnings += 1
252
- end
253
-
254
- @log_file.puts msg
255
-
256
- if @options[:verbose]
257
- case level
258
- when :info
259
- msg = "\e[37m#{msg}\e[0m"
260
- when :error
261
- msg = "\e[31m#{msg}\e[0m"
262
- when :warning
263
- msg = "\e[33m#{msg}\e[0m"
264
- when :fatal
265
- msg = "\e[1m\e[5m#{msg}\e[0m"
266
- end
267
-
268
- puts msg
269
-
270
- Kernel.exit if level == :fatal
271
- end
272
- end
273
-
259
+
274
260
 
275
261
  private
276
262
 
@@ -314,23 +300,6 @@ module RippleNetworks
314
300
  gmsg += %{ --image #{File.join(LIB_DIRECTORY,"..","images",img)}} unless img.nil?
315
301
  %x{#{gmsg}}
316
302
  end
317
-
318
-
319
- =begin rdoc
320
- *Name*:: section
321
- *Access*:: private
322
- *Description*:: Display a section seperator
323
- *Last_Edited*:: Mon Dec 17 10:45:52 PST 2007
324
- ===Parameters
325
- * Name: title
326
- * Description: Puts a title in the seperator
327
- * Datatype: string
328
- * Default: None
329
- * Required: False
330
- =end
331
- def section(title="")
332
- record %{#{title.center(60,"-") }}
333
- end
334
303
 
335
304
 
336
305
  =begin rdoc
@@ -348,28 +317,15 @@ module RippleNetworks
348
317
 
349
318
  if @options[:growl]
350
319
  unless DepChecker.has_binary? "growlnotify"
351
- record "Could not locate: `growlnotify`", :warning
320
+ @logger.warning "Could not locate: `growlnotify`"
352
321
  end
353
322
  end
354
323
  return true
355
324
  else
356
- record "Could not locate: `which`; required for binaries dependencies\n\tbinaries.yml will be skipped!!!", :error
325
+ @logger.error "Could not locate: `which`; required for binaries dependencies\n\tbinaries.yml will be skipped!!!"
357
326
  return false
358
327
  end
359
328
  end
360
-
361
-
362
- =begin rdoc
363
- *Name*:: flush_log!
364
- *Access*:: private
365
- *Description*:: Flushes log file if it exists
366
- *Last_Edited*:: Wed Dec 12 15:04:11 PST 2007
367
- =end
368
- def flush_log!
369
- File.truncate(@options[:log],0) if File.exists? @options[:log]
370
- #File.unlink @options[:log] if File.exists? @options[:log]
371
- #FileUtils.touch @options[:log]
372
- end
373
329
 
374
330
 
375
331
  =begin rdoc
@@ -392,16 +348,18 @@ module RippleNetworks
392
348
  #TODO Mute output from requires, ie "puts"
393
349
  #@@@ Rescue block doesn't seem to be catching error.
394
350
  require klass
395
- record("FOUND: #{klass}")
351
+ @logger.info("FOUND: #{klass}")
396
352
  rescue LoadError => e
397
353
  case mode
398
- when "preload"
399
- record("NOT FOUND: #{klass}",:fatal)
400
- when "classes"
401
- errors += 1
402
- record("NOT FOUND: #{klass}",:error)
403
- else
404
- record("Invalid class_loader mode",:fatal)
354
+ when "preload"
355
+ @logger.fatal("NOT FOUND: #{klass}")
356
+ Kernel.exit
357
+ when "classes"
358
+ errors += 1
359
+ @logger.error("NOT FOUND: #{klass}")
360
+ else
361
+ @logger.fatal("Invalid class_loader mode")
362
+ Kernel.exit
405
363
  end
406
364
  end
407
365
  end
@@ -422,10 +380,10 @@ module RippleNetworks
422
380
  if @which_installed
423
381
  @configs["binaries"].each do |binary|
424
382
  if DepChecker.has_binary? binary
425
- record("INSTALLED: #{binary}")
383
+ @logger.info("INSTALLED: #{binary}")
426
384
  else
427
385
  errors += 1
428
- record("NOT FOUND: #{binary}",:error)
386
+ @logger.error("NOT FOUND: #{binary}")
429
387
  end
430
388
  end
431
389
 
@@ -446,13 +404,13 @@ module RippleNetworks
446
404
 
447
405
  @configs["filesystem"].each do |path|
448
406
  if File.file?(path)
449
- record("FOUND (file): #{path}")
407
+ @logger.info("FOUND (file): #{path}")
450
408
  elsif File.directory?(path)
451
- record("FOUND (directory): #{path}")
409
+ @logger.info("FOUND (directory): #{path}")
452
410
  elsif File.exists?(path)
453
- record("FOUND: #{path}")
411
+ @logger.info("FOUND: #{path}")
454
412
  else
455
- record("NOT FOUND: #{path}", :error)
413
+ @logger.error("NOT FOUND: #{path}")
456
414
  errors += 1
457
415
  end
458
416
  end
@@ -482,16 +440,20 @@ module RippleNetworks
482
440
  http_code = response.code.to_i
483
441
 
484
442
  if @options[:strict] && http_code == 200
485
- record("CONNECTED (#{http_code}): #{uri}")
443
+ @logger.info("CONNECTED (#{http_code}): #{uri}")
486
444
  elsif http_code >= 200 && http_code < 300
487
- record("CONNECTED (#{http_code}): #{uri}", ((http_code != 200)? :warning : nil))
445
+ if (http_code != 200)
446
+ @logger.warning("CONNECTED (#{http_code}): #{uri}")
447
+ else
448
+ @logger.info("CONNECTED (#{http_code}): #{uri}")
449
+ end
488
450
  else
489
451
  errors += 1
490
- record("UNAVAILABLE (#{http_code}): #{uri}", :error)
452
+ @logger.error("UNAVAILABLE (#{http_code}): #{uri}")
491
453
  end
492
454
  rescue Exception => e
493
455
  errors += 1
494
- record("An exception occurred: #{e.message} while connecting to: #{uri}", :error)
456
+ @logger.error("An exception occurred: #{e.message} while connecting to: #{uri}")
495
457
  end
496
458
  end
497
459
 
@@ -509,8 +471,8 @@ module RippleNetworks
509
471
  begin
510
472
  require pre_script if File.exists? pre_script
511
473
  rescue
512
- record "Failed to load: #{pre_script}", :fatal
513
- errors +=1
474
+ @logger.fatal "Failed to load: #{pre_script}"
475
+ Kernel.exit
514
476
  end
515
477
 
516
478
  Dir.new(scripts_path).each { |script|
@@ -524,8 +486,8 @@ module RippleNetworks
524
486
  begin
525
487
  require s if File.exists? s
526
488
  rescue
527
- record "Failed to load: #{s}",:fatal
528
- errors +=1
489
+ @logger.fatal "Failed to load: #{s}"
490
+ Kernel.exit
529
491
  end
530
492
  }
531
493
 
@@ -537,12 +499,13 @@ module RippleNetworks
537
499
  begin
538
500
  require post_script if File.exists? post_script
539
501
  rescue
540
- record "Failed to load: #{pre_script}", :fatal
541
- errors +=1
502
+ @logger.fatal "Failed to load: #{pre_script}"
503
+ Kernel.exit
542
504
  end
543
505
  rescue Exception => e
544
- record e
545
- record "Script directory not found, try running 'warning-shot --templates=PATH'", :warning
506
+ @logger.fatal(e)
507
+ @logger.fatal "Script directory not found, try running 'warning-shot --templates=PATH'"
508
+ Kernel.exit
546
509
  end
547
510
 
548
511
  return errors
@@ -556,15 +519,16 @@ module RippleNetworks
556
519
  result, message = test.run()
557
520
 
558
521
  unless result
559
- record %{#{test.class} test failed!},:error
560
- record(%{\tMessage from #{test.class} test: #{message}}) unless message.nil?
522
+ @logger.error %{#{test.class} test failed!}
523
+ @logger.notice(%{Message from #{test.class} test: #{message}}) unless message.nil?
561
524
  errors += 1
562
525
  else
563
- record(%{#{test.class} test passed!},:info)
564
- record(%{\tMessage from #{test.class} test: #{message}}) unless message.nil?
526
+ @logger.info(%{#{test.class} test passed!})
527
+ @logger.notice(%{Message from #{test.class} test: #{message}}) unless message.nil?
565
528
  end
566
529
  rescue Exception => e
567
- record %{An error occured while processing: #{test.class}\n#{e}}, :fatal
530
+ @logger.fatal %{An error occured while processing: #{test.class}\n#{e}}
531
+ @logger.notice "This test may be inconclusive..."
568
532
  errors += 1
569
533
  end
570
534
  end
@@ -2,16 +2,99 @@
2
2
  module RippleNetworks
3
3
  module WarningShot
4
4
  class Logger
5
+ #Set up CLEAR and Windows Add'l requirement
6
+ if PLATFORM =~ /win32/
7
+ CLEAR = `cls`
8
+ begin
9
+ require 'Win32/Console/ANSI'
10
+ rescue LoadError => e
11
+ puts "Run: 'gem install win32console' for colored output"
12
+ end
13
+ else
14
+ CLEAR = `clear`
15
+ end
16
+
5
17
 
6
- def initialize(path,verbose=false);end;
18
+ ESCAPE_SEQ = {
19
+ :notice => "\e[37m%s\e[0m",
20
+ :warning => "\e[33m%s\e[0m",
21
+ :debug => "\e[34m%s\e[0m",
22
+ :error => "\e[31m%s\e[0m",
23
+ :fatal => "\e[1m\e[5m%s\e[0m"
24
+ }
25
+
26
+
27
+ DEFAULTS = {
28
+ :verbose => false,
29
+ :flush => false
30
+ }
31
+
32
+ def initialize(path,opts={})
33
+ options = DEFAULTS.merge(opts)
34
+ @verbose = options[:verbose]
35
+
36
+ @log_file = File.open(path,"a+")
37
+
38
+ #Flush log
39
+ flush_log!(path) if options[:flush]
40
+
41
+ #Clear console
42
+ puts CLEAR if @verbose
43
+ end
44
+
45
+ def heading(title="");
46
+ msg = %{#{title.center(60,"-") }}
47
+ @log_file.puts msg
48
+ puts msg if @verbose
49
+ end
50
+
51
+ def close()
52
+ @log_file.close unless @log_file.closed?
53
+ end
54
+
55
+ def info(msg)
56
+ @log_file.puts msg
57
+ puts msg if @verbose
58
+ end
59
+
60
+ def notice(msg)
61
+ frm_msg = output_msg(:notice,msg)
62
+ @log_file.puts frm_msg
63
+ puts frm_msg if @verbose
64
+ end
65
+
66
+ def debug(msg)
67
+ frm_msg = output_msg(:debug,msg)
68
+ @log_file.puts frm_msg
69
+ puts frm_msg if @verbose
70
+ end
71
+
72
+ def error(msg)
73
+ frm_msg = output_msg(:error,msg)
74
+ @log_file.puts frm_msg
75
+ puts frm_msg if @verbose
76
+ end
77
+
78
+ def warning(msg)
79
+ frm_msg = output_msg(:warning,msg)
80
+ @log_file.puts frm_msg
81
+ puts frm_msg if @verbose
82
+ end
83
+
84
+ def fatal(msg)
85
+ frm_msg = output_msg(:fatal,msg)
86
+ @log_file.puts frm_msg
87
+ puts frm_msg if @verbose
88
+ end
7
89
 
8
- def info();end;
9
- def debug();end;
10
- def error();end;
11
- def warning();end;
12
- def fatal();end;
90
+ private
91
+ def output_msg(type,msg)
92
+ frm_msg = sprintf(ESCAPE_SEQ[type],%{[#{type.to_s.upcase}]\t #{msg}})
93
+ end
13
94
 
14
- def close();end;
95
+ def flush_log!(log_file)
96
+ File.truncate(log_file,0) if File.exists? log_file
97
+ end
15
98
  end
16
99
  end
17
100
  end
@@ -3,7 +3,7 @@ module WarningShot #:nodoc:
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 0
5
5
  MINOR = 9
6
- TINY = 2
6
+ TINY = 3
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.2</a>
36
+ <a href="http://rubyforge.org/projects/warning_shot" class="numbers">0.9.3</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.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cory O'Daniel