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.
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