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.
Files changed (65) hide show
  1. data/Gemfile +8 -5
  2. data/History.txt +5 -0
  3. data/Manifest.txt +43 -23
  4. data/README.txt +67 -26
  5. data/Rakefile +17 -6
  6. data/ext/JarMain.java +147 -0
  7. data/ext/{Main.java → WarMain.java} +4 -4
  8. data/ext/{WarblerWar.java → WarblerJar.java} +79 -13
  9. data/ext/{WarblerWarService.java → WarblerJarService.java} +2 -2
  10. data/lib/warbler/application.rb +9 -9
  11. data/lib/warbler/config.rb +58 -204
  12. data/lib/warbler/gems.rb +2 -2
  13. data/lib/warbler/jar.rb +247 -0
  14. data/lib/warbler/task.rb +28 -60
  15. data/lib/warbler/templates/config.erb +1 -1
  16. data/lib/warbler/templates/rack.erb +1 -1
  17. data/lib/warbler/templates/rails.erb +1 -1
  18. data/lib/warbler/traits/bundler.rb +58 -0
  19. data/lib/warbler/traits/gemspec.rb +64 -0
  20. data/lib/warbler/traits/jar.rb +53 -0
  21. data/lib/warbler/traits/merb.rb +34 -0
  22. data/lib/warbler/traits/nogemspec.rb +41 -0
  23. data/lib/warbler/traits/rack.rb +31 -0
  24. data/lib/warbler/traits/rails.rb +57 -0
  25. data/lib/warbler/traits/war.rb +191 -0
  26. data/lib/warbler/traits.rb +105 -0
  27. data/lib/warbler/version.rb +1 -1
  28. data/lib/warbler/war.rb +1 -247
  29. data/lib/warbler.rb +2 -5
  30. data/lib/warbler_jar.jar +0 -0
  31. data/spec/sample_jar/History.txt +6 -0
  32. data/spec/sample_jar/Manifest.txt +8 -0
  33. data/spec/sample_jar/README.txt +30 -0
  34. data/spec/sample_jar/lib/sample_jar.rb +6 -0
  35. data/spec/sample_jar/sample_jar.gemspec +41 -0
  36. data/spec/sample_jar/test/test_sample_jar.rb +8 -0
  37. data/spec/{sample → sample_war}/app/controllers/application.rb +0 -0
  38. data/spec/{sample → sample_war}/app/helpers/application_helper.rb +0 -0
  39. data/spec/{sample → sample_war}/config/boot.rb +0 -0
  40. data/spec/{sample → sample_war}/config/database.yml +0 -0
  41. data/spec/{sample → sample_war}/config/environment.rb +0 -0
  42. data/spec/{sample → sample_war}/config/environments/development.rb +0 -0
  43. data/spec/{sample → sample_war}/config/environments/production.rb +0 -0
  44. data/spec/{sample → sample_war}/config/environments/test.rb +0 -0
  45. data/spec/{sample → sample_war}/config/initializers/inflections.rb +0 -0
  46. data/spec/{sample → sample_war}/config/initializers/mime_types.rb +0 -0
  47. data/spec/{sample → sample_war}/config/initializers/new_rails_defaults.rb +0 -0
  48. data/spec/{sample → sample_war}/config/routes.rb +0 -0
  49. data/spec/{sample → sample_war}/lib/tasks/utils.rake +0 -0
  50. data/spec/{sample → sample_war}/public/404.html +0 -0
  51. data/spec/{sample → sample_war}/public/422.html +0 -0
  52. data/spec/{sample → sample_war}/public/500.html +0 -0
  53. data/spec/{sample → sample_war}/public/favicon.ico +0 -0
  54. data/spec/{sample → sample_war}/public/index.html +0 -0
  55. data/spec/{sample → sample_war}/public/robots.txt +0 -0
  56. data/spec/spec_helper.rb +40 -0
  57. data/spec/warbler/application_spec.rb +2 -9
  58. data/spec/warbler/config_spec.rb +101 -83
  59. data/spec/warbler/jar_spec.rb +763 -0
  60. data/spec/warbler/task_spec.rb +56 -41
  61. data/spec/warbler/traits_spec.rb +16 -0
  62. data/spec/warbler/war_spec.rb +2 -492
  63. data/warble.rb +36 -32
  64. metadata +57 -35
  65. data/lib/warbler_war.jar +0 -0
@@ -8,87 +8,96 @@
8
8
  require File.dirname(__FILE__) + '/../spec_helper'
9
9
 
10
10
  describe Warbler::Task do
11
- before(:each) do
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(:each) do
28
- Rake::Task["warble:clean"].invoke
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 = "#{@config.war_name}.war"
45
+ war_file = "#{config.jar_name}.war"
38
46
  touch war_file
39
- Rake::Task["warble:clean"].invoke
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 { Rake::Task["warble:make_gemjar"].invoke }
53
+ silence { run_task "warble:gemjar"; run_task "warble:files" }
45
54
  File.exist?("tmp/gems.jar").should == true
46
- @task.war.files.keys.should_not include(%r{WEB-INF\/gems})
47
- @task.war.files.keys.should include("WEB-INF/lib/gems.jar")
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 { Rake::Task["warble"].invoke }
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
- @task.war.files["file.txt"] = "file.txt"
61
- silence { Rake::Task["warble:jar"].invoke }
62
- File.exist?("#{@config.war_name}.war").should == true
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
- @config.features << "gemjar"
67
- silence { Rake::Task["warble"].invoke }
68
- @task.war.files.keys.should include("WEB-INF/lib/gems.jar")
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
- @config.features << "bogus"
73
- capture { Rake::Task["warble"].invoke }.should =~ /unknown feature `bogus'/
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 { Rake::Task["warble:executable"].invoke }
78
- @task.war.files.keys.should include('WEB-INF/winstone.jar')
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", @config
91
+ Warbler::Task.new "warble", config
83
92
  end
84
93
 
85
94
  it "should compile any ruby files specified" do
86
- @config.features << "compiled"
87
- silence { Rake::Task["warble"].invoke }
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("#{@config.war_name}.war") do |zf|
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 { Rake::Task["warble"].invoke }
104
- Zip::ZipFile.open("#{@config.war_name}.war") do |zf|
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 { Rake::Task["warble"].invoke }
114
- Zip::ZipFile.open("#{@config.war_name}.war") do |zf|
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
- @config.bundler = true
124
- @config.send(:detect_bundler_gems)
125
- silence { Rake::Task["warble"].invoke }
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