warning-shot 0.8.9

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.
Files changed (45) hide show
  1. data/History.txt +8 -0
  2. data/License.txt +24 -0
  3. data/Manifest.txt +44 -0
  4. data/README.txt +65 -0
  5. data/Rakefile +4 -0
  6. data/bin/warning-shot +74 -0
  7. data/config/hoe.rb +71 -0
  8. data/config/requirements.rb +17 -0
  9. data/config/warning_shot/binaries.yml +10 -0
  10. data/config/warning_shot/classes.yml +12 -0
  11. data/config/warning_shot/filesystem.yml +8 -0
  12. data/config/warning_shot/gems.yml +15 -0
  13. data/config/warning_shot/preload.yml +10 -0
  14. data/config/warning_shot/scripts/ruby/example.rb +19 -0
  15. data/config/warning_shot/scripts/ruby/post.rb +18 -0
  16. data/config/warning_shot/scripts/ruby/post_example.rb +18 -0
  17. data/config/warning_shot/scripts/ruby/pre.rb +18 -0
  18. data/config/warning_shot/scripts/ruby/pre_example.rb +19 -0
  19. data/config/warning_shot/scripts/shell/pre.sh +0 -0
  20. data/config/warning_shot/urls.yml +9 -0
  21. data/images/ruby_fail.png +0 -0
  22. data/images/ruby_ok.png +0 -0
  23. data/lib/warning_shot/config_parser.rb +46 -0
  24. data/lib/warning_shot/dep_checker.rb +584 -0
  25. data/lib/warning_shot/gem_handler.rb +217 -0
  26. data/lib/warning_shot/template_generator.rb +74 -0
  27. data/lib/warning_shot/test_script.rb +23 -0
  28. data/lib/warning_shot/version.rb +15 -0
  29. data/lib/warning_shot.rb +34 -0
  30. data/log/debug.log +0 -0
  31. data/script/destroy +14 -0
  32. data/script/generate +14 -0
  33. data/script/txt2html +74 -0
  34. data/setup.rb +1585 -0
  35. data/tasks/deployment.rake +34 -0
  36. data/tasks/environment.rake +7 -0
  37. data/tasks/website.rake +17 -0
  38. data/test/test_helper.rb +2 -0
  39. data/test/test_warning_shot.rb +11 -0
  40. data/website/index.html +93 -0
  41. data/website/index.txt +39 -0
  42. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  43. data/website/stylesheets/screen.css +138 -0
  44. data/website/template.rhtml +48 -0
  45. metadata +102 -0
