warbler 1.2.1 → 1.3.0.beta1
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/Gemfile +8 -5
- data/History.txt +5 -0
- data/Manifest.txt +43 -23
- data/README.txt +67 -26
- data/Rakefile +17 -6
- data/ext/JarMain.java +147 -0
- data/ext/{Main.java → WarMain.java} +4 -4
- data/ext/{WarblerWar.java → WarblerJar.java} +79 -13
- data/ext/{WarblerWarService.java → WarblerJarService.java} +2 -2
- data/lib/warbler/application.rb +9 -9
- data/lib/warbler/config.rb +58 -204
- data/lib/warbler/gems.rb +2 -2
- data/lib/warbler/jar.rb +247 -0
- data/lib/warbler/task.rb +28 -60
- data/lib/warbler/templates/config.erb +1 -1
- data/lib/warbler/templates/rack.erb +1 -1
- data/lib/warbler/templates/rails.erb +1 -1
- data/lib/warbler/traits/bundler.rb +58 -0
- data/lib/warbler/traits/gemspec.rb +64 -0
- data/lib/warbler/traits/jar.rb +53 -0
- data/lib/warbler/traits/merb.rb +34 -0
- data/lib/warbler/traits/nogemspec.rb +41 -0
- data/lib/warbler/traits/rack.rb +31 -0
- data/lib/warbler/traits/rails.rb +57 -0
- data/lib/warbler/traits/war.rb +191 -0
- data/lib/warbler/traits.rb +105 -0
- data/lib/warbler/version.rb +1 -1
- data/lib/warbler/war.rb +1 -247
- data/lib/warbler.rb +2 -5
- data/lib/warbler_jar.jar +0 -0
- data/spec/sample_jar/History.txt +6 -0
- data/spec/sample_jar/Manifest.txt +8 -0
- data/spec/sample_jar/README.txt +30 -0
- data/spec/sample_jar/lib/sample_jar.rb +6 -0
- data/spec/sample_jar/sample_jar.gemspec +41 -0
- data/spec/sample_jar/test/test_sample_jar.rb +8 -0
- data/spec/{sample → sample_war}/app/controllers/application.rb +0 -0
- data/spec/{sample → sample_war}/app/helpers/application_helper.rb +0 -0
- data/spec/{sample → sample_war}/config/boot.rb +0 -0
- data/spec/{sample → sample_war}/config/database.yml +0 -0
- data/spec/{sample → sample_war}/config/environment.rb +0 -0
- data/spec/{sample → sample_war}/config/environments/development.rb +0 -0
- data/spec/{sample → sample_war}/config/environments/production.rb +0 -0
- data/spec/{sample → sample_war}/config/environments/test.rb +0 -0
- data/spec/{sample → sample_war}/config/initializers/inflections.rb +0 -0
- data/spec/{sample → sample_war}/config/initializers/mime_types.rb +0 -0
- data/spec/{sample → sample_war}/config/initializers/new_rails_defaults.rb +0 -0
- data/spec/{sample → sample_war}/config/routes.rb +0 -0
- data/spec/{sample → sample_war}/lib/tasks/utils.rake +0 -0
- data/spec/{sample → sample_war}/public/404.html +0 -0
- data/spec/{sample → sample_war}/public/422.html +0 -0
- data/spec/{sample → sample_war}/public/500.html +0 -0
- data/spec/{sample → sample_war}/public/favicon.ico +0 -0
- data/spec/{sample → sample_war}/public/index.html +0 -0
- data/spec/{sample → sample_war}/public/robots.txt +0 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/warbler/application_spec.rb +2 -9
- data/spec/warbler/config_spec.rb +101 -83
- data/spec/warbler/jar_spec.rb +763 -0
- data/spec/warbler/task_spec.rb +56 -41
- data/spec/warbler/traits_spec.rb +16 -0
- data/spec/warbler/war_spec.rb +2 -492
- data/warble.rb +36 -32
- metadata +57 -35
- data/lib/warbler_war.jar +0 -0
data/spec/warbler/war_spec.rb
CHANGED
@@ -7,497 +7,7 @@
|
|
7
7
|
require File.dirname(__FILE__) + '/../spec_helper'
|
8
8
|
|
9
9
|
describe Warbler::War do
|
10
|
-
|
11
|
-
|
12
|
-
Rake.application = @rake
|
13
|
-
verbose(false)
|
14
|
-
@pwd = Dir.getwd
|
15
|
-
Dir.chdir("spec/sample")
|
16
|
-
mkdir_p "log"
|
17
|
-
touch "log/test.log"
|
18
|
-
@config = Warbler::Config.new do |config|
|
19
|
-
config.war_name = "warbler"
|
20
|
-
config.gems = ["rake"]
|
21
|
-
config.webxml.jruby.max.runtimes = 5
|
22
|
-
end rescue nil
|
23
|
-
@war = Warbler::War.new
|
24
|
-
@env_save = {}
|
25
|
-
(ENV.keys.grep(/BUNDLE/) + ["RUBYOPT", "GEM_PATH"]).each {|k| @env_save[k] = ENV[k]; ENV[k] = nil}
|
26
|
-
end
|
27
|
-
|
28
|
-
after(:each) do
|
29
|
-
rm_rf FileList["log", ".bundle", "tmp/war"]
|
30
|
-
rm_f FileList["*.war", "config.ru", "*web.xml*", "config/web.xml*", "config/warble.rb",
|
31
|
-
"file.txt", 'manifest', 'Gemfile*', 'MANIFEST.MF*', 'init.rb*']
|
32
|
-
Dir.chdir(@pwd)
|
33
|
-
@env_save.keys.each {|k| ENV[k] = @env_save[k]}
|
34
|
-
end
|
35
|
-
|
36
|
-
def file_list(regex)
|
37
|
-
@war.files.keys.select {|f| f =~ regex }
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should collect files in public" do
|
41
|
-
@war.apply(@config)
|
42
|
-
file_list(%r{^index\.html}).should_not be_empty
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should collect gem files" do
|
46
|
-
@config.gems << "rake"
|
47
|
-
@war.apply(@config)
|
48
|
-
file_list(%r{WEB-INF/gems/gems/rake.*/lib/rake.rb}).should_not be_empty
|
49
|
-
file_list(%r{WEB-INF/gems/specifications/rake.*\.gemspec}).should_not be_empty
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should not include log files by default" do
|
53
|
-
@war.apply(@config)
|
54
|
-
file_list(%r{WEB-INF/log}).should_not be_empty
|
55
|
-
file_list(%r{WEB-INF/log/.*\.log}).should be_empty
|
56
|
-
end
|
57
|
-
|
58
|
-
def expand_webxml
|
59
|
-
@war.apply(@config)
|
60
|
-
@war.files.should include("WEB-INF/web.xml")
|
61
|
-
require 'rexml/document'
|
62
|
-
REXML::Document.new(@war.files["WEB-INF/web.xml"]).root.elements
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should create a web.xml file" do
|
66
|
-
elements = expand_webxml
|
67
|
-
elements.to_a(
|
68
|
-
"context-param/param-name[text()='jruby.max.runtimes']"
|
69
|
-
).should_not be_empty
|
70
|
-
elements.to_a(
|
71
|
-
"context-param/param-name[text()='jruby.max.runtimes']/../param-value"
|
72
|
-
).first.text.should == "5"
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should include custom context parameters in web.xml" do
|
76
|
-
@config.webxml.some.custom.config = "myconfig"
|
77
|
-
elements = expand_webxml
|
78
|
-
elements.to_a(
|
79
|
-
"context-param/param-name[text()='some.custom.config']"
|
80
|
-
).should_not be_empty
|
81
|
-
elements.to_a(
|
82
|
-
"context-param/param-name[text()='some.custom.config']/../param-value"
|
83
|
-
).first.text.should == "myconfig"
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should allow one jndi resource to be included" do
|
87
|
-
@config.webxml.jndi = 'jndi/rails'
|
88
|
-
elements = expand_webxml
|
89
|
-
elements.to_a(
|
90
|
-
"resource-ref/res-ref-name[text()='jndi/rails']"
|
91
|
-
).should_not be_empty
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should allow multiple jndi resources to be included" do
|
95
|
-
@config.webxml.jndi = ['jndi/rails1', 'jndi/rails2']
|
96
|
-
elements = expand_webxml
|
97
|
-
elements.to_a(
|
98
|
-
"resource-ref/res-ref-name[text()='jndi/rails1']"
|
99
|
-
).should_not be_empty
|
100
|
-
elements.to_a(
|
101
|
-
"resource-ref/res-ref-name[text()='jndi/rails2']"
|
102
|
-
).should_not be_empty
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should not include any ignored context parameters" do
|
106
|
-
@config.webxml.foo = "bar"
|
107
|
-
@config.webxml.ignored << "foo"
|
108
|
-
elements = expand_webxml
|
109
|
-
elements.to_a(
|
110
|
-
"context-param/param-name[text()='foo']"
|
111
|
-
).should be_empty
|
112
|
-
elements.to_a(
|
113
|
-
"context-param/param-name[text()='ignored']"
|
114
|
-
).should be_empty
|
115
|
-
elements.to_a(
|
116
|
-
"context-param/param-name[text()='jndi']"
|
117
|
-
).should be_empty
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should use a config/web.xml if it exists" do
|
121
|
-
mkdir_p "config"
|
122
|
-
touch "config/web.xml"
|
123
|
-
@war.apply(Warbler::Config.new)
|
124
|
-
@war.files["WEB-INF/web.xml"].should == "config/web.xml"
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should use a config/web.xml.erb if it exists" do
|
128
|
-
mkdir_p "config"
|
129
|
-
File.open("config/web.xml.erb", "w") {|f| f << "Hi <%= webxml.public.root %>" }
|
130
|
-
@war.apply(Warbler::Config.new)
|
131
|
-
@war.files["WEB-INF/web.xml"].should_not be_nil
|
132
|
-
@war.files["WEB-INF/web.xml"].read.should == "Hi /"
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should collect java libraries" do
|
136
|
-
@war.apply(@config)
|
137
|
-
file_list(%r{WEB-INF/lib/jruby-.*\.jar$}).should_not be_empty
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should collect application files" do
|
141
|
-
@war.apply(@config)
|
142
|
-
file_list(%r{WEB-INF/app$}).should_not be_empty
|
143
|
-
file_list(%r{WEB-INF/config$}).should_not be_empty
|
144
|
-
file_list(%r{WEB-INF/lib$}).should_not be_empty
|
145
|
-
end
|
146
|
-
|
147
|
-
it "should accept an autodeploy directory where the war should be created" do
|
148
|
-
require 'tmpdir'
|
149
|
-
@config.autodeploy_dir = Dir::tmpdir
|
150
|
-
touch "file.txt"
|
151
|
-
@war.files["file.txt"] = "file.txt"
|
152
|
-
silence { @war.create(@config) }
|
153
|
-
File.exist?(File.join("#{Dir::tmpdir}","warbler.war")).should == true
|
154
|
-
end
|
155
|
-
|
156
|
-
it "should accept a custom manifest file" do
|
157
|
-
touch 'manifest'
|
158
|
-
@config.manifest_file = 'manifest'
|
159
|
-
@war.apply(@config)
|
160
|
-
@war.files['META-INF/MANIFEST.MF'].should == "manifest"
|
161
|
-
end
|
162
|
-
|
163
|
-
it "should not add a manifest if one already exists" do
|
164
|
-
@war.files['META-INF/MANIFEST.MF'] = 'manifest'
|
165
|
-
@war.add_manifest(@config)
|
166
|
-
@war.files['META-INF/MANIFEST.MF'].should == "manifest"
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should be able to exclude files from the .war" do
|
170
|
-
@config.excludes += FileList['lib/tasks/utils.rake']
|
171
|
-
@war.apply(@config)
|
172
|
-
file_list(%r{lib/tasks/utils.rake}).should be_empty
|
173
|
-
end
|
174
|
-
|
175
|
-
it "should read configuration from #{Warbler::Config::FILE}" do
|
176
|
-
mkdir_p "config"
|
177
|
-
File.open(Warbler::Config::FILE, "w") do |dest|
|
178
|
-
contents =
|
179
|
-
File.open("#{Warbler::WARBLER_HOME}/warble.rb") do |src|
|
180
|
-
src.read
|
181
|
-
end
|
182
|
-
dest << contents.sub(/# config\.war_name/, 'config.war_name'
|
183
|
-
).sub(/# config.gems << "tzinfo"/, 'config.gems = []')
|
184
|
-
end
|
185
|
-
t = Warbler::Task.new "warble"
|
186
|
-
t.config.war_name.should == "mywar"
|
187
|
-
end
|
188
|
-
|
189
|
-
it "should fail if a gem is requested that is not installed" do
|
190
|
-
@config.gems = ["nonexistent-gem"]
|
191
|
-
lambda {
|
192
|
-
Warbler::Task.new "warble", @config
|
193
|
-
@war.apply(@config)
|
194
|
-
}.should raise_error
|
195
|
-
end
|
196
|
-
|
197
|
-
it "should allow specification of dependency by Gem::Dependency" do
|
198
|
-
spec = mock "gem spec"
|
199
|
-
spec.stub!(:full_name).and_return "hpricot-0.6.157"
|
200
|
-
spec.stub!(:full_gem_path).and_return "hpricot-0.6.157"
|
201
|
-
spec.stub!(:loaded_from).and_return "hpricot.gemspec"
|
202
|
-
spec.stub!(:files).and_return ["Rakefile"]
|
203
|
-
spec.stub!(:dependencies).and_return []
|
204
|
-
Gem.source_index.should_receive(:search).and_return do |gem|
|
205
|
-
gem.name.should == "hpricot"
|
206
|
-
[spec]
|
207
|
-
end
|
208
|
-
@config.gems = [Gem::Dependency.new("hpricot", "> 0.6")]
|
209
|
-
@war.apply(@config)
|
210
|
-
end
|
211
|
-
|
212
|
-
it "should copy loose java classes to WEB-INF/classes" do
|
213
|
-
@config.java_classes = FileList["Rakefile"]
|
214
|
-
@war.apply(@config)
|
215
|
-
file_list(%r{WEB-INF/classes/Rakefile$}).should_not be_empty
|
216
|
-
end
|
217
|
-
|
218
|
-
def mock_rails_module
|
219
|
-
rails = Module.new
|
220
|
-
Object.const_set("Rails", rails)
|
221
|
-
version = Module.new
|
222
|
-
rails.const_set("VERSION", version)
|
223
|
-
version.const_set("STRING", "2.1.0")
|
224
|
-
rails
|
225
|
-
end
|
226
|
-
|
227
|
-
def mock_merb_module
|
228
|
-
merb = Module.new
|
229
|
-
silence { Object.const_set("Merb", merb) }
|
230
|
-
boot_loader = Module.new
|
231
|
-
merb.const_set("BootLoader", boot_loader)
|
232
|
-
merb.const_set("VERSION", "1.0")
|
233
|
-
dependencies = Class.new do
|
234
|
-
@@dependencies = []
|
235
|
-
def self.dependencies
|
236
|
-
@@dependencies
|
237
|
-
end
|
238
|
-
def self.dependencies=(deps)
|
239
|
-
@@dependencies = deps
|
240
|
-
end
|
241
|
-
end
|
242
|
-
boot_loader.const_set("Dependencies", dependencies)
|
243
|
-
dependencies
|
244
|
-
end
|
245
|
-
|
246
|
-
it "should auto-detect a Rails application" do
|
247
|
-
task :environment do
|
248
|
-
mock_rails_module
|
249
|
-
end
|
250
|
-
@config = Warbler::Config.new
|
251
|
-
@config.webxml.booter.should == :rails
|
252
|
-
@config.gems["rails"].should == "2.1.0"
|
253
|
-
end
|
254
|
-
|
255
|
-
it "should provide Rails gems by default, unless vendor/rails is present" do
|
256
|
-
rails = nil
|
257
|
-
task :environment do
|
258
|
-
rails = mock_rails_module
|
259
|
-
end
|
260
|
-
|
261
|
-
config = Warbler::Config.new
|
262
|
-
config.gems.should have_key("rails")
|
263
|
-
|
264
|
-
mkdir_p "vendor/rails"
|
265
|
-
config = Warbler::Config.new
|
266
|
-
config.gems.should be_empty
|
267
|
-
|
268
|
-
rm_rf "vendor/rails"
|
269
|
-
rails.stub!(:vendor_rails?).and_return true
|
270
|
-
config = Warbler::Config.new
|
271
|
-
config.gems.should be_empty
|
272
|
-
end
|
273
|
-
|
274
|
-
it "should not try to autodetect frameworks when Warbler.framework_detection is false" do
|
275
|
-
begin
|
276
|
-
Warbler.framework_detection = false
|
277
|
-
task :environment
|
278
|
-
config = Warbler::Config.new
|
279
|
-
config.webxml.booter.should_not == :rails
|
280
|
-
t = Rake::Task['environment']
|
281
|
-
class << t; public :instance_variable_get; end
|
282
|
-
t.instance_variable_get("@already_invoked").should == false
|
283
|
-
ensure
|
284
|
-
Warbler.framework_detection = true
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
it "should auto-detect a Merb application" do
|
289
|
-
task :merb_env do
|
290
|
-
mock_merb_module
|
291
|
-
end
|
292
|
-
@config = Warbler::Config.new
|
293
|
-
@config.webxml.booter.should == :merb
|
294
|
-
@config.gems.keys.should_not include("rails")
|
295
|
-
end
|
296
|
-
|
297
|
-
it "should auto-detect a Rack application with a config.ru file" do
|
298
|
-
rackup = "run Proc.new {|env| [200, {}, ['Hello World']]}"
|
299
|
-
File.open("config.ru", "w") {|f| f << rackup }
|
300
|
-
@config = Warbler::Config.new
|
301
|
-
@war.apply(@config)
|
302
|
-
@war.files['WEB-INF/config.ru'].should == 'config.ru'
|
303
|
-
end
|
304
|
-
|
305
|
-
it "should automatically add Rails.configuration.gems to the list of gems" do
|
306
|
-
task :environment do
|
307
|
-
rails = mock_rails_module
|
308
|
-
config = mock "config"
|
309
|
-
rails.stub!(:configuration).and_return(config)
|
310
|
-
gem = mock "gem"
|
311
|
-
gem.stub!(:name).and_return "hpricot"
|
312
|
-
gem.stub!(:requirement).and_return Gem::Requirement.new("=0.6")
|
313
|
-
config.stub!(:gems).and_return [gem]
|
314
|
-
end
|
315
|
-
|
316
|
-
@config = Warbler::Config.new
|
317
|
-
@config.webxml.booter.should == :rails
|
318
|
-
@config.gems.keys.should include(Gem::Dependency.new("hpricot", Gem::Requirement.new("=0.6")))
|
319
|
-
end
|
320
|
-
|
321
|
-
it "should automatically add Merb::BootLoader::Dependencies.dependencies to the list of gems" do
|
322
|
-
task :merb_env do
|
323
|
-
deps = mock_merb_module
|
324
|
-
deps.dependencies = [Gem::Dependency.new("merb-core", ">= 1.0.6.1")]
|
325
|
-
end
|
326
|
-
@config = Warbler::Config.new
|
327
|
-
@config.webxml.booter.should == :merb
|
328
|
-
@config.gems.keys.should include(Gem::Dependency.new("merb-core", ">= 1.0.6.1"))
|
329
|
-
end
|
330
|
-
|
331
|
-
it "should skip Merb development dependencies" do
|
332
|
-
task :merb_env do
|
333
|
-
deps = mock_merb_module
|
334
|
-
deps.dependencies = [Gem::Dependency.new("rake", "= #{RAKEVERSION}", :development)]
|
335
|
-
end
|
336
|
-
@war.apply(Warbler::Config.new)
|
337
|
-
file_list(/rake-#{RAKEVERSION}/).should be_empty
|
338
|
-
end
|
339
|
-
|
340
|
-
it "should warn about using Merb < 1.0" do
|
341
|
-
task :merb_env do
|
342
|
-
silence { Object.const_set("Merb", Module.new) }
|
343
|
-
end
|
344
|
-
@config = silence { Warbler::Config.new }
|
345
|
-
@config.webxml.booter.should == :merb
|
346
|
-
end
|
347
|
-
|
348
|
-
it "should set the jruby max runtimes to 1 when MT Rails is detected" do
|
349
|
-
task :environment do
|
350
|
-
rails = mock_rails_module
|
351
|
-
config = mock "config"
|
352
|
-
rails.stub!(:configuration).and_return(config)
|
353
|
-
config.stub!(:threadsafe!)
|
354
|
-
config.should_receive(:allow_concurrency).and_return true
|
355
|
-
config.should_receive(:preload_frameworks).and_return true
|
356
|
-
end
|
357
|
-
@config = Warbler::Config.new
|
358
|
-
@config.webxml.booter.should == :rails
|
359
|
-
@config.webxml.jruby.max.runtimes.should == 1
|
360
|
-
end
|
361
|
-
|
362
|
-
it "should skip directories that don't exist in config.dirs and print a warning" do
|
363
|
-
@config.dirs = %w(lib notexist)
|
364
|
-
silence { @war.apply(@config) }
|
365
|
-
file_list(%r{WEB-INF/lib}).should_not be_empty
|
366
|
-
file_list(%r{WEB-INF/notexist}).should be_empty
|
367
|
-
end
|
368
|
-
|
369
|
-
it "should exclude Warbler's old tmp/war directory by default" do
|
370
|
-
mkdir_p "tmp/war"
|
371
|
-
touch "tmp/war/index.html"
|
372
|
-
@config = Warbler::Config.new
|
373
|
-
@config.dirs += ["tmp"]
|
374
|
-
@war.apply(@config)
|
375
|
-
file_list(%r{WEB-INF/tmp/war/index\.html}).should be_empty
|
376
|
-
end
|
377
|
-
|
378
|
-
it "should write gems to location specified by gem_path" do
|
379
|
-
@config = Warbler::Config.new do |c|
|
380
|
-
c.gem_path = "/WEB-INF/jewels"
|
381
|
-
c.gems << 'rake'
|
382
|
-
end
|
383
|
-
elements = expand_webxml
|
384
|
-
file_list(%r{WEB-INF/jewels}).should_not be_empty
|
385
|
-
elements.to_a(
|
386
|
-
"context-param/param-name[text()='gem.path']"
|
387
|
-
).should_not be_empty
|
388
|
-
elements.to_a(
|
389
|
-
"context-param/param-name[text()='gem.path']/../param-value"
|
390
|
-
).first.text.should == "/WEB-INF/jewels"
|
391
|
-
|
392
|
-
end
|
393
|
-
|
394
|
-
it "should detect a Bundler Gemfile and process only its gems" do
|
395
|
-
File.open("Gemfile", "w") {|f| f << "gem 'rspec'"}
|
396
|
-
@war.apply(conf = Warbler::Config.new {|c| c.gems << "rake"})
|
397
|
-
file_list(%r{WEB-INF/Gemfile}).should_not be_empty
|
398
|
-
file_list(%r{WEB-INF/gems/specifications/rspec}).should_not be_empty
|
399
|
-
file_list(%r{WEB-INF/gems/specifications/rake}).should be_empty
|
400
|
-
end
|
401
|
-
|
402
|
-
it "should copy Bundler gemfiles into the war" do
|
403
|
-
File.open("Gemfile", "w") {|f| f << "gem 'rspec'"}
|
404
|
-
File.open("Gemfile.lock", "w") {|f| f << "GEM"}
|
405
|
-
@war.apply(Warbler::Config.new)
|
406
|
-
file_list(%r{WEB-INF/Gemfile}).should_not be_empty
|
407
|
-
file_list(%r{WEB-INF/Gemfile.lock}).should_not be_empty
|
408
|
-
end
|
409
|
-
|
410
|
-
it "should allow overriding of the gem path when using Bundler" do
|
411
|
-
File.open("Gemfile", "w") {|f| f << "gem 'rspec'"}
|
412
|
-
@war.apply(Warbler::Config.new {|c| c.gem_path = '/WEB-INF/jewels' })
|
413
|
-
file_list(%r{WEB-INF/jewels/specifications/rspec}).should_not be_empty
|
414
|
-
end
|
415
|
-
|
416
|
-
it "should work with :git entries in Bundler Gemfiles" do
|
417
|
-
File.open("Gemfile", "w") {|f| f << "gem 'warbler', :git => '#{Warbler::WARBLER_HOME}'\n"}
|
418
|
-
silence { ruby "-S", "bundle", "install", "--local" }
|
419
|
-
@war.apply(Warbler::Config.new)
|
420
|
-
file_list(%r{WEB-INF/gems/gems/warbler[^/]*/lib/warbler/version\.rb}).should_not be_empty
|
421
|
-
file_list(%r{WEB-INF/gems/specifications/warbler}).should_not be_empty
|
422
|
-
end
|
423
|
-
|
424
|
-
it "should not bundle dependencies in the test group by default when bundling" do
|
425
|
-
File.open("Gemfile", "w") {|f| f << "gem 'rake'\ngroup :test do\ngem 'rspec'\nend\n"}
|
426
|
-
@war.apply(Warbler::Config.new)
|
427
|
-
file_list(%r{WEB-INF/gems/gems/rake[^/]*/}).should_not be_empty
|
428
|
-
file_list(%r{WEB-INF/gems/gems/rspec[^/]*/}).should be_empty
|
429
|
-
file_list(%r{WEB-INF/gems/specifications/rake}).should_not be_empty
|
430
|
-
file_list(%r{WEB-INF/gems/specifications/rspec}).should be_empty
|
431
|
-
end
|
432
|
-
|
433
|
-
it "should allow adding additional WEB-INF files via config.webinf_files" do
|
434
|
-
File.open("myserver-web.xml", "w") do |f|
|
435
|
-
f << "<web-app></web-app>"
|
436
|
-
end
|
437
|
-
@war.apply(Warbler::Config.new {|c| c.webinf_files = FileList['myserver-web.xml'] })
|
438
|
-
file_list(%r{WEB-INF/myserver-web.xml}).should_not be_empty
|
439
|
-
end
|
440
|
-
|
441
|
-
it "should allow expanding of additional WEB-INF files via config.webinf_files" do
|
442
|
-
File.open("myserver-web.xml.erb", "w") do |f|
|
443
|
-
f << "<web-app><%= webxml.rails.env %></web-app>"
|
444
|
-
end
|
445
|
-
@war.apply(Warbler::Config.new {|c| c.webinf_files = FileList['myserver-web.xml.erb'] })
|
446
|
-
file_list(%r{WEB-INF/myserver-web.xml}).should_not be_empty
|
447
|
-
@war.files['WEB-INF/myserver-web.xml'].read.should =~ /web-app.*production/
|
448
|
-
end
|
449
|
-
|
450
|
-
it "should exclude test files in gems according to config.gem_excludes" do
|
451
|
-
@config.gem_excludes += [/^(test|spec)\//]
|
452
|
-
@war.apply(@config)
|
453
|
-
file_list(%r{WEB-INF/gems/gems/rake([^/]+)/test/test_rake.rb}).should be_empty
|
454
|
-
end
|
455
|
-
|
456
|
-
it "should create a META-INF/init.rb file with startup config" do
|
457
|
-
@war.apply(@config)
|
458
|
-
file_list(%r{META-INF/init.rb}).should_not be_empty
|
459
|
-
end
|
460
|
-
|
461
|
-
it "should allow adjusting the init file location in the war" do
|
462
|
-
@config.init_filename = 'WEB-INF/init.rb'
|
463
|
-
@war.add_init_file(@config)
|
464
|
-
file_list(%r{WEB-INF/init.rb}).should_not be_empty
|
465
|
-
end
|
466
|
-
|
467
|
-
it "should add RAILS_ENV to init.rb for Rails apps" do
|
468
|
-
@config = Warbler::Config.new { |c| c.webxml.booter = :rails }
|
469
|
-
@war.add_init_file(@config)
|
470
|
-
contents = @war.files['META-INF/init.rb'].read
|
471
|
-
contents.should =~ /ENV\['RAILS_ENV'\]/
|
472
|
-
contents.should =~ /'production'/
|
473
|
-
end
|
474
|
-
|
475
|
-
it "should add RACK_ENV to init.rb for Rack apps" do
|
476
|
-
@config = Warbler::Config.new { |c| c.webxml.booter = :rack }
|
477
|
-
@war.add_init_file(@config)
|
478
|
-
contents = @war.files['META-INF/init.rb'].read
|
479
|
-
contents.should =~ /ENV\['RACK_ENV'\]/
|
480
|
-
contents.should =~ /'production'/
|
481
|
-
end
|
482
|
-
|
483
|
-
it "should add BUNDLE_WITHOUT to init.rb when Bundler is used" do
|
484
|
-
File.open("Gemfile", "w") {|f| f << "gem 'rake'"}
|
485
|
-
@war.add_init_file(Warbler::Config.new)
|
486
|
-
contents = @war.files['META-INF/init.rb'].read
|
487
|
-
contents.should =~ /ENV\['BUNDLE_WITHOUT'\]/
|
488
|
-
contents.should =~ /'development:test'/
|
489
|
-
end
|
490
|
-
|
491
|
-
it "should allow adding custom files' contents to init.rb" do
|
492
|
-
@config = Warbler::Config.new { |c| c.init_contents << "Rakefile" }
|
493
|
-
@war.add_init_file(@config)
|
494
|
-
contents = @war.files['META-INF/init.rb'].read
|
495
|
-
contents.should =~ /require 'rake'/
|
496
|
-
end
|
497
|
-
|
498
|
-
it "should not have escaped HTML in WARBLER_CONFIG" do
|
499
|
-
@config.webxml.dummy = '<dummy/>'
|
500
|
-
@war.apply(@config)
|
501
|
-
@war.files['META-INF/init.rb'].read.should =~ /<dummy\/>/
|
10
|
+
it "is deprecated, replace occurrences with Warbler::Jar" do
|
11
|
+
capture { Warbler::War.new }.should =~ /deprecated/
|
502
12
|
end
|
503
13
|
end
|
data/warble.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Disable
|
1
|
+
# Disable Rake-environment-task framework detection by uncommenting/setting to false
|
2
2
|
# Warbler.framework_detection = false
|
3
3
|
|
4
4
|
# Warbler web application assembly configuration file
|
@@ -6,6 +6,8 @@ Warbler::Config.new do |config|
|
|
6
6
|
# Features: additional options controlling how the jar is built.
|
7
7
|
# Currently the following features are supported:
|
8
8
|
# - gemjar: package the gem repository in a jar file in WEB-INF/lib
|
9
|
+
# - executable: embed a web server and make the war executable
|
10
|
+
# - compiled: compile .rb files to .class files
|
9
11
|
# config.features = %w(gemjar)
|
10
12
|
|
11
13
|
# Application directories to be included in the webapp.
|
@@ -23,20 +25,15 @@ Warbler::Config.new do |config|
|
|
23
25
|
# own versions if you directly set the value
|
24
26
|
# config.java_libs += FileList["lib/java/*.jar"]
|
25
27
|
|
26
|
-
# Loose Java classes and miscellaneous files to be
|
28
|
+
# Loose Java classes and miscellaneous files to be included.
|
27
29
|
# config.java_classes = FileList["target/classes/**.*"]
|
28
30
|
|
29
31
|
# One or more pathmaps defining how the java classes should be copied into
|
30
|
-
#
|
32
|
+
# the archive. The example pathmap below accompanies the java_classes
|
31
33
|
# configuration above. See http://rake.rubyforge.org/classes/String.html#M000017
|
32
34
|
# for details of how to specify a pathmap.
|
33
35
|
# config.pathmaps.java_classes << "%{target/classes/,}p"
|
34
36
|
|
35
|
-
# Path to the pre-bundled gem directory inside the war file. Default
|
36
|
-
# is 'WEB-INF/gems'. Specify path if gems are already bundled
|
37
|
-
# before running Warbler. This also sets 'gem.path' inside web.xml.
|
38
|
-
# config.gem_path = "WEB-INF/vendor/bundler_gems"
|
39
|
-
|
40
37
|
# Bundler support is built-in. If Warbler finds a Gemfile in the
|
41
38
|
# project directory, it will be used to collect the gems to bundle
|
42
39
|
# in your application. If you wish to explicitly disable this
|
@@ -47,17 +44,11 @@ Warbler::Config.new do |config|
|
|
47
44
|
# Defaults to ["development", "test"].
|
48
45
|
# config.bundle_without = []
|
49
46
|
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
|
56
|
-
# Other gems to be included. You need to tell Warbler which gems
|
57
|
-
# your application needs so that they can be packaged in the war
|
58
|
-
# file.
|
59
|
-
# The Rails gems are included by default unless the vendor/rails
|
60
|
-
# directory is present.
|
47
|
+
# Other gems to be included. If you don't use Bundler or a gemspec
|
48
|
+
# file, you need to tell Warbler which gems your application needs
|
49
|
+
# so that they can be packaged in the archive.
|
50
|
+
# For Rails applications, the Rails gems are included by default
|
51
|
+
# unless the vendor/rails directory is present.
|
61
52
|
# config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"]
|
62
53
|
# config.gems << "tzinfo"
|
63
54
|
|
@@ -66,10 +57,10 @@ Warbler::Config.new do |config|
|
|
66
57
|
|
67
58
|
# The most recent versions of gems are used.
|
68
59
|
# You can specify versions of gems by using a hash assignment:
|
69
|
-
# config.gems["rails"] = "2.
|
60
|
+
# config.gems["rails"] = "2.3.10"
|
70
61
|
|
71
62
|
# You can also use regexps or Gem::Dependency objects for flexibility or
|
72
|
-
#
|
63
|
+
# finer-grained control.
|
73
64
|
# config.gems << /^merb-/
|
74
65
|
# config.gems << Gem::Dependency.new("merb-core", "= 0.9.3")
|
75
66
|
|
@@ -82,19 +73,12 @@ Warbler::Config.new do |config|
|
|
82
73
|
# below, which excludes test files.
|
83
74
|
# config.gem_excludes = [/^(test|spec)\//]
|
84
75
|
|
85
|
-
#
|
86
|
-
# will have the leading 'public/' part of the path stripped during staging.
|
87
|
-
# config.public_html = FileList["public/**/*", "doc/**/*"]
|
88
|
-
|
89
|
-
# Pathmaps for controlling how public HTML files are copied into the .war
|
90
|
-
# config.pathmaps.public_html = ["%{public/,}p"]
|
91
|
-
|
92
|
-
# Pathmaps for controlling how application files are copied into the .war
|
76
|
+
# Pathmaps for controlling how application files are copied into the archive
|
93
77
|
# config.pathmaps.application = ["WEB-INF/%p"]
|
94
78
|
|
95
|
-
# Name of the
|
96
|
-
# of
|
97
|
-
# config.
|
79
|
+
# Name of the archive (without the extension). Defaults to the basename
|
80
|
+
# of the project directory.
|
81
|
+
# config.jar_name = "mywar"
|
98
82
|
|
99
83
|
# Name of the MANIFEST.MF template for the war file. Defaults to a simple
|
100
84
|
# MANIFEST.MF that contains the version of Warbler used to create the war file.
|
@@ -105,6 +89,26 @@ Warbler::Config.new do |config|
|
|
105
89
|
# the application.
|
106
90
|
# config.compiled_ruby_files = FileList['app/**/*.rb']
|
107
91
|
|
92
|
+
# === War files only below here ===
|
93
|
+
|
94
|
+
# Path to the pre-bundled gem directory inside the war file. Default
|
95
|
+
# is 'WEB-INF/gems'. Specify path if gems are already bundled
|
96
|
+
# before running Warbler. This also sets 'gem.path' inside web.xml.
|
97
|
+
# config.gem_path = "WEB-INF/vendor/bundler_gems"
|
98
|
+
|
99
|
+
# Files for WEB-INF directory (next to web.xml). This contains
|
100
|
+
# web.xml by default. If there is an .erb-File it will be processed
|
101
|
+
# with webxml-config. You may want to exclude this file via
|
102
|
+
# config.excludes.
|
103
|
+
# config.webinf_files += FileList["jboss-web.xml"]
|
104
|
+
|
105
|
+
# Files to be included in the root of the webapp. Note that files in public
|
106
|
+
# will have the leading 'public/' part of the path stripped during staging.
|
107
|
+
# config.public_html = FileList["public/**/*", "doc/**/*"]
|
108
|
+
|
109
|
+
# Pathmaps for controlling how public HTML files are copied into the .war
|
110
|
+
# config.pathmaps.public_html = ["%{public/,}p"]
|
111
|
+
|
108
112
|
# Value of RAILS_ENV for the webapp -- default as shown below
|
109
113
|
# config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'
|
110
114
|
|