warning-shot 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
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)