warbler 1.0.3 → 1.1.0
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/History.txt +84 -64
- data/Manifest.txt +1 -0
- data/README.txt +39 -10
- data/Rakefile +1 -1
- data/ext/Main.java +110 -0
- data/lib/warbler/application.rb +11 -29
- data/lib/warbler/config.rb +9 -10
- data/lib/warbler/task.rb +101 -16
- data/lib/warbler/version.rb +1 -1
- data/lib/warbler/war.rb +11 -5
- data/lib/warbler.rb +1 -1
- data/lib/warbler_war.jar +0 -0
- data/spec/warbler/application_spec.rb +6 -1
- data/spec/warbler/task_spec.rb +18 -2
- data/spec/warbler/war_spec.rb +8 -2
- data/warble.rb +12 -0
- metadata +143 -142
data/History.txt
CHANGED
@@ -1,147 +1,167 @@
|
|
1
|
+
== 1.1.0
|
2
|
+
|
3
|
+
- Add concept of "features" -- small Rake tasks that run before the
|
4
|
+
creation of the war file and make manipulations to the war file
|
5
|
+
structure.
|
6
|
+
- Add 'gemjar' feature: Bundle all gems into a gems.jar to reduce the
|
7
|
+
number of files in the archive (mostly useful for Google AppEngine).
|
8
|
+
Usage: run "warble gemjar war" or set config.features = %w(gemjar) in
|
9
|
+
warble.rb to use this feature.
|
10
|
+
- Add 'executable' feature: Bundle an embedded web server in the war
|
11
|
+
file so that the entire application can be run as
|
12
|
+
'java -jar myapp.war'.
|
13
|
+
Usage: run "warble executable war" or set config.features = %w(executable)
|
14
|
+
in warble.rb to use this feature.
|
15
|
+
To see embedded webserver options, add '--help' to the 'java -jar'
|
16
|
+
command line.
|
17
|
+
- No longer embed config.ru in web.xml as 'rackup' parameter by
|
18
|
+
default. Instead, config.ru is included in the war file.
|
19
|
+
- Bump jruby-rack version requirement to 0.9.8.
|
20
|
+
|
1
21
|
== 1.0.3
|
2
22
|
|
3
|
-
|
23
|
+
- Tracking recent Bundler changes - handle locked Gemfiles differently
|
4
24
|
than unlocked ones
|
5
|
-
|
25
|
+
- Handle file-based symlinks, and warn about inoperational directory
|
6
26
|
symlinks under non-JRuby versions of Ruby.
|
7
27
|
|
8
28
|
== 1.0.2
|
9
29
|
|
10
|
-
|
30
|
+
- Add 'warble pluginize' task back. This task now just creates a
|
11
31
|
vendor/plugins/warbler/tasks/warbler.rake file. There's no need to
|
12
32
|
"vendor" all of Warbler into your application anymore.
|
13
33
|
|
14
34
|
== 1.0.1
|
15
35
|
|
16
|
-
|
36
|
+
- Fix careless bug where Warbler doesn't work with JRuby 1.4
|
17
37
|
|
18
38
|
== 1.0
|
19
39
|
|
20
|
-
|
40
|
+
- Warbler hits 1.0! There are enough structural changes in Warbler
|
21
41
|
that I feel it's time to roll the major version over to 1.0.
|
22
|
-
|
42
|
+
- Add support for Bundler. Detect Gemfiles, make sure gems are
|
23
43
|
included in the war file and rewrite .bundle/environment.rb inside
|
24
44
|
the war file.
|
25
|
-
|
45
|
+
- Warbler now uses RubyZip to create the war file in-place, without
|
26
46
|
copying files to a tmp/war staging area. When run in JRuby it uses a
|
27
47
|
Java ZipOutputStream for a modest performance boost.
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
48
|
+
- Add config option to allow override of gem_home (Daniel Harrington).
|
49
|
+
- Stop bundling jruby-rack, as promised.
|
50
|
+
- WARBLER-3: don't add from Rails config.gems if they are frozen
|
51
|
+
- WARBLER-7: Add config.webinf_files option with more support for
|
32
52
|
custom web.xml files
|
33
53
|
|
34
54
|
== 0.9.14
|
35
55
|
|
36
|
-
|
56
|
+
- So, jruby-rack is bundled for one more release. 1.0 will not contain
|
37
57
|
any jar files, I promise!
|
38
|
-
|
39
|
-
|
58
|
+
- Upgraded jruby-rack to 0.9.5.
|
59
|
+
- Unbundled jruby-complete jar in favor of new jruby-jars gem, which
|
40
60
|
can be upgraded separately.
|
41
|
-
|
61
|
+
- Skip gems which have no loaded_from attribute set
|
42
62
|
(this happened with the Authlogic gem on Edge Rails)
|
43
63
|
(thanks Laszlo Bacsi)
|
44
64
|
|
45
65
|
== 0.9.13
|
46
66
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
67
|
+
- RailsConf 2009 edition.
|
68
|
+
- Only bundled JRuby and JRuby-Rack upgrades. Bug fixes will have to come in 0.9.14.
|
69
|
+
- This should also be the last release with bundled JRuby and JRuby-Rack.
|
70
|
+
- Upgrade to JRuby 1.3.0RC1 and JRuby-Rack 0.9.4. The latter allows
|
51
71
|
Rails 2.3 to work with Warbler.
|
52
72
|
|
53
73
|
== 0.9.12
|
54
74
|
|
55
|
-
|
56
|
-
`Warbler.framework_detection = false
|
75
|
+
- Allow framework auto-detection to be disabled. Set
|
76
|
+
`Warbler.framework_detection = false' at the top of config/warble.rb
|
57
77
|
or uncomment the line from a newly generated config.
|
58
|
-
|
59
|
-
|
60
|
-
|
78
|
+
- Add configuration option to set manifest file (thanks Tommy McGuire)
|
79
|
+
- Mitigate RubyGems 1.3 compatibility issue (thanks Jens Norrgrann)
|
80
|
+
- Add experimental `war:exploded` task. This allows you to deploy your
|
61
81
|
application in an exploded mode, thus allowing continual development
|
62
82
|
without re-warring and re-deploying. Feedback is appreciated if you
|
63
83
|
try this feature; it may not work in all application servers and for
|
64
84
|
applications other than Rails.
|
65
|
-
|
66
|
-
|
85
|
+
- Handle Rails gem dependencies better (thanks Laszlo Bacsi)
|
86
|
+
- Auto-detect Merb dependencies (Merb >= 1.0 only). Please give
|
67
87
|
feedback if you try Warbler with a Merb 1.0 app.
|
68
|
-
|
69
|
-
|
88
|
+
- Ignore gem development dependencies
|
89
|
+
- Upgrade to JRuby 1.1.6 and JRuby-Rack 0.9.3
|
70
90
|
|
71
91
|
== 0.9.11
|
72
92
|
|
73
|
-
|
93
|
+
- Auto-detect Rails and Merb and configure appropriately
|
74
94
|
- For Rails, set rails booter, determine max runtimes based on Rails.configuration.threadsafe!,
|
75
95
|
add Rails gem, detect Rails version, set gems to be packaged based on
|
76
96
|
Rails.configuration.gems if available
|
77
97
|
- Rails gems only added if Rails application detected
|
78
98
|
- For Merb, set merb booter automatically
|
79
|
-
|
80
|
-
|
99
|
+
- Auto-detect config.ru rackup script and pass it into config.webxml.rackup
|
100
|
+
- rails.env now commented by default in config/warble.rb and internally default
|
81
101
|
the value to 'production'
|
82
|
-
|
83
|
-
|
102
|
+
- Default directories in config.dirs to only those that are found to be present
|
103
|
+
- Allow config.gems array to contain regexps and Gem::Dependency objects as well
|
84
104
|
(assist from Jani Soila)
|
85
|
-
|
86
|
-
|
87
|
-
|
105
|
+
- Fix bug ensuring you can += and -= for config.gems
|
106
|
+
- Upgrade to JRuby 1.1.4 and JRuby-Rack 0.9.2
|
107
|
+
- add [] as a way to specify non-identifier keys, example: config.webxml['!@#$%^'] = 'haha'
|
88
108
|
|
89
109
|
== 0.9.10
|
90
110
|
|
91
|
-
|
92
|
-
|
111
|
+
- Upgraded to JRuby-Rack 0.9.1. Fixes JRUBY-2620, JRUBY-2594, JRUBY-2507.
|
112
|
+
- Now verified to work with Camping and Sinatra. See
|
93
113
|
http://github.com/nicksieger/jruby-rack/tree/master/examples for examples
|
94
114
|
of how to configure Warbler to package your Camping and Sinatra apps.
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
115
|
+
- Upgraded to JRuby 1.1.3.
|
116
|
+
- Log files are no longer packaged in the .war file.
|
117
|
+
- Fix #<Warbler::WebxmlOpenStruct ...> appearing in web.xml and document workarounds.
|
118
|
+
- Add config.autodeploy_dir that, when specified, will create the war there.
|
99
119
|
|
100
120
|
== 0.9.9
|
101
121
|
|
102
|
-
|
103
|
-
|
104
|
-
|
122
|
+
- Now shipping with JRuby-Rack 0.9!
|
123
|
+
- Upgrade to JRuby 1.1.1
|
124
|
+
- warble.rb and web.xml.erb have changed as a result of the change to JRuby-Rack -- we
|
105
125
|
recommend comparing the new base copies with any existing configuration you have to
|
106
126
|
make sure you pick up the differences.
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
127
|
+
- Config changes:
|
128
|
+
-- config.webxml.booter chooses what kind of application to use (:rails, :merb or plain :rack).
|
129
|
+
-- config.webxml.pool.* have been replaced by config.webxml.jruby.(min|max).runtimes
|
130
|
+
-- config.webxml.standalone and config.webxml.jruby_home no longer have any effect.
|
111
131
|
|
112
132
|
== 0.9.5
|
113
133
|
|
114
|
-
|
134
|
+
- Fix bug in plugin warbler.rake task file that would favor loading warbler from gems before the version
|
115
135
|
installed as a plugin
|
116
|
-
|
136
|
+
- Upgrade to JRuby 1.1 final and Goldspike 1.6.1
|
117
137
|
|
118
138
|
== 0.9.4
|
119
139
|
|
120
|
-
|
121
|
-
|
140
|
+
- Update bundled JRuby to 1.1RC3 and Goldspike to 1.6.
|
141
|
+
- Fix inclusion of gems with platform-specific bits (e.g., Hpricot)
|
122
142
|
|
123
143
|
== 0.9.3
|
124
144
|
|
125
|
-
|
126
|
-
|
145
|
+
- Update bundled JRuby to 1.1RC2, and Goldspike to 1.5.
|
146
|
+
- The bundled JRuby and Goldspike now require JDK 5 or greater. If you wish to use JDK 1.4, use Warbler 0.9.2.
|
127
147
|
|
128
148
|
== 0.9.2
|
129
149
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
150
|
+
- Update bundled JRuby to version 1.0.3 and Goldspike 1.4.
|
151
|
+
- Add config.java_classes to allow you to copy loose Java classes into WEB-INF/classes.
|
152
|
+
- Make jar command a single command string so that jar creation doesn't fail (works around bug in JRuby 1.0.2)
|
153
|
+
- Use File.join to form staging directory, should produce the proper jar-command path in Windows
|
134
154
|
|
135
155
|
== 0.9.1
|
136
156
|
|
137
|
-
|
138
|
-
|
157
|
+
- Add rake >= 0.7.3 as a dependency in the gem specification.
|
158
|
+
- Add debug tasks: war:debug, war:debug:gems, war:debug:public, war:debug:app, war:debug:includes,
|
139
159
|
war:debug:excludes, war:debug:java_libs gives you a breakdown of what Warbler expects to package.
|
140
160
|
|
141
161
|
== 0.9
|
142
162
|
|
143
|
-
|
163
|
+
- Birthday! Warbler is a gem to make a .war file out of a Rails project. The intent is to provide a
|
144
164
|
minimal, flexible, ruby-like way to bundle up all of your application files for deployment to a
|
145
165
|
Java application server.
|
146
|
-
|
147
|
-
|
166
|
+
- Bundled versions: goldspike-1.4-SNAPSHOT and jruby-complete-1.0.1
|
167
|
+
- Works as both a gem (rake application) or a plugin
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -13,7 +13,7 @@ to assemble and Just Work.
|
|
13
13
|
|
14
14
|
1. Install the gem: <tt>gem install warbler</tt>.
|
15
15
|
2. Run warbler in the top directory of your Rails application: <tt>warble</tt>.
|
16
|
-
3. Deploy your
|
16
|
+
3. Deploy your myapp.war file to your favorite Java application server.
|
17
17
|
|
18
18
|
== Usage
|
19
19
|
|
@@ -21,11 +21,14 @@ Warbler's +warble+ command is just a small wrapper around Rake with internally
|
|
21
21
|
defined tasks.
|
22
22
|
|
23
23
|
$ warble -T
|
24
|
-
warble config
|
25
|
-
warble
|
26
|
-
warble
|
27
|
-
warble
|
28
|
-
warble
|
24
|
+
warble config # Generate a configuration file to customize your war
|
25
|
+
warble executable # Feature: make an executable archive
|
26
|
+
warble gemjar # Feature: package gem repository inside a jar
|
27
|
+
warble pluginize # Install Warbler tasks in your Rails application
|
28
|
+
warble version # Display version of Warbler
|
29
|
+
warble war # Create the project .war file
|
30
|
+
warble war:clean # Remove the .war file
|
31
|
+
warble war:debug # Dump diagnostic information
|
29
32
|
|
30
33
|
If you'd like to control Warbler from your own project's Rakefile,
|
31
34
|
simply add the following code somewhere in the Rakefile:
|
@@ -35,6 +38,31 @@ simply add the following code somewhere in the Rakefile:
|
|
35
38
|
|
36
39
|
Now you should be able to invoke "rake war" to create your war file.
|
37
40
|
|
41
|
+
== Features
|
42
|
+
|
43
|
+
Warbler "features" are small Rake tasks that run before the creation
|
44
|
+
of the war file and make manipulations to the war file structure.
|
45
|
+
|
46
|
+
You can either add features to the warbler command line:
|
47
|
+
|
48
|
+
warble FEATURE war
|
49
|
+
|
50
|
+
or configure them in config/warble.rb to always be used.
|
51
|
+
|
52
|
+
config.features = %w(FEATURE)
|
53
|
+
|
54
|
+
Currently, two features are available.
|
55
|
+
|
56
|
+
* +gemjar+: This bundles all gems into a single gem file to reduce the
|
57
|
+
number of files in the .war. This is mostly useful for Google
|
58
|
+
AppEngine where the number of files per application has a limit.
|
59
|
+
* +executable+: This bundles an embedded web server into the .war so
|
60
|
+
that it can either be deployed into a traditional java web server or
|
61
|
+
run as a standalone application using 'java -jar myapp.war'.
|
62
|
+
|
63
|
+
Features may form the basis for a third-party plugin system in the
|
64
|
+
future if there is demand.
|
65
|
+
|
38
66
|
== Configuration
|
39
67
|
|
40
68
|
=== Bundler
|
@@ -62,10 +90,11 @@ dependencies are packaged.
|
|
62
90
|
|
63
91
|
=== Other Rack-based applications
|
64
92
|
|
65
|
-
If you have a 'config.ru' file in the top directory
|
66
|
-
|
67
|
-
|
68
|
-
|
93
|
+
If you have a 'config.ru' file in the top directory or one of the
|
94
|
+
immediate subdirectories of your application, it will be included and
|
95
|
+
used as the rackup script for your Rack-based application. You will
|
96
|
+
probably need to specify framework and application gems in
|
97
|
+
config/warble.rb unless you're using Bundler to manage your gems.
|
69
98
|
|
70
99
|
See {the examples in the jruby-rack project}[http://github.com/nicksieger/jruby-rack/tree/master/examples/]
|
71
100
|
of how to configure Warbler to package Camping and Sinatra apps.
|
data/Rakefile
CHANGED
@@ -33,7 +33,7 @@ begin
|
|
33
33
|
p.summary = "Warbler chirpily constructs .war files of your Rails applications."
|
34
34
|
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
35
35
|
p.description = p.paragraphs_of('README.txt', 1...2).join("\n\n")
|
36
|
-
p.extra_deps += [['rake', '>= 0.8.7'], ['jruby-jars', '>= 1.4.0'], ['jruby-rack', '>= 0.9.
|
36
|
+
p.extra_deps += [['rake', '>= 0.8.7'], ['jruby-jars', '>= 1.4.0'], ['jruby-rack', '>= 0.9.8'], ['rubyzip', '>= 0.9.4']]
|
37
37
|
p.clean_globs += ['spec/sample/MANIFEST*', 'spec/sample/web.xml*']
|
38
38
|
end
|
39
39
|
hoe.spec.files = MANIFEST
|
data/ext/Main.java
ADDED
@@ -0,0 +1,110 @@
|
|
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
|
+
import java.net.URLClassLoader;
|
8
|
+
import java.net.URL;
|
9
|
+
import java.lang.reflect.Method;
|
10
|
+
import java.io.IOException;
|
11
|
+
import java.io.InputStream;
|
12
|
+
import java.io.File;
|
13
|
+
import java.io.FileOutputStream;
|
14
|
+
import java.util.Arrays;
|
15
|
+
|
16
|
+
public class Main implements Runnable {
|
17
|
+
public static final String MAIN = "/" + Main.class.getName().replace('.', '/') + ".class";
|
18
|
+
public static final String WINSTONE_JAR = "/WEB-INF/winstone.jar";
|
19
|
+
|
20
|
+
private String[] args;
|
21
|
+
private String path, warfile;
|
22
|
+
private boolean debug;
|
23
|
+
private File webroot;
|
24
|
+
|
25
|
+
public Main(String[] args) throws Exception {
|
26
|
+
this.args = args;
|
27
|
+
URL mainClass = getClass().getResource(MAIN);
|
28
|
+
this.path = mainClass.toURI().getSchemeSpecificPart();
|
29
|
+
this.warfile = mainClass.getFile().replace("!" + MAIN, "").replace("file:", "");
|
30
|
+
this.debug = isDebug();
|
31
|
+
this.webroot = File.createTempFile("winstone", "webroot");
|
32
|
+
this.webroot.delete();
|
33
|
+
this.webroot.mkdirs();
|
34
|
+
this.webroot = new File(this.webroot, new File(warfile).getName());
|
35
|
+
Runtime.getRuntime().addShutdownHook(new Thread(this));
|
36
|
+
}
|
37
|
+
|
38
|
+
private URL extractWinstone() throws Exception {
|
39
|
+
InputStream jarStream = new URL("jar:" + path.replace(MAIN, WINSTONE_JAR)).openStream();
|
40
|
+
File jarFile = File.createTempFile("winstone", ".jar");
|
41
|
+
jarFile.deleteOnExit();
|
42
|
+
FileOutputStream outStream = new FileOutputStream(jarFile);
|
43
|
+
try {
|
44
|
+
byte[] buf = new byte[4096];
|
45
|
+
int bytesRead = 0;
|
46
|
+
while ((bytesRead = jarStream.read(buf)) != -1) {
|
47
|
+
outStream.write(buf, 0, bytesRead);
|
48
|
+
}
|
49
|
+
} finally {
|
50
|
+
jarStream.close();
|
51
|
+
outStream.close();
|
52
|
+
}
|
53
|
+
debug("winstone.jar extracted to " + jarFile.getPath());
|
54
|
+
return jarFile.toURI().toURL();
|
55
|
+
}
|
56
|
+
|
57
|
+
private void launchWinstone(URL jar) throws Exception {
|
58
|
+
URLClassLoader loader = new URLClassLoader(new URL[] {jar});
|
59
|
+
Class klass = Class.forName("winstone.Launcher", true, loader);
|
60
|
+
Method main = klass.getDeclaredMethod("main", new Class[] {String[].class});
|
61
|
+
String[] newargs = new String[args.length + 2];
|
62
|
+
newargs[0] = "--warfile=" + warfile;
|
63
|
+
newargs[1] = "--webroot=" + webroot;
|
64
|
+
System.arraycopy(args, 0, newargs, 2, args.length);
|
65
|
+
debug("invoking Winstone with: " + Arrays.deepToString(newargs));
|
66
|
+
main.invoke(null, new Object[] {newargs});
|
67
|
+
}
|
68
|
+
|
69
|
+
private void start() throws Exception {
|
70
|
+
URL u = extractWinstone();
|
71
|
+
launchWinstone(u);
|
72
|
+
}
|
73
|
+
|
74
|
+
private void debug(String msg) {
|
75
|
+
if (debug) {
|
76
|
+
System.out.println(msg);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
private void delete(File f) {
|
81
|
+
if (f.isDirectory()) {
|
82
|
+
File[] children = f.listFiles();
|
83
|
+
for (int i = 0; i < children.length; i++) {
|
84
|
+
delete(children[i]);
|
85
|
+
}
|
86
|
+
}
|
87
|
+
f.delete();
|
88
|
+
}
|
89
|
+
|
90
|
+
public void run() {
|
91
|
+
delete(webroot.getParentFile());
|
92
|
+
}
|
93
|
+
|
94
|
+
public static void main(String[] args) {
|
95
|
+
try {
|
96
|
+
new Main(args).start();
|
97
|
+
} catch (Exception e) {
|
98
|
+
System.err.println("error: " + e.toString());
|
99
|
+
if (isDebug()) {
|
100
|
+
e.printStackTrace();
|
101
|
+
}
|
102
|
+
System.exit(1);
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
private static boolean isDebug() {
|
107
|
+
return System.getProperty("warbler.debug") != null;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
data/lib/warbler/application.rb
CHANGED
@@ -26,38 +26,20 @@ class Warbler::Application < Rake::Application
|
|
26
26
|
|
27
27
|
task :default => :war
|
28
28
|
|
29
|
-
desc "Generate a configuration file to customize your war
|
30
|
-
task :config
|
31
|
-
if File.exists?(Warbler::Config::FILE) && ENV["FORCE"].nil?
|
32
|
-
puts "There's another bird sitting on my favorite branch"
|
33
|
-
puts "(file '#{Warbler::Config::FILE}' already exists. Pass argument FORCE=1 to override)"
|
34
|
-
elsif !File.directory?("config")
|
35
|
-
puts "I'm confused; my favorite branch is missing"
|
36
|
-
puts "(directory 'config' is missing)"
|
37
|
-
else
|
38
|
-
cp "#{Warbler::WARBLER_HOME}/warble.rb", Warbler::Config::FILE
|
39
|
-
end
|
40
|
-
end
|
29
|
+
desc "Generate a configuration file to customize your war"
|
30
|
+
task :config => "war:config"
|
41
31
|
|
42
|
-
desc "Install Warbler tasks in your Rails application
|
43
|
-
task :pluginize
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
File.open("vendor/plugins/warbler/tasks/warbler.rake", "w") do |f|
|
51
|
-
f.puts "require 'warbler'"
|
52
|
-
f.puts "Warbler::Task.new"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
32
|
+
desc "Install Warbler tasks in your Rails application"
|
33
|
+
task :pluginize => "war:pluginize"
|
34
|
+
|
35
|
+
desc "Feature: package gem repository inside a jar"
|
36
|
+
task :gemjar => "war:gemjar"
|
37
|
+
|
38
|
+
desc "Feature: make an executable archive"
|
39
|
+
task :executable => "war:executable"
|
56
40
|
|
57
41
|
desc "Display version of Warbler"
|
58
|
-
task :version
|
59
|
-
puts "Warbler version #{Warbler::VERSION}"
|
60
|
-
end
|
42
|
+
task :version => "war:version"
|
61
43
|
end
|
62
44
|
|
63
45
|
# Loads the project Rakefile in a separate application
|
data/lib/warbler/config.rb
CHANGED
@@ -15,17 +15,15 @@ module Warbler
|
|
15
15
|
DEFAULT_GEM_PATH = '/WEB-INF/gems'
|
16
16
|
BUILD_GEMS = %w(warbler rake rcov)
|
17
17
|
|
18
|
+
# Features: additional options controlling how the jar is built.
|
19
|
+
# Currently the following features are supported:
|
20
|
+
# - gemjar: package the gem repository in a jar file in WEB-INF/lib
|
21
|
+
# - executable: embed a web server and make the war executable
|
22
|
+
attr_accessor :features
|
23
|
+
|
18
24
|
# Deprecated: No longer has any effect.
|
19
25
|
attr_accessor :staging_dir
|
20
26
|
|
21
|
-
# A hash of files that Warbler will build into the .war file. Keys
|
22
|
-
# to the hash are filenames in the .war, values are either nil
|
23
|
-
# (for a directory entry), the source filenames or IO objects for
|
24
|
-
# temporary file contents. This will be filled with files by the
|
25
|
-
# various Warbler tasks as they run. You can add arbitrary
|
26
|
-
# filenames to this hash if you wish.
|
27
|
-
attr_accessor :files
|
28
|
-
|
29
27
|
# Directory where the war file will be written. Can be used to direct
|
30
28
|
# Warbler to place your war file directly in your application server's
|
31
29
|
# autodeploy directory. Defaults to the root of the Rails directory.
|
@@ -113,6 +111,7 @@ module Warbler
|
|
113
111
|
|
114
112
|
def initialize(warbler_home = WARBLER_HOME)
|
115
113
|
@warbler_home = warbler_home
|
114
|
+
@features = []
|
116
115
|
@dirs = TOP_DIRS.select {|d| File.directory?(d)}
|
117
116
|
@includes = FileList[]
|
118
117
|
@excludes = FileList[]
|
@@ -284,9 +283,9 @@ module Warbler
|
|
284
283
|
end
|
285
284
|
|
286
285
|
def auto_detect_rackup
|
287
|
-
return false unless File.exist?("config.ru")
|
286
|
+
return false unless File.exist?("config.ru") || !Dir['*/config.ru'].empty?
|
288
287
|
@webxml.booter = :rack
|
289
|
-
@
|
288
|
+
@webinf_files += [FileList['config.ru', '*/config.ru'].detect {|f| File.exist?(f)}]
|
290
289
|
true
|
291
290
|
end
|
292
291
|
end
|
data/lib/warbler/task.rb
CHANGED
@@ -60,15 +60,29 @@ module Warbler
|
|
60
60
|
namespace name do
|
61
61
|
define_clean_task
|
62
62
|
define_files_task
|
63
|
-
define_gemjar_task
|
64
63
|
define_jar_task
|
65
64
|
define_debug_task
|
65
|
+
define_gemjar_task
|
66
|
+
define_config_task
|
67
|
+
define_pluginize_task
|
68
|
+
define_executable_task
|
69
|
+
define_version_task
|
66
70
|
end
|
67
71
|
end
|
68
72
|
|
69
73
|
def define_main_task
|
70
74
|
desc "Create the project .war file"
|
71
75
|
task @name do
|
76
|
+
unless @config.features.empty?
|
77
|
+
@config.features.each do |feature|
|
78
|
+
t = "#@name:#{feature}"
|
79
|
+
unless Rake.application.lookup(t)
|
80
|
+
warn "unknown feature `#{feature}', ignoring"
|
81
|
+
next
|
82
|
+
end
|
83
|
+
Rake::Task[t].invoke
|
84
|
+
end
|
85
|
+
end
|
72
86
|
# Invoke this way so custom dependencies can be defined before
|
73
87
|
# the file find routine is run
|
74
88
|
["#{@name}:files", "#{@name}:jar"].each do |t|
|
@@ -91,21 +105,6 @@ module Warbler
|
|
91
105
|
end
|
92
106
|
end
|
93
107
|
|
94
|
-
def define_gemjar_task
|
95
|
-
gem_jar = Warbler::War.new
|
96
|
-
task "gemjar" => "files" do
|
97
|
-
gem_path = Regexp::quote(config.relative_gem_path)
|
98
|
-
gems = war.files.select{|k,v| k =~ %r{#{gem_path}/} }
|
99
|
-
gems.each do |k,v|
|
100
|
-
gem_jar.files[k.sub(%r{#{gem_path}/}, '')] = v
|
101
|
-
end
|
102
|
-
war.files["WEB-INF/lib/gems.jar"] = "tmp/gems.jar"
|
103
|
-
war.files.reject!{|k,v| k =~ /#{gem_path}/ }
|
104
|
-
mkdir_p "tmp"
|
105
|
-
gem_jar.create("tmp/gems.jar")
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
108
|
def define_jar_task
|
110
109
|
task "jar" do
|
111
110
|
war.create(config)
|
@@ -128,5 +127,91 @@ module Warbler
|
|
128
127
|
puts *war.webinf_filelist.exclude
|
129
128
|
end
|
130
129
|
end
|
130
|
+
|
131
|
+
def define_gemjar_task
|
132
|
+
task "gemjar" do
|
133
|
+
task "#@name:jar" => "#@name:make_gemjar"
|
134
|
+
end
|
135
|
+
|
136
|
+
gem_jar = Warbler::War.new
|
137
|
+
task "make_gemjar" => "files" do
|
138
|
+
gem_path = Regexp::quote(config.relative_gem_path)
|
139
|
+
gems = war.files.select{|k,v| k =~ %r{#{gem_path}/} }
|
140
|
+
gems.each do |k,v|
|
141
|
+
gem_jar.files[k.sub(%r{#{gem_path}/}, '')] = v
|
142
|
+
end
|
143
|
+
war.files["WEB-INF/lib/gems.jar"] = "tmp/gems.jar"
|
144
|
+
war.files.reject!{|k,v| k =~ /#{gem_path}/ }
|
145
|
+
mkdir_p "tmp"
|
146
|
+
gem_jar.add_manifest
|
147
|
+
gem_jar.create("tmp/gems.jar")
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def define_config_task
|
152
|
+
task "config" do
|
153
|
+
if File.exists?(Warbler::Config::FILE) && ENV["FORCE"].nil?
|
154
|
+
puts "There's another bird sitting on my favorite branch"
|
155
|
+
puts "(file '#{Warbler::Config::FILE}' already exists. Pass argument FORCE=1 to override)"
|
156
|
+
elsif !File.directory?("config")
|
157
|
+
puts "I'm confused; my favorite branch is missing"
|
158
|
+
puts "(directory 'config' is missing)"
|
159
|
+
else
|
160
|
+
cp "#{Warbler::WARBLER_HOME}/warble.rb", Warbler::Config::FILE
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def define_pluginize_task
|
166
|
+
task "pluginize" do
|
167
|
+
if !Dir["vendor/plugins/warbler*"].empty? && ENV["FORCE"].nil?
|
168
|
+
puts "I found an old nest in vendor/plugins; please trash it so I can make a new one"
|
169
|
+
puts "(directory vendor/plugins/warbler* exists)"
|
170
|
+
else
|
171
|
+
rm_rf FileList["vendor/plugins/warbler*"], :verbose => false
|
172
|
+
mkdir_p "vendor/plugins/warbler/tasks"
|
173
|
+
File.open("vendor/plugins/warbler/tasks/warbler.rake", "w") do |f|
|
174
|
+
f.puts "require 'warbler'"
|
175
|
+
f.puts "Warbler::Task.new"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def define_executable_task
|
182
|
+
winstone_type = ENV["WINSTONE"] || "winstone-lite"
|
183
|
+
winstone_version = ENV["WINSTONE_VERSION"] || "0.9.10"
|
184
|
+
winstone_path = "net/sourceforge/winstone/#{winstone_type}/#{winstone_version}/#{winstone_type}-#{winstone_version}.jar"
|
185
|
+
winstone_jar = File.expand_path("~/.m2/repository/#{winstone_path}")
|
186
|
+
file winstone_jar do |t|
|
187
|
+
# Not always covered in tests as these lines may not get
|
188
|
+
# executed every time if the jar is cached.
|
189
|
+
puts "Downloading #{winstone_type}.jar" #:nocov:
|
190
|
+
mkdir_p File.dirname(t.name) #:nocov:
|
191
|
+
require 'open-uri' #:nocov:
|
192
|
+
maven_repo = ENV["MAVEN_REPO"] || "http://repo2.maven.org/maven2" #:nocov:
|
193
|
+
open("#{maven_repo}/#{winstone_path}") do |stream| #:nocov:
|
194
|
+
File.open(t.name, "wb") do |f| #:nocov:
|
195
|
+
while buf = stream.read(4096) #:nocov:
|
196
|
+
f << buf #:nocov:
|
197
|
+
end #:nocov:
|
198
|
+
end #:nocov:
|
199
|
+
end #:nocov:
|
200
|
+
end
|
201
|
+
|
202
|
+
task "executable" => winstone_jar do
|
203
|
+
war.files['META-INF/MANIFEST.MF'] = StringIO.new(War::DEFAULT_MANIFEST.chomp + "Main-Class: Main\n")
|
204
|
+
war.files['Main.class'] = Zip::ZipFile.open("#{WARBLER_HOME}/lib/warbler_war.jar") do |zf|
|
205
|
+
zf.get_input_stream('Main.class') {|io| StringIO.new(io.read) }
|
206
|
+
end
|
207
|
+
war.files['WEB-INF/winstone.jar'] = winstone_jar
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def define_version_task
|
212
|
+
task "version" do
|
213
|
+
puts "Warbler version #{Warbler::VERSION}"
|
214
|
+
end
|
215
|
+
end
|
131
216
|
end
|
132
217
|
end
|
data/lib/warbler/version.rb
CHANGED
data/lib/warbler/war.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'zip/zip'
|
2
|
+
|
1
3
|
module Warbler
|
2
4
|
# Class that holds the files that will be stored in the war file.
|
3
5
|
# The #files attribute contains a hash of pathnames inside the war
|
@@ -6,6 +8,8 @@ module Warbler
|
|
6
8
|
# * Any object responding to +read+ representing an in-memory blob
|
7
9
|
# * A String filename pointing to a file on disk
|
8
10
|
class War
|
11
|
+
DEFAULT_MANIFEST = %{Manifest-Version: 1.0\nCreated-By: Warbler #{Warbler::VERSION}\n\n}
|
12
|
+
|
9
13
|
attr_reader :files
|
10
14
|
attr_reader :webinf_filelist
|
11
15
|
|
@@ -56,11 +60,13 @@ module Warbler
|
|
56
60
|
end
|
57
61
|
|
58
62
|
# Add a manifest file either from config or by making a default manifest.
|
59
|
-
def add_manifest(config)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
63
|
+
def add_manifest(config = nil)
|
64
|
+
unless @files.keys.detect{|k| k =~ /^META-INF\/MANIFEST\.MF$/i}
|
65
|
+
if config && config.manifest_file
|
66
|
+
@files['META-INF/MANIFEST.MF'] = config.manifest_file
|
67
|
+
else
|
68
|
+
@files['META-INF/MANIFEST.MF'] = StringIO.new(DEFAULT_MANIFEST)
|
69
|
+
end
|
64
70
|
end
|
65
71
|
end
|
66
72
|
|
data/lib/warbler.rb
CHANGED
@@ -28,10 +28,10 @@ module Warbler
|
|
28
28
|
self.framework_detection = true
|
29
29
|
end
|
30
30
|
|
31
|
+
require 'warbler/version'
|
31
32
|
require 'warbler/gems'
|
32
33
|
require 'warbler/config'
|
33
34
|
require 'warbler/war'
|
34
35
|
require 'warbler/task'
|
35
36
|
require 'warbler/application'
|
36
37
|
require 'warbler/runtime'
|
37
|
-
require 'warbler/version'
|
data/lib/warbler_war.jar
CHANGED
Binary file
|
@@ -77,7 +77,6 @@ describe Warbler::Application do
|
|
77
77
|
|
78
78
|
it "should define a pluginize task for adding the tasks to a Rails application" do
|
79
79
|
ARGV.unshift "pluginize"
|
80
|
-
# silence { Warbler::Application.new.run }
|
81
80
|
Warbler::Application.new.run
|
82
81
|
File.exist?("vendor/plugins/warbler/tasks/warbler.rake").should be_true
|
83
82
|
end
|
@@ -85,4 +84,10 @@ describe Warbler::Application do
|
|
85
84
|
it "should provide a means to load the project Rakefile" do
|
86
85
|
Warbler::Application.new.load_project_rakefile
|
87
86
|
end
|
87
|
+
|
88
|
+
it "should define a gemjar task for setting up gem packaging inside a jar" do
|
89
|
+
ARGV.unshift "gemjar"
|
90
|
+
Warbler::Application.new.run
|
91
|
+
Rake::Task['war:jar'].prerequisites.should include('war:make_gemjar')
|
92
|
+
end
|
88
93
|
end
|
data/spec/warbler/task_spec.rb
CHANGED
@@ -40,8 +40,8 @@ describe Warbler::Task do
|
|
40
40
|
File.exist?(war_file).should == false
|
41
41
|
end
|
42
42
|
|
43
|
-
it "should define a
|
44
|
-
silence { Rake::Task["warble:
|
43
|
+
it "should define a make_gemjar task for storing gems in a jar file" do
|
44
|
+
silence { Rake::Task["warble:make_gemjar"].invoke }
|
45
45
|
File.exist?("tmp/gems.jar").should == true
|
46
46
|
@task.war.files.keys.should_not include(%r{WEB-INF\/gems})
|
47
47
|
@task.war.files.keys.should include("WEB-INF/lib/gems.jar")
|
@@ -62,6 +62,22 @@ describe Warbler::Task do
|
|
62
62
|
File.exist?("#{@config.war_name}.war").should == true
|
63
63
|
end
|
64
64
|
|
65
|
+
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")
|
69
|
+
end
|
70
|
+
|
71
|
+
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'/
|
74
|
+
end
|
75
|
+
|
76
|
+
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')
|
79
|
+
end
|
80
|
+
|
65
81
|
it "should be able to define all tasks successfully" do
|
66
82
|
Warbler::Task.new "warble", @config
|
67
83
|
end
|
data/spec/warbler/war_spec.rb
CHANGED
@@ -158,6 +158,12 @@ describe Warbler::War do
|
|
158
158
|
@war.files['META-INF/MANIFEST.MF'].should == "manifest"
|
159
159
|
end
|
160
160
|
|
161
|
+
it "should not add a manifest if one already exists" do
|
162
|
+
@war.files['META-INF/MANIFEST.MF'] = 'manifest'
|
163
|
+
@war.add_manifest(@config)
|
164
|
+
@war.files['META-INF/MANIFEST.MF'].should == "manifest"
|
165
|
+
end
|
166
|
+
|
161
167
|
it "should be able to exclude files from the .war" do
|
162
168
|
@config.excludes += FileList['lib/tasks/utils.rake']
|
163
169
|
@war.apply(@config)
|
@@ -290,8 +296,8 @@ describe Warbler::War do
|
|
290
296
|
rackup = "run Proc.new {|env| [200, {}, ['Hello World']]}"
|
291
297
|
File.open("config.ru", "w") {|f| f << rackup }
|
292
298
|
@config = Warbler::Config.new
|
293
|
-
@config
|
294
|
-
@config.
|
299
|
+
@war.apply(@config)
|
300
|
+
@war.files['WEB-INF/config.ru'].should == 'config.ru'
|
295
301
|
end
|
296
302
|
|
297
303
|
it "should automatically add Rails.configuration.gems to the list of gems" do
|
data/warble.rb
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
|
4
4
|
# Warbler web application assembly configuration file
|
5
5
|
Warbler::Config.new do |config|
|
6
|
+
# Features: additional options controlling how the jar is built.
|
7
|
+
# Currently the following features are supported:
|
8
|
+
# - gemjar: package the gem repository in a jar file in WEB-INF/lib
|
9
|
+
# config.features = %w(gemjar)
|
10
|
+
|
6
11
|
# Application directories to be included in the webapp.
|
7
12
|
config.dirs = %w(app config lib log vendor tmp)
|
8
13
|
|
@@ -93,8 +98,15 @@ Warbler::Config.new do |config|
|
|
93
98
|
# config.webxml.booter = :rails
|
94
99
|
|
95
100
|
# When using the :rack booter, "Rackup" script to use.
|
101
|
+
# - For 'rackup.path', the value points to the location of the rackup
|
102
|
+
# script in the web archive file. You need to make sure this file
|
103
|
+
# gets included in the war, possibly by adding it to config.includes
|
104
|
+
# or config.webinf_files above.
|
105
|
+
# - For 'rackup', the rackup script you provide as an inline string
|
106
|
+
# is simply embedded in web.xml.
|
96
107
|
# The script is evaluated in a Rack::Builder to load the application.
|
97
108
|
# Examples:
|
109
|
+
# config.webxml.rackup.path = 'WEB-INF/hello.ru'
|
98
110
|
# config.webxml.rackup = %{require './lib/demo'; run Rack::Adapter::Camping.new(Demo)}
|
99
111
|
# config.webxml.rackup = require 'cgi' && CGI::escapeHTML(File.read("config.ru"))
|
100
112
|
|
metadata
CHANGED
@@ -3,90 +3,90 @@ name: warbler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
version: 1.0
|
6
|
+
- 1
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 1.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
|
-
|
12
|
+
- Nick Sieger
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-13 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
segments:
|
26
|
+
- 0
|
27
|
+
- 8
|
28
|
+
- 7
|
29
|
+
version: 0.8.7
|
30
|
+
prerelease: false
|
31
|
+
type: :runtime
|
32
|
+
name: rake
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 1
|
41
|
+
- 4
|
42
|
+
- 0
|
43
|
+
version: 1.4.0
|
44
|
+
prerelease: false
|
45
|
+
type: :runtime
|
46
|
+
name: jruby-jars
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
- 9
|
56
|
+
- 8
|
57
|
+
version: 0.9.8
|
58
|
+
prerelease: false
|
59
|
+
type: :runtime
|
60
|
+
name: jruby-rack
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
- 9
|
70
|
+
- 4
|
71
|
+
version: 0.9.4
|
72
|
+
prerelease: false
|
73
|
+
type: :runtime
|
74
|
+
name: rubyzip
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
segments:
|
82
|
+
- 2
|
83
|
+
- 0
|
84
|
+
- 4
|
85
|
+
version: 2.0.4
|
86
|
+
prerelease: false
|
87
|
+
type: :development
|
88
|
+
name: rubyforge
|
89
|
+
version_requirements: *id005
|
90
90
|
description: |-
|
91
91
|
Warbler is a gem to make a .war file out of a Rails, Merb, or Rack-based
|
92
92
|
application. The intent is to provide a minimal, flexible, ruby-like way to
|
@@ -94,87 +94,88 @@ description: |-
|
|
94
94
|
server.
|
95
95
|
email: nick@nicksieger.com
|
96
96
|
executables:
|
97
|
-
|
97
|
+
- warble
|
98
98
|
extensions: []
|
99
99
|
|
100
100
|
extra_rdoc_files:
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
101
|
+
- History.txt
|
102
|
+
- LICENSE.txt
|
103
|
+
- Manifest.txt
|
104
|
+
- README.txt
|
105
105
|
files:
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
106
|
+
- Gemfile
|
107
|
+
- History.txt
|
108
|
+
- LICENSE.txt
|
109
|
+
- Manifest.txt
|
110
|
+
- README.txt
|
111
|
+
- Rakefile
|
112
|
+
- bin/warble
|
113
|
+
- ext/Main.java
|
114
|
+
- ext/WarblerWar.java
|
115
|
+
- ext/WarblerWarService.java
|
116
|
+
- lib/warbler.rb
|
117
|
+
- lib/warbler/application.rb
|
118
|
+
- lib/warbler/config.rb
|
119
|
+
- lib/warbler/gems.rb
|
120
|
+
- lib/warbler/runtime.rb
|
121
|
+
- lib/warbler/task.rb
|
122
|
+
- lib/warbler/version.rb
|
123
|
+
- lib/warbler/war.rb
|
124
|
+
- lib/warbler_war.jar
|
125
|
+
- spec/sample/app/controllers/application.rb
|
126
|
+
- spec/sample/app/helpers/application_helper.rb
|
127
|
+
- spec/sample/config/boot.rb
|
128
|
+
- spec/sample/config/database.yml
|
129
|
+
- spec/sample/config/environment.rb
|
130
|
+
- spec/sample/config/environments/development.rb
|
131
|
+
- spec/sample/config/environments/production.rb
|
132
|
+
- spec/sample/config/environments/test.rb
|
133
|
+
- spec/sample/config/initializers/inflections.rb
|
134
|
+
- spec/sample/config/initializers/mime_types.rb
|
135
|
+
- spec/sample/config/initializers/new_rails_defaults.rb
|
136
|
+
- spec/sample/config/routes.rb
|
137
|
+
- spec/sample/lib/tasks/utils.rake
|
138
|
+
- spec/sample/public/404.html
|
139
|
+
- spec/sample/public/422.html
|
140
|
+
- spec/sample/public/500.html
|
141
|
+
- spec/sample/public/favicon.ico
|
142
|
+
- spec/sample/public/index.html
|
143
|
+
- spec/sample/public/robots.txt
|
144
|
+
- spec/spec_helper.rb
|
145
|
+
- spec/warbler/application_spec.rb
|
146
|
+
- spec/warbler/config_spec.rb
|
147
|
+
- spec/warbler/gems_spec.rb
|
148
|
+
- spec/warbler/task_spec.rb
|
149
|
+
- spec/warbler/war_spec.rb
|
150
|
+
- warble.rb
|
151
|
+
- web.xml.erb
|
151
152
|
has_rdoc: true
|
152
153
|
homepage: http://caldersphere.rubyforge.org/warbler
|
153
154
|
licenses: []
|
154
155
|
|
155
156
|
post_install_message:
|
156
157
|
rdoc_options:
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
158
|
+
- --main
|
159
|
+
- README.txt
|
160
|
+
- -SHN
|
161
|
+
- -f
|
162
|
+
- darkfish
|
162
163
|
require_paths:
|
163
|
-
|
164
|
+
- lib
|
164
165
|
required_ruby_version: !ruby/object:Gem::Requirement
|
165
166
|
requirements:
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
segments:
|
170
|
+
- 0
|
171
|
+
version: "0"
|
171
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
173
|
requirements:
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
segments:
|
177
|
+
- 0
|
178
|
+
version: "0"
|
178
179
|
requirements: []
|
179
180
|
|
180
181
|
rubyforge_project: caldersphere
|