warbler 1.2.1 → 1.3.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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/task_spec.rb
CHANGED
@@ -8,87 +8,96 @@
|
|
8
8
|
require File.dirname(__FILE__) + '/../spec_helper'
|
9
9
|
|
10
10
|
describe Warbler::Task do
|
11
|
-
|
11
|
+
run_in_directory "spec/sample_war"
|
12
|
+
|
13
|
+
let :config do
|
14
|
+
Warbler::Config.new do |config|
|
15
|
+
config.jar_name = "warbler"
|
16
|
+
config.gems = ["rake"]
|
17
|
+
config.webxml.jruby.max.runtimes = 5
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:warble_task) { Warbler::Task.new "warble", config }
|
22
|
+
|
23
|
+
def run_task(t)
|
24
|
+
warble_task
|
25
|
+
Rake::Task[t].invoke
|
26
|
+
end
|
27
|
+
|
28
|
+
before :each do
|
12
29
|
@rake = Rake::Application.new
|
13
30
|
Rake.application = @rake
|
14
31
|
verbose(false)
|
15
|
-
@pwd = Dir.getwd
|
16
|
-
Dir.chdir("spec/sample")
|
17
32
|
mkdir_p "log"
|
18
33
|
touch "log/test.log"
|
19
|
-
@config = Warbler::Config.new do |config|
|
20
|
-
config.war_name = "warbler"
|
21
|
-
config.gems = ["rake"]
|
22
|
-
config.webxml.jruby.max.runtimes = 5
|
23
|
-
end
|
24
|
-
@task = Warbler::Task.new "warble", @config
|
25
34
|
end
|
26
35
|
|
27
|
-
after
|
28
|
-
|
36
|
+
after :each do
|
37
|
+
run_task "warble:clean"
|
29
38
|
rm_rf "log"
|
30
39
|
rm_f FileList["config.ru", "*web.xml", "config/web.xml*", "config/warble.rb",
|
31
40
|
"config/special.txt", "config/link.txt", "tmp/gems.jar",
|
32
41
|
"file.txt", 'Gemfile', 'lib/rakelib', '**/*.class']
|
33
|
-
Dir.chdir(@pwd)
|
34
42
|
end
|
35
43
|
|
36
44
|
it "should define a clean task for removing the war file" do
|
37
|
-
war_file = "#{
|
45
|
+
war_file = "#{config.jar_name}.war"
|
38
46
|
touch war_file
|
39
|
-
|
47
|
+
|
48
|
+
run_task "warble:clean"
|
40
49
|
File.exist?(war_file).should == false
|
41
50
|
end
|
42
51
|
|
43
52
|
it "should define a make_gemjar task for storing gems in a jar file" do
|
44
|
-
silence {
|
53
|
+
silence { run_task "warble:gemjar"; run_task "warble:files" }
|
45
54
|
File.exist?("tmp/gems.jar").should == true
|
46
|
-
|
47
|
-
|
55
|
+
warble_task.jar.files.keys.should_not include(%r{WEB-INF\/gems})
|
56
|
+
warble_task.jar.files.keys.should include("WEB-INF/lib/gems.jar")
|
48
57
|
end
|
49
58
|
|
50
59
|
it "should define a war task for bundling up everything" do
|
51
60
|
files_ran = false; task "warble:files" do; files_ran = true; end
|
52
61
|
jar_ran = false; task "warble:jar" do; jar_ran = true; end
|
53
|
-
silence {
|
62
|
+
silence { run_task "warble" }
|
54
63
|
files_ran.should == true
|
55
64
|
jar_ran.should == true
|
56
65
|
end
|
57
66
|
|
58
67
|
it "should define a jar task for creating the .war" do
|
59
68
|
touch "file.txt"
|
60
|
-
|
61
|
-
silence {
|
62
|
-
File.exist?("#{
|
69
|
+
warble_task.jar.files["file.txt"] = "file.txt"
|
70
|
+
silence { run_task "warble:jar" }
|
71
|
+
File.exist?("#{config.jar_name}.war").should == true
|
63
72
|
end
|
64
73
|
|
65
74
|
it "should invoke feature tasks configured in config.features" do
|
66
|
-
|
67
|
-
silence {
|
68
|
-
|
75
|
+
config.features << "gemjar"
|
76
|
+
silence { run_task "warble" }
|
77
|
+
warble_task.jar.files.keys.should include("WEB-INF/lib/gems.jar")
|
69
78
|
end
|
70
79
|
|
71
80
|
it "should warn and skip unknown features configured in config.features" do
|
72
|
-
|
73
|
-
capture {
|
81
|
+
config.features << "bogus"
|
82
|
+
capture { run_task "warble" }.should =~ /unknown feature `bogus'/
|
74
83
|
end
|
75
84
|
|
76
85
|
it "should define an executable task for embedding a server in the war file" do
|
77
|
-
silence {
|
78
|
-
|
86
|
+
silence { run_task "warble:executable"; run_task "warble:files" }
|
87
|
+
warble_task.jar.files.keys.should include('WEB-INF/winstone.jar')
|
79
88
|
end
|
80
89
|
|
81
90
|
it "should be able to define all tasks successfully" do
|
82
|
-
Warbler::Task.new "warble",
|
91
|
+
Warbler::Task.new "warble", config
|
83
92
|
end
|
84
93
|
|
85
94
|
it "should compile any ruby files specified" do
|
86
|
-
|
87
|
-
silence {
|
95
|
+
config.features << "compiled"
|
96
|
+
silence { run_task "warble" }
|
88
97
|
|
89
98
|
java_class_magic_number = [0xCA,0xFE,0xBA,0xBE].map { |magic_char| magic_char.chr }.join
|
90
99
|
|
91
|
-
Zip::ZipFile.open("#{
|
100
|
+
Zip::ZipFile.open("#{config.jar_name}.war") do |zf|
|
92
101
|
java_class_header = zf.get_input_stream('WEB-INF/app/helpers/application_helper.class') {|io| io.read }[0..3]
|
93
102
|
ruby_class_definition = zf.get_input_stream('WEB-INF/app/helpers/application_helper.rb') {|io| io.read }
|
94
103
|
|
@@ -97,11 +106,17 @@ describe Warbler::Task do
|
|
97
106
|
end
|
98
107
|
end
|
99
108
|
|
109
|
+
it "should delete .class files after finishing the jar" do
|
110
|
+
config.features << "compiled"
|
111
|
+
silence { run_task "warble" }
|
112
|
+
File.exist?('app/helpers/application_helper.class').should be_false
|
113
|
+
end
|
114
|
+
|
100
115
|
it "should process symlinks by storing a file in the archive that has the same contents as the source" do
|
101
116
|
File.open("config/special.txt", "wb") {|f| f << "special"}
|
102
117
|
Dir.chdir("config") { ln_s "special.txt", "link.txt" }
|
103
|
-
silence {
|
104
|
-
Zip::ZipFile.open("#{
|
118
|
+
silence { run_task "warble" }
|
119
|
+
Zip::ZipFile.open("#{config.jar_name}.war") do |zf|
|
105
120
|
special = zf.get_input_stream('WEB-INF/config/special.txt') {|io| io.read }
|
106
121
|
link = zf.get_input_stream('WEB-INF/config/link.txt') {|io| io.read }
|
107
122
|
link.should == special
|
@@ -110,8 +125,8 @@ describe Warbler::Task do
|
|
110
125
|
|
111
126
|
it "should process directory symlinks by copying the whole subdirectory" do
|
112
127
|
Dir.chdir("lib") { ln_s "tasks", "rakelib" }
|
113
|
-
silence {
|
114
|
-
Zip::ZipFile.open("#{
|
128
|
+
silence { run_task "warble" }
|
129
|
+
Zip::ZipFile.open("#{config.jar_name}.war") do |zf|
|
115
130
|
zf.find_entry("WEB-INF/lib/tasks/utils.rake").should_not be_nil
|
116
131
|
zf.find_entry("WEB-INF/lib/rakelib/").should_not be_nil
|
117
132
|
zf.find_entry("WEB-INF/lib/rakelib/utils.rake").should_not be_nil if defined?(JRUBY_VERSION)
|
@@ -120,17 +135,17 @@ describe Warbler::Task do
|
|
120
135
|
|
121
136
|
it "should use a Bundler Gemfile to include gems" do
|
122
137
|
File.open("Gemfile", "w") {|f| f << "gem 'rspec'"}
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
Zip::ZipFile.open("#{@config.war_name}.war") do |zf|
|
127
|
-
rspec_version = @config.gems.keys.detect {|k| k.name == 'rspec'}.version
|
138
|
+
silence { run_task "warble" }
|
139
|
+
Zip::ZipFile.open("#{config.jar_name}.war") do |zf|
|
140
|
+
rspec_version = config.gems.keys.detect {|k| k.name == 'rspec'}.version
|
128
141
|
zf.find_entry("WEB-INF/gems/specifications/rspec-#{rspec_version}.gemspec").should_not be_nil
|
129
142
|
end
|
130
143
|
end
|
131
144
|
end
|
132
145
|
|
133
146
|
describe "Debug targets" do
|
147
|
+
run_in_directory "spec/sample_war"
|
148
|
+
|
134
149
|
before(:each) do
|
135
150
|
@rake = Rake::Application.new
|
136
151
|
Rake.application = @rake
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010 Engine Yard, Inc.
|
3
|
+
# This source code is available under the MIT license.
|
4
|
+
# See the file LICENSE.txt for details.
|
5
|
+
#++
|
6
|
+
|
7
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
8
|
+
|
9
|
+
describe Warbler::Traits do
|
10
|
+
it "are ordered by fewer dependencies first" do
|
11
|
+
traits = [Warbler::Traits::War, Warbler::Traits::Bundler, Warbler::Traits::Rails]
|
12
|
+
result = traits.shuffle.sort
|
13
|
+
result.index(Warbler::Traits::War).should < result.index(Warbler::Traits::Bundler)
|
14
|
+
result.index(Warbler::Traits::War).should < result.index(Warbler::Traits::Rails)
|
15
|
+
end
|
16
|
+
end
|