@@ -0,0 +1,217 @@
1
+ module RippleNetworks
2
+ module WarningShot
3
+ class GemHandler
4
+ DEFAULT_VERSION = ">0.0.0".freeze
5
+ CONDITIONAL_RGX = /[^\d]*/.freeze
6
+ VERSION_RGX = /[\d\.]+/.freeze
7
+
8
+ =begin
9
+ require "./lib/warning_shot/gem_handler.rb"
10
+ gems = ["rake:>0.0.0","merb:>=0.4.0"]
11
+ include RippleNetworks::WarningShot
12
+ gh = GemHandler.new(gems)
13
+ gh.add(["RedCloth:>2.4.0"])
14
+ gh.remove(["merb"])
15
+ gh.add("merb:>=0.5.0")
16
+ gh.remove("RedCloth")
17
+ =end
18
+
19
+ attr_reader :gems, :missing_gems, :errors
20
+
21
+
22
+ def initialize(gem_list,do_install=false,install_dir=nil)
23
+ Gem.manage_gems
24
+ @gri = Gem::RemoteInstaller.new
25
+ @install_dir ||= Gem.dir
26
+
27
+ @missing_gems = {}
28
+ @gems = split(gem_list)
29
+ @errors = {}
30
+
31
+ check_gems
32
+
33
+ install! if do_install
34
+ end
35
+
36
+
37
+ def split(gem_list)
38
+ gems = {}
39
+ gem_list.collect do |gem|
40
+ gem_name, gem_ver = gem.chomp.split(":")
41
+ gems[gem_name] = gem_ver || DEFAULT_VERSION #Default to newest gem
42
+ end
43
+
44
+ return gems
45
+ end
46
+
47
+
48
+ def add(gems)
49
+ @gems.merge!(split(gems))
50
+ check_gems
51
+ end
52
+
53
+
54
+ def remove(gems)
55
+ gems.collect { |g| @gems.delete(g) }
56
+ check_gems
57
+ end
58
+
59
+
60
+ def install!
61
+ failed_installs = 0
62
+ @errors = {}
63
+
64
+ @missing_gems.each do |gem_name,gem_version|
65
+ dep_installed, dep_message = install_dependencies(gem_name,gem_version)
66
+ if dep_installed
67
+ gem_install, gem_message = install_gem(gem_name,gem_version)
68
+ unless gem_install
69
+ failed_installs += 1
70
+ @errors[gem_name] = gem_message
71
+ end
72
+ else
73
+ failed_installs += 1
74
+ @errors[gem_name] = gem_message
75
+ end
76
+ end
77
+
78
+ check_gems
79
+
80
+ return failed_installs == 0
81
+ end
82
+
83
+
84
+ =begin rdoc
85
+ *Name*:: installed?
86
+ *Access*:: public
87
+ *Description*:: Determine if gem is installed
88
+ *Last_Edited*:: Tue Feb 19 12:40:40 PST 2008
89
+ ===Parameters
90
+ * Name: gem_name
91
+ * Description: rubygems gem name (case sensitive)
92
+ * Datatype: String
93
+ * Default: None
94
+ * Required: True
95
+ * Name: gem_version
96
+ * Description: Gem version (ex ">= 1.0.3", "< 3.0", "3.0.1")
97
+ * Datatype: String
98
+ * Default: "> 0.0.0"
99
+ * Required: false
100
+ ===Returns
101
+ *Description*:: Information queried gem
102
+ *Datatype*:: Hash
103
+ =end
104
+ def installed?(gem_name,gem_version=DEFAULT_VERSION)
105
+ gem_info = {}
106
+
107
+ installed_versions = Gem::cache.search(gem_name)
108
+
109
+ unless installed_versions.empty?
110
+ #Gem is installed, determine version
111
+
112
+ version_info = []
113
+ comparison_results = []
114
+
115
+ conditionals = gem_version.match(CONDITIONAL_RGX)[0]
116
+ required_version = Gem::Version.create gem_version.match(VERSION_RGX)[0]
117
+
118
+ installed_versions.each do |i_gem|
119
+ comp_result = required_version <=> i_gem.version
120
+ version_info.push(i_gem.version.version)
121
+ comparison_results.push(comp_result) unless comparison_results.include? comp_result
122
+ end
123
+
124
+ gem_info[:versions] = version_info.join(",")
125
+
126
+ if comparison_results.include?(0) && (conditionals =~ /=/ || conditionals.empty?) # && (conditionals =~ /<>/).nil?
127
+ #Correct version installed
128
+ gem_info[:installed] = true
129
+ gem_info[:info] = "#{gem_name}:#{gem_version} is installed"
130
+ elsif comparison_results.include?(1) && (conditionals =~ /</)
131
+ #Older version installed
132
+ gem_info[:installed] = true
133
+ gem_info[:info] = "Older version installed"
134
+ elsif comparison_results.include?(-1) && (conditionals =~ />/)
135
+ #Newer version installed
136
+ gem_info[:installed] = true
137
+ gem_info[:info] = "Newer version installed"
138
+ else
139
+ gem_info[:installed] = false
140
+ gem_info[:info] = "Other version installed"
141
+ end
142
+ else
143
+ #Gem is NOT installed
144
+ gem_info[:installed] = false
145
+ gem_info[:info] = "No versions installed"
146
+ end
147
+
148
+ return gem_info
149
+ end
150
+
151
+
152
+ private
153
+
154
+ def install_dependencies(gem_name,gem_version)
155
+ #Find Dependencies
156
+ begin
157
+ deps = @gri.find_gem_to_install gem_name, gem_version
158
+ rescue Exception => e
159
+ #Invalid Gem Name / Version
160
+ return [false,"Bad gem name or version #{gem_name} #{gem_version}"]
161
+ end
162
+
163
+ #Determine what dependencies are missing
164
+ missing_deps = @gri.find_dependencies_not_installed deps[0].dependencies
165
+
166
+ #Install missing dependencies
167
+ begin
168
+ installed_deps = @gri.install_dependencies(missing_deps,true,@install_dir)
169
+ rescue Errno::EACCES => e
170
+ return [false, "Invalid permissions . . . try running w/ sudo"]
171
+ rescue Gem::FilePermissionError => e
172
+ return [false, "Invalid permissions . . . try running w/ sudo"]
173
+ rescue Exception => e
174
+ return [false,e.message]
175
+ end
176
+
177
+ return [true]
178
+
179
+ #Check that the number of missing dependencies is equal to the number installed
180
+ #if installed_deps.length == missing_deps.length
181
+ #else
182
+ #end
183
+ end
184
+
185
+
186
+ def install_gem(gem_name,gem_version)
187
+ begin
188
+ @gri.install(gem_name,gem_version,true,@install_dir)
189
+ return [true]
190
+ rescue Errno::EACCES => e
191
+ return [false, "Invalid permissions . . . try running w/ sudo"]
192
+ rescue Gem::FilePermissionError => e
193
+ return [false, "Invalid permissions... try running w/ sudo"]
194
+ rescue Exception => e
195
+ return [false,e.message]
196
+ end
197
+ end
198
+
199
+
200
+ =begin rdoc
201
+ *Name*:: check_gems
202
+ *Access*:: private
203
+ *Description*:: Checks to see if the @gems are installed, results stored in @missing_gems
204
+ *Last_Edited*:: Tue Feb 19 15:09:00 PST 2008
205
+ =end
206
+ def check_gems
207
+ @missing_gems = {}
208
+
209
+ @gems.each do |gem_name,gem_version|
210
+ gem_info = installed?(gem_name,gem_version)
211
+ @missing_gems[gem_name] = gem_version unless gem_info[:installed]
212
+ end
213
+ end
214
+
215
+ end
216
+ end
217
+ end
@@ -0,0 +1,74 @@
1
+ module RippleNetworks
2
+ module WarningShot
3
+ class TemplateGenerator
4
+ include RippleNetworks::WarningShot
5
+
6
+ def initialize(path=".")
7
+ path="." if path.nil?
8
+
9
+ #Path to installed gems templates
10
+ #template_path = %{#{@@lib_directory}/../config/warning_shot/}
11
+ template_path = %{#{DepChecker::LIB_DIRECTORY}/../config/warning_shot/}
12
+
13
+ #Make the directory if it doesnt exist
14
+ unless File.directory? path
15
+ begin
16
+ FileUtils.mkdir_p path
17
+ rescue
18
+ puts "Path does not exist and could not be created!"
19
+ end
20
+ end
21
+
22
+ DepChecker::DEP_FILES.each do |config_file|
23
+ #Source template file
24
+ source_path = %{#{template_path}#{config_file}.yml}
25
+ #destination template file
26
+ dest_path = File.join(path,%{#{config_file}.yml})
27
+ begin
28
+ unless File.exists? dest_path
29
+ FileUtils.cp source_path, dest_path
30
+ else
31
+ puts "#{dest_path} already exists!"
32
+ end
33
+ rescue Exception => e
34
+ puts "Could not copy #{config_file}.yml to #{path}"
35
+ end
36
+ end
37
+
38
+ #Make script directories
39
+ DepChecker::SCRIPTS.each do |script_type|
40
+ #Path of script folder to create
41
+ script_path = File.join(path,"scripts",script_type)
42
+ begin
43
+ FileUtils.mkdir_p script_path
44
+
45
+ begin
46
+ #Listing of installed templates
47
+ script_template_path = File.join(template_path,"scripts",script_type)
48
+ Dir.new(script_template_path).each {|script_file|
49
+
50
+ unless script_file =~ /^\./i #Dont copy hidden files
51
+ script_to_copy = File.join(path,"scripts",script_type,script_file)
52
+ unless File.exists? script_to_copy
53
+ FileUtils.cp File.join(script_template_path,script_file), script_to_copy
54
+
55
+ else
56
+ puts "#{script_to_copy} already exists!"
57
+ end
58
+ end
59
+ }
60
+ rescue Exception => e
61
+ puts "Failed to copy a script template from: #{script_template_path}"
62
+ end
63
+ rescue Exception => e
64
+ puts "Could not create: #{script_path}"
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1,23 @@
1
+
2
+ module RippleNetworks
3
+ module WarningShot
4
+ class TestScript
5
+
6
+ def TestScript.abort(child)
7
+
8
+ end
9
+
10
+ def TestScript.children
11
+ @children ||= []
12
+ end
13
+
14
+ def self.inherited(subclass)
15
+ super
16
+ ensure
17
+ children << subclass.new()
18
+ #children << subclass.name
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ #sudo rm -r ./pkg/w*; rake package;sudo gem install ./pkg/*.gem; warning-shot -h
2
+
3
+ module RippleNetworks
4
+ module WarningShot #:nodoc:
5
+ module VERSION #:nodoc:
6
+ MAJOR = 0
7
+ MINOR = 8
8
+ TINY = 9
9
+ RC = 1
10
+
11
+ STRING = [MAJOR, MINOR, TINY].join('.')
12
+ INTERNAL = %{#{STRING}-rc#{RC}}
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,34 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'rubygems'
3
+ #gem 'activerecord'
4
+ require 'fileutils'
5
+ require 'net/http'
6
+ require 'net/https'
7
+ require 'uri'
8
+
9
+
10
+ #IMPORTANT remember to add new includes to Manifest.txt
11
+ Dir.glob(File.join(File.dirname(__FILE__), "warning_shot/*.rb")).each {|f|
12
+ require f
13
+ }
14
+
15
+ include RippleNetworks::WarningShot
16
+
17
+ =begin
18
+ Useful URLS:
19
+ http://rubygems.rubyforge.org/rdoc/
20
+ http://en.wikipedia.org/wiki/ANSI_escape_code
21
+ http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html
22
+ =end
23
+
24
+ =begin
25
+ TODO
26
+ -GET RAILS/MERB connection, (via config/boot, etc) (load in begin/rescue)
27
+ = if fail, and vars present, continue
28
+ =end
29
+
30
+
31
+ =begin
32
+ sudo rm -r ./pkg/w*; sudo rake package;sudo gem install ./pkg/*.gem; warning-shot -h
33
+ sudo gem uninstall warning_shot; sudo gem install ../../WarningShot-ADC/trunk/pkg/*.gem;rm -rf ./config/warning_shot/;warning-shot --templates=./config/warning_shot;warning-shot -vfg
34
+ =end
data/log/debug.log ADDED
File without changes
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.join(File.dirname(__FILE__), '..')
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.join(File.dirname(__FILE__), '..')
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
data/script/txt2html ADDED
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ begin
5
+ require 'newgem'
6
+ rescue LoadError
7
+ puts "\n\nGenerating the website requires the newgem RubyGem"
8
+ puts "Install: gem install newgem\n\n"
9
+ exit(1)
10
+ end
11
+ require 'redcloth'
12
+ require 'syntax/convertors/html'
13
+ require 'erb'
14
+ require File.dirname(__FILE__) + '/../lib/warning_shot/version.rb'
15
+
16
+ version = RippleNetworks::WarningShot::VERSION::STRING
17
+ download = 'http://rubyforge.org/projects/warning_shot'
18
+
19
+ class Fixnum
20
+ def ordinal
21
+ # teens
22
+ return 'th' if (10..19).include?(self % 100)
23
+ # others
24
+ case self % 10
25
+ when 1: return 'st'
26
+ when 2: return 'nd'
27
+ when 3: return 'rd'
28
+ else return 'th'
29
+ end
30
+ end
31
+ end
32
+
33
+ class Time
34
+ def pretty
35
+ return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
36
+ end
37
+ end
38
+
39
+ def convert_syntax(syntax, source)
40
+ return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
41
+ end
42
+
43
+ if ARGV.length >= 1
44
+ src, template = ARGV
45
+ template ||= File.join(File.dirname(__FILE__), '/../website/template.rhtml')
46
+
47
+ else
48
+ puts("Usage: #{File.split($0).last} source.txt [template.rhtml] > output.html")
49
+ exit!
50
+ end
51
+
52
+ template = ERB.new(File.open(template).read)
53
+
54
+ title = nil
55
+ body = nil
56
+ File.open(src) do |fsrc|
57
+ title_text = fsrc.readline
58
+ body_text = fsrc.read
59
+ syntax_items = []
60
+ body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
61
+ ident = syntax_items.length
62
+ element, syntax, source = $1, $2, $3
63
+ syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
64
+ "syntax-temp-#{ident}"
65
+ }
66
+ title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
67
+ body = RedCloth.new(body_text).to_html
68
+ body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
69
+ end
70
+ stat = File.stat(src)
71
+ created = stat.ctime
72
+ modified = stat.mtime
73
+
74
+ $stdout << template.result(binding)