warbler 2.0.0.pre1 → 2.0.0.pre2

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