warbler 1.3.6 → 1.3.7
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.travis.yml +21 -8
- data/Gemfile +4 -7
- data/LICENSE.txt +1 -1
- data/README.rdoc +95 -105
- data/Rakefile +4 -3
- data/ext/JarMain.java +184 -75
- data/ext/WarMain.java +194 -65
- data/ext/WarblerJar.java +11 -1
- data/lib/warbler.rb +2 -1
- data/lib/warbler/application.rb +4 -1
- data/lib/warbler/config.rb +14 -3
- data/lib/warbler/jar.rb +10 -2
- data/lib/warbler/task.rb +7 -7
- data/lib/warbler/templates/jar.erb +3 -2
- data/lib/warbler/templates/war.erb +1 -3
- data/lib/warbler/traits/bundler.rb +11 -3
- data/lib/warbler/traits/gemspec.rb +1 -1
- data/lib/warbler/traits/jar.rb +5 -2
- data/lib/warbler/traits/nogemspec.rb +7 -2
- data/lib/warbler/traits/war.rb +13 -2
- data/lib/warbler/version.rb +1 -1
- data/lib/warbler/web_server.rb +2 -2
- data/lib/warbler_jar.jar +0 -0
- data/spec/sample_war/Rakefile +5 -1
- data/spec/sample_war/lib/ruby_one_nine.rb +8 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/warbler/application_spec.rb +5 -5
- data/spec/warbler/bundler_spec.rb +47 -20
- data/spec/warbler/config_spec.rb +3 -1
- data/spec/warbler/jar_spec.rb +25 -4
- data/spec/warbler/task_spec.rb +17 -1
- data/warble.rb +6 -2
- data/warbler.gemspec +21 -21
- metadata +286 -257
- data/Gemfile.lock +0 -41
data/lib/warbler/task.rb
CHANGED
@@ -43,7 +43,7 @@ module Warbler
|
|
43
43
|
def initialize(name = nil, config = nil)
|
44
44
|
@config = config
|
45
45
|
if @config.nil? && File.exists?(Config::FILE)
|
46
|
-
@config = eval(File.
|
46
|
+
@config = eval(File.read(Config::FILE), binding, Config::FILE, 0)
|
47
47
|
end
|
48
48
|
@config ||= Config.new
|
49
49
|
unless @config.kind_of? Config
|
@@ -162,13 +162,13 @@ module Warbler
|
|
162
162
|
|
163
163
|
def define_pluginize_task
|
164
164
|
task "pluginize" do
|
165
|
-
if !Dir["
|
166
|
-
puts "I found an old nest in
|
167
|
-
puts "(directory
|
165
|
+
if !Dir["lib/tasks/warbler*"].empty? && ENV["FORCE"].nil?
|
166
|
+
puts "I found an old nest in lib/tasks; please trash it so I can make a new one"
|
167
|
+
puts "(directory lib/tasks/warbler* exists)"
|
168
168
|
else
|
169
|
-
rm_rf FileList["
|
170
|
-
mkdir_p "
|
171
|
-
File.open("
|
169
|
+
rm_rf FileList["lib/tasks/warbler*"], :verbose => false
|
170
|
+
mkdir_p "lib/tasks/warbler"
|
171
|
+
File.open("lib/tasks/warbler/warbler.rake", "w") do |f|
|
172
172
|
f.puts "require 'warbler'"
|
173
173
|
f.puts "Warbler::Task.new"
|
174
174
|
end
|
@@ -1,7 +1,8 @@
|
|
1
|
+
<% assignment_operator = config.override_gem_home ? "=" : "||=" %>
|
1
2
|
<% if config.relative_gem_path.empty? %>
|
2
|
-
ENV['GEM_HOME']
|
3
|
+
ENV['GEM_HOME'] <%= assignment_operator %> File.expand_path('../..', __FILE__)
|
3
4
|
<% else %>
|
4
|
-
ENV['GEM_HOME']
|
5
|
+
ENV['GEM_HOME'] <%= assignment_operator %> File.expand_path('../../<%= config.relative_gem_path %>', __FILE__)
|
5
6
|
<% end %>
|
6
7
|
<% if config.bundler && config.bundler[:gemfile_path] %>
|
7
8
|
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../<%= config.bundler[:gemfile_path] %>', __FILE__)
|
@@ -1,6 +1,4 @@
|
|
1
1
|
ENV['GEM_HOME'] ||= $servlet_context.getRealPath('<%= config.gem_path %>')
|
2
2
|
<% if config.bundler && config.bundler[:gemfile_path] %>
|
3
|
-
ENV['BUNDLE_GEMFILE']
|
3
|
+
ENV['BUNDLE_GEMFILE'] ||= $servlet_context.getRealPath('/<%= config.bundler[:gemfile_path] %>')
|
4
4
|
<% end %>
|
5
|
-
|
6
|
-
|
@@ -23,7 +23,7 @@ module Warbler
|
|
23
23
|
|
24
24
|
def before_configure
|
25
25
|
config.bundler = true
|
26
|
-
config.bundle_without = ["development", "test"]
|
26
|
+
config.bundle_without = ["development", "test", "assets"]
|
27
27
|
end
|
28
28
|
|
29
29
|
def after_configure
|
@@ -41,8 +41,16 @@ module Warbler
|
|
41
41
|
# bundler gemspec from bundler/source.rb
|
42
42
|
if spec.name == "bundler"
|
43
43
|
full_gem_path = Pathname.new(spec.full_gem_path)
|
44
|
-
|
45
|
-
|
44
|
+
|
45
|
+
while !full_gem_path.join('bundler.gemspec').exist?
|
46
|
+
full_gem_path = full_gem_path.dirname
|
47
|
+
# if at top of the path, meaning we cannot find bundler.gemspec, abort.
|
48
|
+
if full_gem_path.to_s=~/^[\.\/]$/
|
49
|
+
$stderr.puts("warning: Unable to detect bundler spec under '#{spec.full_gem_path}'' and is sub-dirs")
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
46
54
|
spec.loaded_from = full_gem_path.join('bundler.gemspec').to_s
|
47
55
|
# RubyGems 1.8.x: @full_gem_path is cached, so we have to set it
|
48
56
|
def spec.full_gem_path=(p); @full_gem_path = p; end
|
@@ -49,7 +49,7 @@ module Warbler
|
|
49
49
|
if !@spec.executables.empty?
|
50
50
|
"bin/#{@spec.executables.first}"
|
51
51
|
else
|
52
|
-
exe = Dir['bin/*'].first
|
52
|
+
exe = Dir['bin/*'].sort.first
|
53
53
|
raise "No executable script found" unless exe
|
54
54
|
warn "No default executable found in #{@spec_file}, using #{exe}"
|
55
55
|
exe
|
data/lib/warbler/traits/jar.rb
CHANGED
@@ -33,8 +33,11 @@ module Warbler
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def update_archive(jar)
|
36
|
-
|
37
|
-
|
36
|
+
unless config.manifest_file
|
37
|
+
manifest = Warbler::Jar::DEFAULT_MANIFEST.chomp + "Main-Class: JarMain\n"
|
38
|
+
jar.files['META-INF/MANIFEST.MF'] = StringIO.new(manifest)
|
39
|
+
end
|
40
|
+
jar.files['JarMain.class'] = jar.entry_in_jar(WARBLER_JAR, "JarMain.class")
|
38
41
|
end
|
39
42
|
|
40
43
|
def default_pathmaps
|
@@ -33,8 +33,13 @@ module Warbler
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def default_executable
|
36
|
-
exes = Dir['bin/*']
|
37
|
-
exe = exes.grep(/#{config.jar_name}/).first
|
36
|
+
exes = Dir['bin/*'].sort
|
37
|
+
unless(exe = exes.grep(/#{config.jar_name}/).first)
|
38
|
+
exe = exes.first
|
39
|
+
if exe
|
40
|
+
warn "No executable matching config.jar_name found, using #{exe}"
|
41
|
+
end
|
42
|
+
end
|
38
43
|
raise "No executable script found" unless exe
|
39
44
|
exe
|
40
45
|
end
|
data/lib/warbler/traits/war.rb
CHANGED
@@ -77,6 +77,7 @@ module Warbler
|
|
77
77
|
add_public_files(jar)
|
78
78
|
add_webxml(jar)
|
79
79
|
move_jars_to_webinf_lib(jar)
|
80
|
+
add_runnables(jar) if config.features.include?("runnable")
|
80
81
|
add_executables(jar) if config.features.include?("executable")
|
81
82
|
add_gemjar(jar) if config.features.include?("gemjar")
|
82
83
|
end
|
@@ -99,11 +100,21 @@ module Warbler
|
|
99
100
|
end
|
100
101
|
end
|
101
102
|
|
103
|
+
def add_runnables(jar, main_class = 'WarMain')
|
104
|
+
main_class = main_class.sub('.class', '') # handles WarMain.class
|
105
|
+
unless config.manifest_file
|
106
|
+
manifest = Warbler::Jar::DEFAULT_MANIFEST.chomp + "Main-Class: #{main_class}\n"
|
107
|
+
jar.files['META-INF/MANIFEST.MF'] = StringIO.new(manifest)
|
108
|
+
end
|
109
|
+
[ 'JarMain', 'WarMain', main_class ].uniq.each do |klass|
|
110
|
+
jar.files["#{klass}.class"] = jar.entry_in_jar(WARBLER_JAR, "#{klass}.class")
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
102
114
|
def add_executables(jar)
|
103
115
|
webserver = WEB_SERVERS[config.webserver.to_s]
|
104
116
|
webserver.add(jar)
|
105
|
-
jar
|
106
|
-
jar.files['WarMain.class'] = jar.entry_in_jar("#{WARBLER_HOME}/lib/warbler_jar.jar", webserver.main_class)
|
117
|
+
add_runnables jar, webserver.main_class || 'WarMain'
|
107
118
|
end
|
108
119
|
|
109
120
|
def add_gemjar(jar)
|
data/lib/warbler/version.rb
CHANGED
data/lib/warbler/web_server.rb
CHANGED
@@ -65,9 +65,9 @@ PROPS
|
|
65
65
|
|
66
66
|
class JenkinsWinstoneServer < WinstoneServer
|
67
67
|
def initialize
|
68
|
-
@artifact = Artifact.new("http://
|
68
|
+
@artifact = Artifact.new("http://repo.jenkins-ci.org/public",
|
69
69
|
"org.jenkins-ci", "winstone",
|
70
|
-
ENV["WEBSERVER_VERSION"] || "0.9.10-jenkins-
|
70
|
+
ENV["WEBSERVER_VERSION"] || "0.9.10-jenkins-43")
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
data/lib/warbler_jar.jar
CHANGED
Binary file
|
data/spec/sample_war/Rakefile
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -15,7 +15,7 @@ raise %{Error: detected running Warbler specs in a Rails app;
|
|
15
15
|
Warbler specs are destructive to application directories.} if File.directory?("app")
|
16
16
|
|
17
17
|
require 'rbconfig'
|
18
|
-
RUBY_EXE = File.join
|
18
|
+
RUBY_EXE = File.join RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name']
|
19
19
|
|
20
20
|
require 'fileutils'
|
21
21
|
require 'stringio'
|
@@ -26,7 +26,7 @@ describe Warbler::Application do
|
|
26
26
|
Warbler.application = nil
|
27
27
|
Warbler.framework_detection = @detection
|
28
28
|
@argv.reverse.each {|a| ARGV.unshift a}
|
29
|
-
rm_rf FileList['
|
29
|
+
rm_rf FileList['lib/tasks/warbler']
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should be able to list its tasks" do
|
@@ -67,17 +67,17 @@ describe Warbler::Application do
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
it "should refuse to pluginize if the
|
71
|
-
mkdir_p "
|
70
|
+
it "should refuse to pluginize if the lib/tasks/warbler directory exists" do
|
71
|
+
mkdir_p "lib/tasks/warbler"
|
72
72
|
ARGV.unshift "pluginize"
|
73
73
|
silence { Warbler::Application.new.run }
|
74
|
-
File.exist?("
|
74
|
+
File.exist?("lib/tasks/warbler/warbler.rake").should_not be_true
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should define a pluginize task for adding the tasks to a Rails application" do
|
78
78
|
ARGV.unshift "pluginize"
|
79
79
|
silence { Warbler::Application.new.run }
|
80
|
-
File.exist?("
|
80
|
+
File.exist?("lib/tasks/warbler/warbler.rake").should be_true
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should provide a means to load the project Rakefile" do
|
@@ -20,6 +20,15 @@ describe Warbler::Jar, "with Bundler" do
|
|
20
20
|
@extra_config = block
|
21
21
|
end
|
22
22
|
|
23
|
+
def hide_shallow_git_clone
|
24
|
+
git_shallow_marker = File.join(Warbler::WARBLER_HOME, ".git/shallow")
|
25
|
+
tmp_marker = File.join(Warbler::WARBLER_HOME, ".git/shallow.tmp")
|
26
|
+
File.rename(git_shallow_marker, tmp_marker) if File.exists?(git_shallow_marker)
|
27
|
+
yield
|
28
|
+
ensure
|
29
|
+
File.rename(tmp_marker, git_shallow_marker) if File.exist?(tmp_marker)
|
30
|
+
end
|
31
|
+
|
23
32
|
let(:config) { drbclient.config(@extra_config) }
|
24
33
|
let(:jar) { drbclient.jar }
|
25
34
|
|
@@ -61,19 +70,23 @@ describe Warbler::Jar, "with Bundler" do
|
|
61
70
|
end
|
62
71
|
|
63
72
|
it "works with :git entries in Gemfiles" do
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
73
|
+
hide_shallow_git_clone do
|
74
|
+
File.open("Gemfile", "w") {|f| f << "gem 'warbler', :git => '#{Warbler::WARBLER_HOME}'\n"}
|
75
|
+
`#{RUBY_EXE} -S bundle install --local`
|
76
|
+
jar.apply(config)
|
77
|
+
file_list(%r{WEB-INF/gems/bundler/gems/warbler[^/]*/lib/warbler/version\.rb}).should_not be_empty
|
78
|
+
file_list(%r{WEB-INF/gems/bundler/gems/warbler[^/]*/warbler.gemspec}).should_not be_empty
|
79
|
+
end
|
69
80
|
end
|
70
81
|
|
71
82
|
it "bundles only the gemspec for :git entries that are excluded" do
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
83
|
+
hide_shallow_git_clone do
|
84
|
+
File.open("Gemfile", "w") {|f| f << "gem 'rake'\ngroup :test do\ngem 'warbler', :git => '#{Warbler::WARBLER_HOME}'\nend\n"}
|
85
|
+
`#{RUBY_EXE} -S bundle install --local`
|
86
|
+
jar.apply(config)
|
87
|
+
file_list(%r{WEB-INF/gems/bundler/gems/warbler[^/]*/lib/warbler/version\.rb}).should be_empty
|
88
|
+
file_list(%r{WEB-INF/gems/bundler/gems/warbler[^/]*/warbler.gemspec}).should_not be_empty
|
89
|
+
end
|
77
90
|
end
|
78
91
|
|
79
92
|
it "does not work with :path entries in Gemfiles" do
|
@@ -96,13 +109,13 @@ describe Warbler::Jar, "with Bundler" do
|
|
96
109
|
jar.add_init_file(config)
|
97
110
|
contents = jar.contents('META-INF/init.rb')
|
98
111
|
contents.should =~ /ENV\['BUNDLE_WITHOUT'\]/
|
99
|
-
contents.should =~ /'development:test'/
|
112
|
+
contents.should =~ /'development:test:assets'/
|
100
113
|
end
|
101
114
|
|
102
115
|
it "adds BUNDLE_GEMFILE to init.rb" do
|
103
116
|
jar.add_init_file(config)
|
104
117
|
contents = jar.contents('META-INF/init.rb')
|
105
|
-
contents.should =~ Regexp.new(Regexp.quote("ENV['BUNDLE_GEMFILE']
|
118
|
+
contents.should =~ Regexp.new(Regexp.quote("ENV['BUNDLE_GEMFILE'] ||= $servlet_context.getRealPath('/WEB-INF/Gemfile')"))
|
106
119
|
end
|
107
120
|
|
108
121
|
it "uses ENV['BUNDLE_GEMFILE'] if set" do
|
@@ -117,14 +130,16 @@ describe Warbler::Jar, "with Bundler" do
|
|
117
130
|
cleanup_temp_files
|
118
131
|
|
119
132
|
it "works with :git entries in Gemfiles" do
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
133
|
+
hide_shallow_git_clone do
|
134
|
+
File.open("Gemfile", "w") {|f| f << "gem 'warbler', :git => '#{Warbler::WARBLER_HOME}'\n"}
|
135
|
+
`#{RUBY_EXE} -S bundle install --local`
|
136
|
+
jar.apply(config)
|
137
|
+
file_list(%r{^bundler/gems/warbler[^/]*/lib/warbler/version\.rb}).should_not be_empty
|
138
|
+
file_list(%r{^bundler/gems/warbler[^/]*/warbler.gemspec}).should_not be_empty
|
139
|
+
jar.add_init_file(config)
|
140
|
+
contents = jar.contents('META-INF/init.rb')
|
141
|
+
contents.should =~ /ENV\['BUNDLE_GEMFILE'\] = File.expand_path(.*, __FILE__)/
|
142
|
+
end
|
128
143
|
end
|
129
144
|
|
130
145
|
it "adds BUNDLE_GEMFILE to init.rb" do
|
@@ -155,4 +170,16 @@ describe Warbler::Jar, "with Bundler" do
|
|
155
170
|
contents.split("\n").grep(/ENV\['BUNDLE_FROZEN'\] = '1'/).should_not be_empty
|
156
171
|
end
|
157
172
|
end
|
173
|
+
|
174
|
+
context "when deployment" do
|
175
|
+
run_in_directory "spec/sample_bundler"
|
176
|
+
|
177
|
+
it "includes the bundler gem" do
|
178
|
+
`#{RUBY_EXE} -S bundle install --deployment`
|
179
|
+
jar.apply(config)
|
180
|
+
file_list(%r{gems/rake-0.8.7/lib}).should_not be_empty
|
181
|
+
file_list(%r{gems/bundler-}).should_not be_empty
|
182
|
+
file_list(%r{gems/bundler-.*/lib}).should_not be_empty
|
183
|
+
end
|
184
|
+
end
|
158
185
|
end
|
data/spec/warbler/config_spec.rb
CHANGED
@@ -19,6 +19,7 @@ describe Warbler::Config do
|
|
19
19
|
config = Warbler::Config.new
|
20
20
|
config.includes.should be_empty
|
21
21
|
config.jar_name.size.should > 0
|
22
|
+
config.override_gem_home.should be_false
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
@@ -32,12 +33,13 @@ describe Warbler::Config do
|
|
32
33
|
it "should have suitable default values" do
|
33
34
|
config = Warbler::Config.new
|
34
35
|
config.dirs.should include(*Warbler::Config::TOP_DIRS.select{|d| File.directory?(d)})
|
35
|
-
config.
|
36
|
+
config.excludes.should be_empty
|
36
37
|
config.java_libs.should_not be_empty
|
37
38
|
config.jar_name.size.should > 0
|
38
39
|
config.webxml.should be_kind_of(OpenStruct)
|
39
40
|
config.pathmaps.should be_kind_of(OpenStruct)
|
40
41
|
config.pathmaps.public_html.should == ["%{public/,}p"]
|
42
|
+
config.override_gem_home.should be_false
|
41
43
|
end
|
42
44
|
|
43
45
|
it "should allow configuration through an initializer block" do
|
data/spec/warbler/jar_spec.rb
CHANGED
@@ -55,10 +55,17 @@ describe Warbler::Jar do
|
|
55
55
|
contents.split("\n").grep(/require 'rubygems'/).should_not be_empty
|
56
56
|
end
|
57
57
|
|
58
|
-
it "
|
58
|
+
it "does not override ENV['GEM_HOME'] by default" do
|
59
59
|
jar.add_init_file(config)
|
60
60
|
contents = jar.contents('META-INF/init.rb')
|
61
|
-
contents.should =~
|
61
|
+
contents.should =~ %r{ENV['GEM_HOME'] ||=}
|
62
|
+
end
|
63
|
+
|
64
|
+
it "overrides ENV['GEM_HOME'] when override_gem_home is set" do
|
65
|
+
config.override_gem_home = true
|
66
|
+
jar.add_init_file(config)
|
67
|
+
contents = jar.contents('META-INF/init.rb')
|
68
|
+
contents.should =~ /ENV\['GEM_HOME'\] =/
|
62
69
|
end
|
63
70
|
|
64
71
|
it "adds a main.rb" do
|
@@ -137,7 +144,7 @@ describe Warbler::Jar do
|
|
137
144
|
jar.compile(config)
|
138
145
|
jar.apply(config)
|
139
146
|
file_list(%r{^sample_jar/lib/sample_jar\.class$}).should_not be_empty
|
140
|
-
jar.contents('sample_jar/lib/sample_jar.rb').should =~ /
|
147
|
+
jar.contents('sample_jar/lib/sample_jar.rb').should =~ /load __FILE__\.sub/
|
141
148
|
end
|
142
149
|
end
|
143
150
|
|
@@ -475,16 +482,30 @@ describe Warbler::Jar do
|
|
475
482
|
context "with the executable feature" do
|
476
483
|
use_test_webserver
|
477
484
|
|
478
|
-
it "adds
|
485
|
+
it "adds WarMain (and JarMain) class" do
|
479
486
|
use_config do |config|
|
480
487
|
config.webserver = "test"
|
481
488
|
config.features << "executable"
|
482
489
|
end
|
483
490
|
jar.apply(config)
|
484
491
|
file_list(%r{^WarMain\.class$}).should_not be_empty
|
492
|
+
file_list(%r{^JarMain\.class$}).should_not be_empty
|
485
493
|
end
|
486
494
|
end
|
487
495
|
|
496
|
+
context "with the runnable feature" do
|
497
|
+
|
498
|
+
it "adds WarMain (and JarMain) class" do
|
499
|
+
use_config do |config|
|
500
|
+
config.features << "runnable"
|
501
|
+
end
|
502
|
+
jar.apply(config)
|
503
|
+
file_list(%r{^WarMain\.class$}).should_not be_empty
|
504
|
+
file_list(%r{^JarMain\.class$}).should_not be_empty
|
505
|
+
end
|
506
|
+
|
507
|
+
end
|
508
|
+
|
488
509
|
context "in a Rails application" do
|
489
510
|
before :each do
|
490
511
|
@rails = nil
|
data/spec/warbler/task_spec.rb
CHANGED
@@ -105,7 +105,23 @@ describe Warbler::Task do
|
|
105
105
|
ruby_class_definition = zf.get_input_stream('WEB-INF/app/helpers/application_helper.rb') {|io| io.read }
|
106
106
|
|
107
107
|
java_class_header.should == java_class_magic_number
|
108
|
-
ruby_class_definition.should == %{
|
108
|
+
ruby_class_definition.should == %{load __FILE__.sub(/.rb$/, '.class')}
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should compile ruby 1.9 mode" do
|
113
|
+
config.features << "compiled"
|
114
|
+
config.webxml.jruby.compat.version = '1.9'
|
115
|
+
silence { run_task "warble" }
|
116
|
+
|
117
|
+
java_class_magic_number = [0xCA,0xFE,0xBA,0xBE].map { |magic_char| magic_char.chr }.join
|
118
|
+
|
119
|
+
Zip::ZipFile.open("#{config.jar_name}.war") do |zf|
|
120
|
+
java_class_header = zf.get_input_stream('WEB-INF/lib/ruby_one_nine.class') {|io| io.read }[0..3]
|
121
|
+
ruby_class_definition = zf.get_input_stream('WEB-INF/lib/ruby_one_nine.rb') {|io| io.read }
|
122
|
+
|
123
|
+
java_class_header.should == java_class_magic_number
|
124
|
+
ruby_class_definition.should == %{load __FILE__.sub(/.rb$/, '.class')}
|
109
125
|
end
|
110
126
|
end
|
111
127
|
|