warbler 2.0.0.pre1 → 2.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4d3af37ee387e01352e92875710cf763c45b05f9
4
- data.tar.gz: 747124311e18f4c18b21e7c7232dc113468fcd27
3
+ metadata.gz: 60e9e20a37c15f1e428edab19a47965dbf9e0e5c
4
+ data.tar.gz: bf46d3626c310d7eb5ee69b5a4fb56b7aa59e59d
5
5
  SHA512:
6
- metadata.gz: 3414140028e4b7ff61c4c4d392e6b279ce7af0e87c2631061fe1b73893dfae0e6879e9dfc1e8946905bd0c33f2160c1cc1a281350ffa2223e9ca08c62b6bbcae
7
- data.tar.gz: ba036780cf02f618ec08035fa126b9f873a50db08d000cf209a3f34af05ef492e55719cc02b82fe14bf177a4030ac5470fdb67d887b6d55e8b3147f3c1bd9f27
6
+ metadata.gz: d87ad8be81920022dfb982775329e0988f918eec6a85f10f173319d469ee039baa50234056f8d499e5538f4d2091f2bbed80ad182dae5de895dfafc2d7732024
7
+ data.tar.gz: 787fc7fdd6f1bc683c33376d8de5731bc84ce50df92b647993ec1a7bfb67ae75a8ad5f74b78ff15ae8a7fd154337b71bdff0168e5215a5ec42733b113d96d43f
data/.travis.yml CHANGED
@@ -1,17 +1,42 @@
1
+ sudo: false
2
+ language: ruby
3
+ script: bundle exec rake spec
1
4
  rvm:
2
- - jruby-9.0.0.0.pre1
5
+ - jruby-9.0.0.0.pre2
3
6
  jdk:
4
7
  - oraclejdk8
5
8
  branches:
6
9
  only:
7
10
  - master
8
11
  - 2.x-dev
12
+ - /^test-.*/
13
+ before_install:
14
+ - ([ "$BUNDLER_VERSION" ] && gem uninstall bundler --all --force && gem install bundler -v "$BUNDLER_VERSION") || true
15
+ - bundle --version
16
+ before_script:
17
+ - export JRUBY_OPTS="$JRUBY_OPTS --server -Xcext.enabled=false -Xcompile.invokedynamic=false"
9
18
  env:
10
19
  - JRUBY_OPTS="--server -Xcompile.invokedynamic=false"
11
20
  matrix:
12
21
  include:
13
22
  - rvm: jruby-head
14
23
  env: JRUBY_OPTS="--server -Xcompile.invokedynamic=false"
24
+ matrix:
25
+ include:
26
+ - rvm: jruby-head
27
+ env: JRUBY_OPTS="" BUNDLER_VERSION="~> 1.9.9"
28
+ - rvm: jruby-1.7.20
29
+ env: JRUBY_OPTS="" BUNDLER_VERSION="~> 1.10.2"
30
+ - rvm: 1.8.7
31
+ env: BUNDLER_VERSION="~> 1.6.9"
32
+ - rvm: 1.9.2
33
+ env: BUNDLER_VERSION="~> 1.7.9"
34
+ - rvm: 1.9.3
35
+ env: BUNDLER_VERSION="~> 1.8.9"
36
+ - rvm: jruby
37
+ env: MAVEN_OPTS="-XX:MaxPermSize=128m"
38
+ script: mvn clean verify
39
+ >>>>>>> master
15
40
  allow_failures:
16
41
  - rvm: jruby-head
17
42
  notifications:
@@ -22,7 +47,3 @@ notifications:
22
47
  on_failure: always
23
48
  template:
24
49
  - "%{repository} (%{branch}:%{commit} by %{author}): %{message} (%{build_url})"
25
- before_install:
26
- - sudo apt-get update && sudo apt-get install git
27
- - git fetch --unshallow
28
- - gem install bundler --pre
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org/"
1
+ source "https://rubygems.org/"
2
2
 
3
3
  gemspec
4
4
 
data/History.txt CHANGED
@@ -1,5 +1,9 @@
1
1
  == 2x-dev
2
2
 
3
+ == 1.4.9
4
+
5
+ - Fixed a bug in detecting default PORT for executable WAR
6
+ - #332: Warbler not picking up new Bundler convention of 'exe' directory for executables
3
7
 
4
8
  - Added the ability to set custom port for Jetty launcher with
5
9
  warbler.port or PORT env var
data/Mavenfile CHANGED
@@ -7,7 +7,8 @@ gemspec( :jar => 'warbler_jar.jar',
7
7
 
8
8
  # just dump the POM as pom.xml as read-only file
9
9
  properties( 'tesla.dump.pom' => 'pom.xml',
10
- 'tesla.dump.readOnly' => true )
10
+ 'tesla.dump.readOnly' => true,
11
+ 'jruby.plugins.version' => '1.0.10' )
11
12
 
12
13
  # dependencies needed for compilation
13
14
  scope :provided do
