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.
- data/History.txt +8 -0
- data/License.txt +24 -0
- data/Manifest.txt +44 -0
- data/README.txt +65 -0
- data/Rakefile +4 -0
- data/bin/warning-shot +74 -0
- data/config/hoe.rb +71 -0
- data/config/requirements.rb +17 -0
- data/config/warning_shot/binaries.yml +10 -0
- data/config/warning_shot/classes.yml +12 -0
- data/config/warning_shot/filesystem.yml +8 -0
- data/config/warning_shot/gems.yml +15 -0
- data/config/warning_shot/preload.yml +10 -0
- data/config/warning_shot/scripts/ruby/example.rb +19 -0
- data/config/warning_shot/scripts/ruby/post.rb +18 -0
- data/config/warning_shot/scripts/ruby/post_example.rb +18 -0
- data/config/warning_shot/scripts/ruby/pre.rb +18 -0
- data/config/warning_shot/scripts/ruby/pre_example.rb +19 -0
- data/config/warning_shot/scripts/shell/pre.sh +0 -0
- data/config/warning_shot/urls.yml +9 -0
- data/images/ruby_fail.png +0 -0
- data/images/ruby_ok.png +0 -0
- data/lib/warning_shot/config_parser.rb +46 -0
- data/lib/warning_shot/dep_checker.rb +584 -0
- data/lib/warning_shot/gem_handler.rb +217 -0
- data/lib/warning_shot/template_generator.rb +74 -0
- data/lib/warning_shot/test_script.rb +23 -0
- data/lib/warning_shot/version.rb +15 -0
- data/lib/warning_shot.rb +34 -0
- data/log/debug.log +0 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/test_helper.rb +2 -0
- data/test/test_warning_shot.rb +11 -0
- data/website/index.html +93 -0
- data/website/index.txt +39 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.rhtml +48 -0
- 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
|
data/lib/warning_shot.rb
ADDED
@@ -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)
|