data/README.rdoc CHANGED
@@ -1,7 +1,7 @@
1
1
  = Warbler {<img src="https://badge.fury.io/rb/warbler.svg" alt="Gem Version" />}[http://badge.fury.io/rb/warbler] {<img src="https://travis-ci.org/jruby/warbler.png" />}[https://travis-ci.org/jruby/warbler]
2
2
 
3
- Warbler is a gem to make a Java jar or war file out of any Ruby, Rails or Rack
4
- application. Warbler provides a minimal, flexible, Ruby-like way to bundle up
3
+ Warbler is a gem to make a Java jar or war file out of any Ruby, Rails or Rack
4
+ application. Warbler provides a minimal, flexible, Ruby-like way to bundle up
5
5
  all of your application files for deployment to a Java environment.
6
6
 
7
7
  Warbler provides a sane set of out-of-the box defaults that should allow most
@@ -18,7 +18,7 @@ Version 1.4.x of Warbler supports versions of JRuby up to 1.7.x. The {2.x-dev br
18
18
  3. Choose one:
19
19
 
20
20
  * For a web project, deploy your +myapp.war+ file to your favorite Java application server.
21
-
21
+
22
22
  * For a standalone applications, just run it: <tt>java -jar myapp.jar</tt>.
23
23
 
24
24
  == Usage
@@ -43,9 +43,9 @@ Type <tt>warble</tt> to create the jar or war file.
43
43
 
44
44
  == Features
45
45
 
46
- Warbler "features" are small Rake tasks that run before the creation of the war
47
- file and make manipulations to the archive structure. For instance, the
48
- +executable+ feature makes your war file capable of running on its own,
46
+ Warbler "features" are small Rake tasks that run before the creation of the war
47
+ file and make manipulations to the archive structure. For instance, the
48
+ +executable+ feature makes your war file capable of running on its own,
49
49
  without a servlet container (using an embedded web server) :
50
50
 
51
51
  warble executable war
@@ -64,73 +64,73 @@ Currently, the following features are available :
64
64
  number of files in the .war. This is mostly useful for Google
65
65
  AppEngine where the number of files per application has a limit.
66
66
  (Note: not applicable for jar-based applications.)
67
- * +runnable+: This makes a (standard Java) runnable .war archive thus you can
68
- execute binary bundled (gem) commands e.g. "rake". You should use the -S
69
- switch to specify the binary followed by any arguments in takes e.g.
67
+ * +runnable+: This makes a (standard Java) runnable .war archive thus you can
68
+ execute binary bundled (gem) commands e.g. "rake". You should use the -S
69
+ switch to specify the binary followed by any arguments in takes e.g.
70
70
  <tt>java -jar myrailsapp.war -S rake db:migrate</tt>.
71
- * +executable+: This bundles an embedded web server into the .war so that it
72
- can either be deployed into a traditional java web server or run as a
71
+ * +executable+: This bundles an embedded web server into the .war so that it
72
+ can either be deployed into a traditional java web server or run as a
73
73
  standalone application using <tt>java -jar myapp.war</tt>.
74
74
  (Note: jar-based applications are executable by default.)
75
75
  * +compiled+: This uses +jrubyc+ to precompile all .rb files in your application
76
- to .class files and includes those in the .war instead of the Ruby sources.
77
- NOTE: The war file will still contain .rb files, but they will be short stubs
76
+ to .class files and includes those in the .war instead of the Ruby sources.
77
+ NOTE: The war file will still contain .rb files, but they will be short stubs
78
78
  containing the following code : <tt>load __FILE__.sub(/\.rb$/, '.class')</tt>
79
79
 
80
- Features may form the basis for a third-party plugin system (in the future)
80
+ Features may form the basis for a third-party plugin system (in the future)
81
81
  if there is demand.
82
82
 
83
- NOTE: Feature tasks must be included in the same command invocation and
84
- inserted before the +war+ task in order to take effect. For example,
85
- <tt>warble compiled; warble war</tt> does not compile and obfuscate +.rb+
86
- sources because the second invocation of +warble+ does not run the +compiled+
83
+ NOTE: Feature tasks must be included in the same command invocation and
84
+ inserted before the +war+ task in order to take effect. For example,
85
+ <tt>warble compiled; warble war</tt> does not compile and obfuscate +.rb+
86
+ sources because the second invocation of +warble+ does not run the +compiled+
87
87
  feature and creates a basic war with the sources included, make sure you run :
88
88
 
89
89
  warble compiled war
90
90
 
91
- or, if it's important that the war always be compiled, use the option above to
91
+ or, if it's important that the war always be compiled, use the option above to
92
92
  put the feature in your <tt>config/warble.rb</tt>.
93
93
 
94
94
  == War or Jar?
95
95
 
96
- War-based projects are for Rails, Merb, or Rack-based web applications.
97
- They usually contain a +config/environment.rb+ file, a +config/init.rb+ file,
96
+ War-based projects are for Rails, Merb, or Rack-based web applications.
97
+ They usually contain a +config/environment.rb+ file, a +config/init.rb+ file,
98
98
  or a +config.ru+ file.
99
- The presence of these files are used to determine if the project is a web
99
+ The presence of these files are used to determine if the project is a web
100
100
  application, and thus a Java EE compatible war file is built for the project.
101
101
 
102
- Jar-based projects are for standalone Ruby applications. Usually a Ruby
103
- application has a launcher script in the +bin+ directory and Ruby code
104
- in the <tt>lib</tt> directory. Warbler packages the application so that
102
+ Jar-based projects are for standalone Ruby applications. Usually a Ruby
103
+ application has a launcher script in the +bin+ directory and Ruby code
104
+ in the <tt>lib</tt> directory. Warbler packages the application so that
105
105
  <tt>java -jar myapp.jar</tt> runs the launcher script.
106
106
 
107
107
  == Jar Files
108
108
 
109
109
  === Gem Specification (gemspec) Files
110
110
 
111
- If your project has a <tt>.gemspec</tt> file in the top directory, it will be
112
- used to configure the project's dependencies, launcher script, require paths,
113
- and the files to be included in the archive. For best results make sure your
111
+ If your project has a <tt>.gemspec</tt> file in the top directory, it will be
112
+ used to configure the project's dependencies, launcher script, require paths,
113
+ and the files to be included in the archive. For best results make sure your
114
114
  gemspec specifies all of the following attributes:
115
115
 
116
116
  * +executables+
117
117
  * +require_paths+
118
118
  * runtime dependencies added with +add_dependency+
119
119
 
120
- If your project do not have a <tt>.gemspec</tt>, Warbler will attempt to guess
121
- the launcher from the contents of the <tt>bin</tt> directory and use the
122
- <tt>lib</tt> directory as the lone require path. All files in the project
120
+ If your project do not have a <tt>.gemspec</tt>, Warbler will attempt to guess
121
+ the launcher from the contents of the <tt>bin</tt> directory and use the
122
+ <tt>lib</tt> directory as the lone require path. All files in the project
123
123
  will be included in the archive.
124
124
 
125
125
  === Bundler
126
126
 
127
- Applications that use Bundler[http://gembundler.com/], detected via presence of
128
- a +Gemfile+, will have the gems packaged up into the archive along with the
129
- Gemfile. The Bundler groups named ":development", ":test" and ":assets" will be
130
- excluded by default, unless you specify with <tt>config.bundle_without</tt> in
127
+ Applications that use Bundler[http://gembundler.com/], detected via presence of
128
+ a +Gemfile+, will have the gems packaged up into the archive along with the
129
+ Gemfile. The Bundler groups named ":development", ":test" and ":assets" will be
130
+ excluded by default, unless you specify with <tt>config.bundle_without</tt> in
131
131
  +config/warble.rb+.
132
132
 
133
- Warbler supports Bundler for gems and git repositories, but not for plain path
133
+ Warbler supports Bundler for gems and git repositories, but not for plain path
134
134
  components. Warbler will warn when a +:path+ component is found in the +Gemfile+
135
135
  and will refuse to include it in the archive.
136
136
 
@@ -146,18 +146,18 @@ via presence of a +Jarfile+, will have the jars packaged up into the archive. th
146
146
  Rails applications are detected automatically and configured appropriately.
147
147
  The following items are set up for you:
148
148
 
149
- * Your application runs in the +production+ environment by default.
149
+ * Your application runs in the +production+ environment by default.
150
150
  Change it in +config/warble.rb+ (see below).
151
151
  * The Rails gem is packaged if you haven't vendored Rails (Rails <= 2.x).
152
152
  * Other gems configured in Rails.configuration.gems are packaged (2.1 - 2.3)
153
- * Multi-thread-safe execution (as introduced in Rails 2.2) is detected and
153
+ * Multi-thread-safe execution (as introduced in Rails 2.2) is detected and
154
154
  runtime pooling is disabled.
155
155
 
156
156
  === Other Rack-based applications
157
157
 
158
- If you have a +config.ru+ file in the top directory or one of the immediate
159
- subdirectories of your application, it will be included and used as the rackup
160
- script for your Rack-based application. You will probably need to specify
158
+ If you have a +config.ru+ file in the top directory or one of the immediate
159
+ subdirectories of your application, it will be included and used as the rackup
160
+ script for your Rack-based application. You will probably need to specify
161
161
  framework and application gems in +config/warble.rb+ unless you're using Bundler
162
162
  to manage your gems. <tt>ENV['RACK_ENV']</tt> will be set to +production+.
163
163
 
@@ -166,13 +166,13 @@ of how to configure Warbler to package Camping and Sinatra apps.
166
166
 
167
167
  === Configuration auto-detect notes
168
168
 
169
- * Warbler will load the +environment+ Rake task in a Rails application to try
170
- to detect some configuration. If you don't have database access in the
171
- environment where you package your application, you may wish to set
172
- <tt>Warbler.framework_detection = false</tt> at the top of +config.rb+.
173
- In this case you may need to specify additional details such as booter, gems
169
+ * Warbler will load the +environment+ Rake task in a Rails application to try
170
+ to detect some configuration. If you don't have database access in the
171
+ environment where you package your application, you may wish to set
172
+ <tt>Warbler.framework_detection = false</tt> at the top of +config.rb+.
173
+ In this case you may need to specify additional details such as booter, gems
174
174
  and other settings that would normally be gleaned from the app configuration.
175
- * Is it possible to more generally detect what gems an application uses?
175
+ * Is it possible to more generally detect what gems an application uses?
176
176
  <tt>Gem.loaded_specs</tt> is available, but the application needs to be
177
177
  loaded first before its contents are reliable.
178
178
 
@@ -185,7 +185,7 @@ doing this. With the gem, simply run
185
185
 
186
186
  warble config
187
187
 
188
- Finally, edit the +config/warble.rb+ to your taste. The generated file is
188
+ Finally, edit the +config/warble.rb+ to your taste. The generated file is
189
189
  fully-documented with the available options and default values.
190
190
 
191
191
  === War layout
@@ -244,7 +244,7 @@ lock the <tt>rubyzip</tt> gem to a version before 1.0.0.
244
244
 
245
245
  == Troubleshooting
246
246
 
247
- If Warbler isn't packaging the files you were expecting, use the +war:debug+
247
+ If Warbler isn't packaging the files you were expecting, use the +war:debug+
248
248
  task to give you more insight into what's going on.
249
249
 
250
250
  If you think you found a bug, please file one at
@@ -262,7 +262,7 @@ https://github.com/jruby/warbler/tarball/master.
262
262
 
263
263
  == Development
264
264
 
265
- You can develop Warbler with any implementation of Ruby. To write Warbler code
265
+ You can develop Warbler with any implementation of Ruby. To write Warbler code
266
266
  and run specs, you need to have Bundler installed and run <tt>bundle</tt> once.
267
267
 
268
268
  After that, simply run <tt>rake</tt>.
@@ -284,6 +284,8 @@ http://maven.apache.org/ Be aware the homebrew installs 3.0.5, which doesn't wor
284
284
 
285
285
  Warbler is provided under the terms of the MIT license.
286
286
 
287
- Warbler (c) 2010-2013 Engine Yard, Inc.
287
+ Warbler (c) 2013-2015 The JRuby project
288
+
289
+ Warbler (c) 2010-2012 Engine Yard, Inc.
288
290
 
289
291
  Warbler (c) 2007-2009 Sun Microsystems, Inc.
data/Rakefile CHANGED
@@ -6,15 +6,15 @@
6
6
  # See the file LICENSE.txt for details.
7
7
  #++
8
8
 
9
- unless defined? Bundler
10
- warn "\nPlease `gem install bundler' and run `bundle install' to ensure you have all dependencies and run inside a bundler context 'bundle exec rake'.\n\n"
9
+ begin
10
+ require 'bundler'
11
+ rescue LoadError
12
+ warn "\nPlease `gem install bundler' and run `bundle install' to ensure you have all dependencies.\n\n"
13
+ else
14
+ require 'bundler/gem_helper'
15
+ Bundler::GemHelper.install_tasks :dir => File.dirname(__FILE__)
11
16
  end
12
17
 
13
- require 'bundler/gem_helper'
14
- gem_helper = Bundler::GemHelper.new(File.dirname(__FILE__))
15
- gem_helper.install
16
- gemspec = gem_helper.gemspec
17
-
18
18
  require 'rake/clean'
19
19
  CLEAN << "pkg" << "doc" << Dir['integration/**/target']
20
20
 
@@ -42,8 +42,13 @@ end
42
42
  # the jar tasks is part of maven-tasks
43
43
  task :build => :jar
44
44
 
45
+ load_gemspec = lambda do
46
+ Gem::Specification.load(File.expand_path('warbler.gemspec', File.dirname(__FILE__)))
47
+ end
48
+
45
49
  require 'rdoc/task'
46
50
  RDoc::Task.new(:docs) do |rd|
51
+ gemspec = load_gemspec.call
47
52
  rd.rdoc_dir = "doc"
48
53
  rd.rdoc_files.include("README.rdoc", "History.txt", "LICENSE.txt")
49
54
  rd.rdoc_files += gemspec.require_paths
@@ -54,6 +59,7 @@ end
54
59
  task :release_docs => :docs do
55
60
  config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml"))) rescue nil
56
61
  if config
62
+ gemspec = load_gemspec.call
57
63
  dir = "/var/www/gforge-projects/#{gemspec.rubyforge_project}/#{gemspec.name}"
58
64
  dest = "#{config["username"]}@rubyforge.org:#{dir}"
59
65
  sh %{rsync -rl --delete doc/ #{dest}}
data/ext/JarMain.java CHANGED
@@ -28,8 +28,6 @@ public class JarMain implements Runnable {
28
28
 
29
29
  static final String MAIN = "/" + JarMain.class.getName().replace('.', '/') + ".class";
30
30
 
31
- final boolean debug = isDebug();
32
-
33
31
  protected final String[] args;
34
32
  protected final String archive;
35
33
  private final String path;
@@ -126,7 +124,7 @@ public class JarMain implements Runnable {
126
124
  }
127
125
 
128
126
  protected Object newScriptingContainer(final URL[] jars) throws Exception {
129
- System.setProperty("org.jruby.embed.class.path", "");
127
+ setSystemProperty("org.jruby.embed.class.path", "");
130
128
  classLoader = new URLClassLoader(jars);
131
129
  Class scriptingContainerClass = Class.forName("org.jruby.embed.ScriptingContainer", true, classLoader);
132
130
  Object scriptingContainer = scriptingContainerClass.newInstance();
@@ -164,12 +162,12 @@ public class JarMain implements Runnable {
164
162
  }
165
163
 
166
164
  protected void debug(String msg, Throwable t) {
167
- if (debug) System.out.println(msg);
168
- if (debug && t != null) t.printStackTrace(System.out);
165
+ if ( isDebug() ) System.out.println(msg);
166
+ if ( isDebug() && t != null ) t.printStackTrace(System.out);
169
167
  }
170
168
 
171
169
  protected static void debug(Throwable t) {
172
- if (isDebug()) t.printStackTrace(System.out);
170
+ if ( isDebug() ) t.printStackTrace(System.out);
173
171
  }
174
172
 
175
173
  protected void warn(String msg) {
@@ -225,9 +223,9 @@ public class JarMain implements Runnable {
225
223
  }
226
224
 
227
225
  protected static void doStart(final JarMain main) {
226
+ int exit;
228
227
  try {
229
- int exit = main.start();
230
- if (isSystemExitEnabled()) System.exit(exit);
228
+ exit = main.start();
231
229
  }
232
230
  catch (Exception e) {
233
231
  Throwable t = e;
@@ -235,7 +233,13 @@ public class JarMain implements Runnable {
235
233
  t = t.getCause();
236
234
  }
237
235
  error(e.toString(), t);
238
- System.exit(1);
236
+ exit = 1;
237
+ }
238
+ try {
239
+ if ( isSystemExitEnabled() ) System.exit(exit);
240
+ }
241
+ catch (SecurityException e) {
242
+ debug(e);
239
243
  }
240
244
  }
241
245
 
@@ -262,17 +266,59 @@ public class JarMain implements Runnable {
262
266
  }
263
267
  }
264
268
 
265
- static boolean isDebug() {
266
- return Boolean.getBoolean("warbler.debug");
269
+ private static final boolean debug;
270
+ static {
271
+ debug = Boolean.parseBoolean( getSystemProperty("warbler.debug", "false") );
267
272
  }
268
273
 
274
+ static boolean isDebug() { return debug; }
275
+
269
276
  /**
270
277
  * if warbler.skip_system_exit system property is defined, we will not
271
278
  * call System.exit in the normal flow. System.exit can cause problems
272
279
  * for wrappers like procrun
273
280
  */
274
281
  private static boolean isSystemExitEnabled(){
275
- return System.getProperty("warbler.skip_system_exit") == null; //omission enables System.exit use
282
+ return getSystemProperty("warbler.skip_system_exit") == null; //omission enables System.exit use
283
+ }
284
+
285
+ static String getSystemProperty(final String name) {
286
+ return getSystemProperty(name, null);
287
+ }
288
+
289
+ static String getSystemProperty(final String name, final String defaultValue) {
290
+ try {
291
+ return System.getProperty(name, defaultValue);
292
+ }
293
+ catch (SecurityException e) {
294
+ return defaultValue;
295
+ }
296
+ }
297
+
298
+ static boolean setSystemProperty(final String name, final String value) {
299
+ try {
300
+ System.setProperty(name, value);
301
+ return true;
302
+ }
303
+ catch (SecurityException e) {
304
+ return false;
305
+ }
306
+ }
307
+
308
+ static String getENV(final String name) {
309
+ return getENV(name, null);
310
+ }
311
+
312
+ static String getENV(final String name, final String defaultValue) {
313
+ try {
314
+ if ( System.getenv().containsKey(name) ) {
315
+ return System.getenv().get(name);
316
+ }
317
+ return defaultValue;
318
+ }
319
+ catch (SecurityException e) {
320
+ return defaultValue;
321
+ }
276
322
  }
277
323
 
278
324
  }
data/ext/WarMain.java CHANGED
@@ -64,6 +64,7 @@ public class WarMain extends JarMain {
64
64
  static final String MAIN = "/" + WarMain.class.getName().replace('.', '/') + ".class";
65
65
  static final String WEBSERVER_PROPERTIES = "/WEB-INF/webserver.properties";
66
66
  static final String WEBSERVER_JAR = "/WEB-INF/webserver.jar";
67
+ static final String WEBSERVER_CONFIG = "/WEB-INF/webserver.xml";
67
68
 
68
69
  /**
69
70
  * jruby arguments, consider the following command :
@@ -140,20 +141,24 @@ public class WarMain extends JarMain {
140
141
  if ( is != null ) props.load(is);
141
142
  } catch (Exception e) { }
142
143
 
143
- String port = System.getProperty("warbler.port", System.getenv("PORT"));
144
+ String port = getSystemProperty("warbler.port", getENV("PORT"));
144
145
  port = port == null ? "8080" : port;
145
- for (Map.Entry entry : props.entrySet()) {
146
+ String webserverConfig = getSystemProperty("warbler.webserver_config", getENV("WARBLER_WEBSERVER_CONFIG"));
147
+ String embeddedWebserverConfig = new URI("jar", entryPath(WEBSERVER_CONFIG), null).toURL().toString();
148
+ webserverConfig = webserverConfig == null ? embeddedWebserverConfig : webserverConfig;
149
+ for ( Map.Entry entry : props.entrySet() ) {
146
150
  String val = (String) entry.getValue();
147
151
  val = val.replace("{{warfile}}", archive).
148
152
  replace("{{port}}", port).
153
+ replace("{{config}}", webserverConfig).
149
154
  replace("{{webroot}}", webroot.getAbsolutePath());
150
155
  entry.setValue(val);
151
156
  }
152
157
 
153
158
  if (props.getProperty("props") != null) {
154
159
  String[] propsToSet = props.getProperty("props").split(",");
155
- for (String key : propsToSet) {
156
- System.setProperty(key, props.getProperty(key));
160
+ for ( String key : propsToSet ) {
161
+ setSystemProperty(key, props.getProperty(key));
157
162
  }
158
163
  }
159
164
 
data/ext/WarblerJar.java CHANGED
@@ -118,16 +118,20 @@ public class WarblerJar {
118
118
  path = value.convertToString().getUnicodeValue();
119
119
  }
120
120
 
121
- InputStream inFile = getStream(path, null);
122
121
  try {
123
- zip.putNextEntry(new ZipEntry(entryName));
124
- byte[] buf = new byte[16384];
125
- int bytesRead;
126
- while ((bytesRead = inFile.read(buf)) != -1) {
127
- zip.write(buf, 0, bytesRead);
122
+ InputStream inFile = getStream(path, null);
123
+ try {
124
+ zip.putNextEntry(new ZipEntry(entryName));
125
+ byte[] buf = new byte[16384];
126
+ int bytesRead;
127
+ while ((bytesRead = inFile.read(buf)) != -1) {
128
+ zip.write(buf, 0, bytesRead);
129
+ }
130
+ } finally {
131
+ close(inFile);
128
132
  }
129
- } finally {
130
- close(inFile);
133
+ } catch (IOException e) {
134
+ System.err.println("File not found; " + path + " not in archive");
131
135
  }
132
136
  }
133
137
  }
@@ -0,0 +1,22 @@
1
+ #--
2
+ # Copyright (c) 2014-2015 JRuby Team
3
+ # This source code is available under the MIT license.
4
+ # See the file LICENSE.txt for details.
5
+ #++
6
+
7
+ module Warbler
8
+ module BundlerHelper
9
+ def to_spec(spec)
10
+ # JRuby <= 1.7.20 does not handle respond_to? with method_missing right
11
+ # thus a `spec.respond_to?(:to_spec) ? spec.to_spec : spec` won't do :
12
+ if ::Bundler.const_defined?(:StubSpecification) # since Bundler 1.10.1
13
+ spec = spec.to_spec if spec.is_a?(::Bundler::StubSpecification)
14
+ else
15
+ spec = spec.to_spec if spec.respond_to?(:to_spec)
16
+ end
17
+ spec
18
+ end
19
+ module_function :to_spec
20
+ end
21
+ end
22
+
data/lib/warbler/gems.rb CHANGED
@@ -43,16 +43,19 @@ module Warbler
43
43
  end
44
44
 
45
45
  def specs(gem_dependencies)
46
- @specs ||= map{|gem, version| find_single_gem_files(gem_dependencies, gem, version) }.flatten.compact
46
+ @specs ||= map { |gem, version| find_single_gem_files(gem_dependencies, gem, version) }.flatten.compact
47
47
  end
48
48
 
49
49
  private
50
50
 
51
51
  # Add a single gem to WEB-INF/gems
52
52
  def find_single_gem_files(gem_dependencies, gem_pattern, version = nil)
53
+ gem_spec_class = Gem::Specification
54
+ gem_spec_class = Gem::BasicSpecification if Gem.const_defined?(:BasicSpecification)
55
+ # Gem::Specification < Gem::BasicSpecification (since RGs 2.1)
53
56
  case gem_pattern
54
- when Gem::Specification
55
- return gem_pattern
57
+ when gem_spec_class
58
+ return BundlerHelper.to_spec(gem_pattern)
56
59
  when Gem::Dependency
57
60
  gem = gem_pattern
58
61
  else
@@ -62,14 +65,11 @@ module Warbler
62
65
  return nil if gem.respond_to?(:type) and gem.type != :runtime
63
66
 
64
67
  # Deal with deprecated Gem.source_index and #search
65
- matched = gem.respond_to?(:to_spec) ? [gem.to_spec] : Gem.source_index.search(gem)
68
+ matched = gem.respond_to?(:to_spec) ? [ gem.to_spec ] : Gem.source_index.search(gem)
66
69
  fail "gem '#{gem}' not installed" if matched.empty?
67
70
  spec = matched.last
68
- if gem_dependencies
69
- [spec] + spec.dependencies.map{|gem| find_single_gem_files(gem_dependencies, gem) }
70
- else
71
- spec
72
- end
71
+ return spec unless gem_dependencies
72
+ [spec] + spec.dependencies.map { |gem| find_single_gem_files(gem_dependencies, gem) }
73
73
  end
74
74
 
75
75
  end
data/lib/warbler/jar.rb CHANGED
@@ -290,8 +290,10 @@ module Warbler
290
290
  zipfile.mkdir(entry.dup) # in case it's frozen rubyzip 0.9.6.1 workaround
291
291
  elsif File.symlink?(src)
292
292
  zipfile.get_output_stream(entry) { |f| f << File.read(src) }
293
- else
293
+ elsif File.exist?(src)
294
294
  zipfile.add(entry, src)
295
+ else
296
+ $stderr.puts "File not found; #{entry.inspect} not in archive"
295
297
  end
296
298
  end
297
299
  end
@@ -12,6 +12,7 @@ module Warbler
12
12
  class Bundler
13
13
  include Trait
14
14
  include PathmapHelper
15
+ include BundlerHelper
15
16
 
16
17
  def self.detect?
17
18
  File.exist?(ENV['BUNDLE_GEMFILE'] || "Gemfile")
@@ -37,15 +38,15 @@ module Warbler
37
38
  config.bundler = {}
38
39
 
39
40
  bundler_specs.each do |spec|
41
+ spec = to_spec(spec)
40
42
  # Bundler HAX -- fixup bad #loaded_from attribute in fake
41
43
  # bundler gemspec from bundler/source.rb
42
- if spec.name == "bundler"
44
+ if spec.name == 'bundler'
43
45
  full_gem_path = Pathname.new(spec.full_gem_path)
44
-
45
- while !full_gem_path.join('bundler.gemspec').exist?
46
+ while ! full_gem_path.join('bundler.gemspec').exist?
46
47
  full_gem_path = full_gem_path.dirname
47
48
  # if at top of the path, meaning we cannot find bundler.gemspec, abort.
48
- if full_gem_path.to_s=~/^[\.\/]$/
49
+ if full_gem_path.to_s =~ /^[\.\/]$/
49
50
  $stderr.puts("warning: Unable to detect bundler spec under '#{spec.full_gem_path}'' and is sub-dirs")
50
51
  exit
51
52
  end
@@ -139,8 +140,8 @@ module Warbler
139
140
  definition = ::Bundler.definition
140
141
  all = definition.specs.to_a
141
142
  requested = definition.specs_for(definition.groups - bundle_without).to_a
142
- excluded_git_specs = (all - requested).select {|spec| ::Bundler::Source::Git === spec.source }
143
- excluded_git_specs.each {|spec| spec.groups << :warbler_excluded }
143
+ excluded_git_specs = (all - requested).select { |spec| ::Bundler::Source::Git === spec.source }
144
+ excluded_git_specs.each { |spec| spec.groups << :warbler_excluded }
144
145
  requested + excluded_git_specs
145
146
  end
146
147
 
@@ -55,15 +55,32 @@ module Warbler
55
55
 
56
56
  def default_executable
57
57
  if !@spec.executables.empty?
58
- "bin/#{@spec.executables.first}"
58
+ bundler_version =
59
+ Gem.loaded_specs.include?("bundler") ?
60
+ Gem.loaded_specs["bundler"].version :
61
+ Gem::Version.create("0.0.0")
62
+ if (bundler_version <=> Gem::Version.create("1.8.0")) < 0
63
+ "bin/#{@spec.executables.first}"
64
+ else
65
+ exe_script = @spec.executables.first
66
+ if File.exists?("exe/#{exe_script}")
67
+ "exe/#{exe_script}"
68
+ elsif File.exists?("bin/#{exe_script}")
69
+ "bin/#{exe_script}"
70
+ else
71
+ raise "No `#{exe_script}` executable script found"
72
+ end
73
+ end
74
+ elsif exe = Dir['bin/*'].sort.first
75
+ warn "No default executable found in #{@spec_file}, using bin/#{exe}"
76
+ exe
77
+ elsif exe = Dir['exe/*'].sort.first
78
+ warn "No default executable found in #{@spec_file}, using exe/#{exe}"
79
+ exe
59
80
  else
60
- exe = Dir['bin/*'].sort.first
61
81
  raise "No executable script found" unless exe
62
- warn "No default executable found in #{@spec_file}, using #{exe}"
63
- exe
64
82
  end
65
83
  end
66
-
67
84
  end
68
85
  end
69
86
  end
@@ -6,5 +6,5 @@
6
6
  #++
7
7
 
8
8
  module Warbler
9
- VERSION = "2.0.0.pre1"
9
+ VERSION = "2.0.0.pre2"
10
10
  end
@@ -122,13 +122,23 @@ PROPS
122
122
 
123
123
  def add(jar)
124
124
  super
125
+ jar.files["WEB-INF/webserver.xml"] ||= StringIO.new(<<-CONFIG)
126
+ <?xml version="1.0"?>
127
+ <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
128
+
129
+ <Configure id="Server" class="org.eclipse.jetty.server.Server">
130
+ </Configure>
131
+ CONFIG
132
+
125
133
  jar.files["WEB-INF/webserver.properties"] = StringIO.new(<<-PROPS)
126
134
  mainclass = org.eclipse.jetty.runner.Runner
127
- args = args0,args1,args2
135
+ args = args0,args1,args2,args3,args4
128
136
  props = jetty.home
129
137
  args0 = --port
130
138
  args1 = {{port}}
131
- args2 = {{warfile}}
139
+ args2 = --config
140
+ args3 = {{config}}
141
+ args4 = {{warfile}}
132
142
  jetty.home = {{webroot}}
133
143
  PROPS
134
144
  end
data/lib/warbler.rb CHANGED
@@ -34,6 +34,7 @@ require 'warbler/executable_helper'
34
34
  require 'warbler/rake_helper'
35
35
  require 'warbler/pathmap_helper'
36
36
  require 'warbler/platform_helper'
37
+ require 'warbler/bundler_helper'
37
38
  require 'warbler/task'
38
39
  require 'warbler/application'
39
40
  require 'warbler/web_server'
data/lib/warbler_jar.jar CHANGED
Binary file
data/pom.xml CHANGED
@@ -13,7 +13,7 @@ bundle up all of your application files for deployment to a Java environment.</d
13
13
  <url>https://github.com/jruby/warbler</url>
14
14
  <properties>
15
15
  <tesla.dump.readOnly>true</tesla.dump.readOnly>
16
- <jruby.plugins.version>1.0.0</jruby.plugins.version>
16
+ <jruby.plugins.version>1.0.10</jruby.plugins.version>
17
17
  <tesla.dump.pom>pom.xml</tesla.dump.pom>
18
18
  <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
19
19
  </properties>
data/spec/spec_helper.rb CHANGED
@@ -88,6 +88,9 @@ module ExampleGroupHelpers
88
88
  cur_dir = Dir.pwd
89
89
  Dir.chdir(@gem_dir) do
90
90
  `git init`
91
+ `git config user.email "warbler-test@null.com"`
92
+ `git config user.name "Warbler Test"`
93
+
91
94
  # create the gemspec and Gemfile
92
95
  File.open("Gemfile", "w") do |f|
93
96
  f << <<-RUBY
@@ -102,6 +105,8 @@ module ExampleGroupHelpers
102
105
  Gem::Specification.new do |gem|
103
106
  gem.name = "#{gem_name}"
104
107
  gem.version = '1.0'
108
+ gem.authors = ['John Doe']
109
+ gem.summary = "Gem for testing"
105
110
  gem.platform = Gem::Platform::RUBY
106
111
  gem.files = `git ls-files`.split("\n")
107
112
  gem.add_runtime_dependency 'rake', [">= 10.4.2"]
@@ -21,6 +21,10 @@ describe Warbler::Jar, "with Bundler" do
21
21
  @extra_config = block
22
22
  end
23
23
 
24
+ def bundle_install(*args)
25
+ `cd #{Dir.pwd} && #{RUBY_EXE} -S bundle install #{args.join(' ')}`
26
+ end
27
+
24
28
  let(:config) { drbclient.config(@extra_config) }
25
29
  let(:jar) { drbclient.jar }
26
30
 
@@ -66,7 +70,7 @@ describe Warbler::Jar, "with Bundler" do
66
70
 
67
71
  it "works with :git entries in Gemfiles" do
68
72
  File.open("Gemfile", "w") {|f| f << "gem 'tester', :git => '#{@gem_dir}'\n"}
69
- `#{RUBY_EXE} -S bundle install --local`
73
+ bundle_install '--local'
70
74
  jar.apply(config)
71
75
  file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/lib/tester/version\.rb}).should_not be_empty
72
76
  file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/tester.gemspec}).should_not be_empty
@@ -74,7 +78,7 @@ describe Warbler::Jar, "with Bundler" do
74
78
 
75
79
  it "bundles only the gemspec for :git entries that are excluded" do
76
80
  File.open("Gemfile", "w") {|f| f << "gem 'rake'\ngroup :test do\ngem 'tester', :git => '#{@gem_dir}'\nend\n"}
77
- `#{RUBY_EXE} -S bundle install --local`
81
+ bundle_install '--local'
78
82
  jar.apply(config)
79
83
  file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/lib/tester/version\.rb}).should be_empty
80
84
  file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/tester.gemspec}).should_not be_empty
@@ -82,7 +86,7 @@ describe Warbler::Jar, "with Bundler" do
82
86
 
83
87
  it "does not work with :path entries in Gemfiles" do
84
88
  File.open("Gemfile", "w") {|f| f << "gem 'tester', :path => '#{@gem_dir}'\n"}
85
- `#{RUBY_EXE} -S bundle install --local`
89
+ bundle_install '--local'
86
90
  silence { jar.apply(config) }
87
91
  file_list(%r{tester}).should be_empty
88
92
  end
@@ -126,7 +130,7 @@ describe Warbler::Jar, "with Bundler" do
126
130
 
127
131
  it "works with :git entries in Gemfiles" do
128
132
  File.open("Gemfile", "w") {|f| f << "gem 'tester', :git => '#{@gem_dir}'\n"}
129
- `#{RUBY_EXE} -S bundle install --local`
133
+ bundle_install '--local'
130
134
  jar.apply(config)
131
135
  file_list(%r{^bundler/gems/tester[^/]*/lib/tester/version\.rb}).should_not be_empty
132
136
  file_list(%r{^bundler/gems/tester[^/]*/tester.gemspec}).should_not be_empty
@@ -137,7 +141,7 @@ describe Warbler::Jar, "with Bundler" do
137
141
  end
138
142
 
139
143
  it "adds BUNDLE_GEMFILE to init.rb" do
140
- File.open("Gemfile", "w") {|f| f << "source :rubygems" }
144
+ File.open("Gemfile", "w") {|f| f << "source 'http://rubygems.org/'" }
141
145
  jar.add_init_file(config)
142
146
  contents = jar.contents('META-INF/init.rb')
143
147
  contents.should =~ /ENV\['BUNDLE_GEMFILE'\] = File.expand_path(.*, __FILE__)/
@@ -204,7 +208,7 @@ describe Warbler::Jar, "with Bundler" do
204
208
  run_in_directory "spec/sample_bundler"
205
209
 
206
210
  it "includes the bundler gem" do
207
- `#{RUBY_EXE} -S bundle install --deployment`
211
+ bundle_install '--deployment'
208
212
  jar.apply(config)
209
213
  file_list(%r{gems/rake-10.4.2/lib}).should_not be_empty
210
214
  file_list(%r{gems/bundler-}).should_not be_empty
@@ -29,13 +29,13 @@ describe Warbler::WebServer::Artifact do
29
29
  it "uses default (maven) local repository" do
30
30
  ENV['HOME'] = '/home/borg'
31
31
  ENV.delete('M2_HOME'); ENV.delete('MAVEN_HOME')
32
- expect( sample_artifact.local_repository ).to eql "/home/borg/.m2/repository"
32
+ sample_artifact.local_repository.should == "/home/borg/.m2/repository"
33
33
  end
34
34
 
35
35
  it "detects a custom maven repository setting" do
36
36
  ENV['HOME'] = '/home/borg'
37
37
  ENV['M2_HOME'] = File.expand_path('../m2_home', File.dirname(__FILE__))
38
- expect( sample_artifact.local_repository ).to eql '/usr/local/maven/repo'
38
+ sample_artifact.local_repository.should == '/usr/local/maven/repo'
39
39
  end
40
40
 
41
41
  end
metadata CHANGED
@@ -1,53 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre1
4
+ version: 2.0.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sieger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-29 00:00:00.000000000 Z
11
+ date: 2015-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 10.1.0
20
14
  requirement: !ruby/object:Gem::Requirement
21
15
  requirements:
22
16
  - - ">="
23
17
  - !ruby/object:Gem::Version
24
18
  version: 10.1.0
19
+ name: rake
25
20
  prerelease: false
26
21
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: jruby-jars
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
24
  - - ">="
32
25
  - !ruby/object:Gem::Version
33
- version: 9.0.0.0.pre2
26
+ version: 10.1.0
27
+ - !ruby/object:Gem::Dependency
34
28
  requirement: !ruby/object:Gem::Requirement
35
29
  requirements:
36
30
  - - ">="
37
31
  - !ruby/object:Gem::Version
38
32
  version: 9.0.0.0.pre2
33
+ name: jruby-jars
39
34
  prerelease: false
40
35
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: jruby-rack
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
37
  requirements:
45
38
  - - ">="
46
39
  - !ruby/object:Gem::Version
47
- version: 1.1.1
48
- - - "<"
49
- - !ruby/object:Gem::Version
50
- version: '1.3'
40
+ version: 9.0.0.0.pre2
41
+ - !ruby/object:Gem::Dependency
51
42
  requirement: !ruby/object:Gem::Requirement
52
43
  requirements:
53
44
  - - ">="
@@ -56,18 +47,18 @@ dependencies:
56
47
  - - "<"
57
48
  - !ruby/object:Gem::Version
58
49
  version: '1.3'
50
+ name: jruby-rack
59
51
  prerelease: false
60
52
  type: :runtime
61
- - !ruby/object:Gem::Dependency
62
- name: rubyzip
63
53
  version_requirements: !ruby/object:Gem::Requirement
64
54
  requirements:
65
55
  - - ">="
66
56
  - !ruby/object:Gem::Version
67
- version: '1.0'
57
+ version: 1.1.1
68
58
  - - "<"
69
59
  - !ruby/object:Gem::Version
70
- version: '1.2'
60
+ version: '1.3'
61
+ - !ruby/object:Gem::Dependency
71
62
  requirement: !ruby/object:Gem::Requirement
72
63
  requirements:
73
64
  - - ">="
@@ -76,64 +67,73 @@ dependencies:
76
67
  - - "<"
77
68
  - !ruby/object:Gem::Version
78
69
  version: '1.2'
70
+ name: rubyzip
79
71
  prerelease: false
80
72
  type: :runtime
81
- - !ruby/object:Gem::Dependency
82
- name: jbundler
83
73
  version_requirements: !ruby/object:Gem::Requirement
84
74
  requirements:
85
- - - "~>"
75
+ - - ">="
86
76
  - !ruby/object:Gem::Version
87
- version: 0.5.5
77
+ version: '1.0'
78
+ - - "<"
79
+ - !ruby/object:Gem::Version
80
+ version: '1.2'
81
+ - !ruby/object:Gem::Dependency
88
82
  requirement: !ruby/object:Gem::Requirement
89
83
  requirements:
90
84
  - - "~>"
91
85
  - !ruby/object:Gem::Version
92
86
  version: 0.5.5
87
+ name: jbundler
93
88
  prerelease: false
94
89
  type: :development
95
- - !ruby/object:Gem::Dependency
96
- name: ruby-maven
97
90
  version_requirements: !ruby/object:Gem::Requirement
98
91
  requirements:
99
92
  - - "~>"
100
93
  - !ruby/object:Gem::Version
101
- version: 3.1.1.0
94
+ version: 0.5.5
95
+ - !ruby/object:Gem::Dependency
102
96
  requirement: !ruby/object:Gem::Requirement
103
97
  requirements:
104
98
  - - "~>"
105
99
  - !ruby/object:Gem::Version
106
100
  version: 3.1.1.0
101
+ name: ruby-maven
107
102
  prerelease: false
108
103
  type: :development
109
- - !ruby/object:Gem::Dependency
110
- name: rspec
111
104
  version_requirements: !ruby/object:Gem::Requirement
112
105
  requirements:
113
106
  - - "~>"
114
107
  - !ruby/object:Gem::Version
115
- version: '2.10'
108
+ version: 3.1.1.0
109
+ - !ruby/object:Gem::Dependency
116
110
  requirement: !ruby/object:Gem::Requirement
117
111
  requirements:
118
112
  - - "~>"
119
113
  - !ruby/object:Gem::Version
120
114
  version: '2.10'
115
+ name: rspec
121
116
  prerelease: false
122
117
  type: :development
123
- - !ruby/object:Gem::Dependency
124
- name: rdoc
125
118
  version_requirements: !ruby/object:Gem::Requirement
126
119
  requirements:
127
- - - ">="
120
+ - - "~>"
128
121
  - !ruby/object:Gem::Version
129
- version: 2.4.2
122
+ version: '2.10'
123
+ - !ruby/object:Gem::Dependency
130
124
  requirement: !ruby/object:Gem::Requirement
131
125
  requirements:
132
126
  - - ">="
133
127
  - !ruby/object:Gem::Version
134
128
  version: 2.4.2
129
+ name: rdoc
135
130
  prerelease: false
136
131
  type: :development
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 2.4.2
137
137
  description: |-
138
138
  Warbler is a gem to make a Java jar or war file out of any Ruby,
139
139
  Rails, or Rack application. Warbler provides a minimal, flexible, Ruby-like way to
@@ -241,6 +241,7 @@ files:
241
241
  - integration/simple_rack_test/src/test/java/org/jruby/warbler/AppTestIT.java
242
242
  - lib/warbler.rb
243
243
  - lib/warbler/application.rb
244
+ - lib/warbler/bundler_helper.rb
244
245
  - lib/warbler/config.rb
245
246
  - lib/warbler/executable_helper.rb
246
247
  - lib/warbler/gems.rb
@@ -492,7 +493,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
492
493
  version: 1.3.1
493
494
  requirements: []
494
495
  rubyforge_project:
495
- rubygems_version: 2.4.5
496
+ rubygems_version: 2.4.8
496
497
  signing_key:
497
498
  specification_version: 4
498
499
  summary: Warbler chirpily constructs .war files of your Rails applications.