jubilee 2.1.0.Alpha1-java → 2.1.0.beta-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -2
  3. data/CHANGELOG +9 -0
  4. data/README.md +12 -7
  5. data/jars/vertx-core-2.1.1.jar +0 -0
  6. data/java/src/jubilee/JubileeService.java +3 -3
  7. data/java/src/org/jruby/jubilee/Const.java +1 -1
  8. data/java/src/org/jruby/jubilee/JubileeVerticle.java +29 -4
  9. data/java/src/org/jruby/jubilee/RackApplication.java +38 -35
  10. data/java/src/org/jruby/jubilee/RackEnvironment.java +57 -23
  11. data/java/src/org/jruby/jubilee/RackEnvironmentHash.java +64 -11
  12. data/java/src/org/jruby/jubilee/RackInput.java +13 -10
  13. data/java/src/org/jruby/jubilee/RubyCallable.java +52 -0
  14. data/java/src/org/jruby/jubilee/RubyChannel.java +89 -0
  15. data/java/src/org/jruby/jubilee/RubyHttpServerResponse.java +72 -60
  16. data/java/src/org/jruby/jubilee/RubyNetSocket.java +169 -0
  17. data/java/src/org/jruby/jubilee/RubyPlatformManager.java +129 -113
  18. data/java/src/org/jruby/jubilee/impl/RubyIORackInput.java +9 -9
  19. data/java/src/org/jruby/jubilee/impl/RubyNullIO.java +1 -1
  20. data/java/src/org/jruby/jubilee/utils/RubyHelper.java +0 -6
  21. data/java/src/org/jruby/jubilee/vertx/JubileeVertx.java +12 -11
  22. data/jubilee.gemspec +43 -20
  23. data/lib/jubilee.rb +0 -1
  24. data/lib/jubilee/cli.rb +5 -3
  25. data/lib/jubilee/configuration.rb +2 -7
  26. data/lib/jubilee/const.rb +30 -28
  27. data/lib/jubilee/response.rb +40 -5
  28. data/lib/jubilee/server.rb +0 -3
  29. data/lib/jubilee/version.rb +1 -1
  30. data/spec/apps/rails4/basic/Gemfile +0 -2
  31. data/spec/apps/rails4/basic/Gemfile.lock +0 -7
  32. data/spec/integration/basic_rack_spec.rb +4 -3
  33. data/spec/integration/basic_rails4_spec.rb +4 -3
  34. data/spec/integration/basic_sinatra_spec.rb +4 -4
  35. data/spec/spec_helper.rb +1 -0
  36. data/test/{config → apps}/app.rb +0 -0
  37. data/test/apps/checker.ru +5 -10
  38. data/test/apps/chunked.ru +3 -0
  39. data/test/{config → apps}/config.ru +0 -0
  40. data/test/apps/content_length.ru +3 -0
  41. data/test/apps/hex.ru +4 -0
  42. data/test/apps/hijack.ru +7 -0
  43. data/test/apps/hijack2.ru +7 -0
  44. data/test/apps/huge.ru +4 -0
  45. data/test/apps/method_override.ru +1 -1
  46. data/test/apps/overwrite_check.ru +3 -2
  47. data/test/apps/persistent.rb +14 -0
  48. data/test/apps/persistent.ru +3 -0
  49. data/test/apps/rack_input.ru +5 -0
  50. data/test/apps/self_chunked.ru +6 -0
  51. data/test/apps/sha1.ru +2 -0
  52. data/test/apps/simple.ru +10 -1
  53. data/test/jubilee/test_cli.rb +1 -1
  54. data/test/jubilee/test_configuration.rb +1 -3
  55. data/test/jubilee/test_hijack.rb +27 -0
  56. data/test/jubilee/test_persistent.rb +208 -0
  57. data/test/jubilee/test_rack_server.rb +29 -68
  58. data/test/jubilee/test_server.rb +49 -15
  59. data/test/jubilee/test_upload.rb +13 -60
  60. data/test/test_helper.rb +2 -2
  61. metadata +19 -9
  62. data/java/src/org/jruby/jubilee/RubyServer.java +0 -159
  63. data/lib/jubilee/jubilee.jar +0 -0
  64. data/lib/rack/chunked.rb +0 -38
  65. data/test/config/app.ru +0 -3
  66. data/test/jubilee/test_response.rb +0 -270
@@ -3,6 +3,7 @@ package org.jruby.jubilee;
3
3
  import org.jruby.*;
4
4
  import org.jruby.anno.JRubyMethod;
5
5
  import org.jruby.jubilee.vertx.JubileeVertx;
6
+ import org.jruby.runtime.Block;
6
7
  import org.jruby.runtime.ObjectAllocator;
7
8
  import org.jruby.runtime.ThreadContext;
8
9
  import org.jruby.runtime.builtin.IRubyObject;
@@ -24,127 +25,142 @@ import java.util.Map;
24
25
  * Created by isaiah on 23/01/2014.
25
26
  */
26
27
  public class RubyPlatformManager extends RubyObject {
27
- private PlatformManager pm;
28
+ private PlatformManager pm;
29
+ private RubyHash options;
28
30
 
29
- public static void createPlatformManagerClass(Ruby runtime) {
30
- RubyModule mJubilee = runtime.defineModule("Jubilee");
31
- RubyClass serverClass = mJubilee.defineClassUnder("PlatformManager", runtime.getObject(), ALLOCATOR);
32
- serverClass.defineAnnotatedMethods(RubyPlatformManager.class);
33
- }
34
-
35
- private static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
36
- public IRubyObject allocate(Ruby ruby, RubyClass rubyClass) {
37
- return new RubyPlatformManager(ruby, rubyClass);
31
+ public static void createPlatformManagerClass(Ruby runtime) {
32
+ RubyModule mJubilee = runtime.defineModule("Jubilee");
33
+ RubyClass serverClass = mJubilee.defineClassUnder("PlatformManager", runtime.getObject(), ALLOCATOR);
34
+ serverClass.defineAnnotatedMethods(RubyPlatformManager.class);
38
35
  }
39
- };
40
-
41
- public RubyPlatformManager(Ruby ruby, RubyClass rubyClass) {
42
- super(ruby, rubyClass);
43
- }
44
-
45
- @JRubyMethod
46
- public IRubyObject initialize(final ThreadContext context, IRubyObject config) {
47
- final RubyHash options = config.convertToHash();
48
- Ruby runtime = context.runtime;
49
- RubySymbol clustered_k = runtime.newSymbol("clustered");
50
- RubySymbol cluster_host_k = runtime.newSymbol("cluster_host");
51
- RubySymbol cluster_port_k = runtime.newSymbol("cluster_port");
52
- final RubySymbol port_k = runtime.newSymbol("Port");
53
- if (options.containsKey(clustered_k) && options.op_aref(context, clustered_k).isTrue()) {
54
- int clusterPort = 0;
55
- String clusterHost = null;
56
- if (options.containsKey(cluster_port_k))
57
- clusterPort = RubyNumeric.num2int(options.op_aref(context, cluster_port_k));
58
- if (options.containsKey(cluster_host_k))
59
- clusterHost = options.op_aref(context, cluster_host_k).asJavaString();
60
- if (clusterHost == null) clusterHost = getDefaultAddress();
61
- pm = PlatformLocator.factory.createPlatformManager(clusterPort, clusterHost);
62
- } else {
63
- pm = PlatformLocator.factory.createPlatformManager();
36
+
37
+ private static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
38
+ public IRubyObject allocate(Ruby ruby, RubyClass rubyClass) {
39
+ return new RubyPlatformManager(ruby, rubyClass);
40
+ }
41
+ };
42
+
43
+ public RubyPlatformManager(Ruby ruby, RubyClass rubyClass) {
44
+ super(ruby, rubyClass);
64
45
  }
65
- JubileeVertx.init(pm.vertx());
66
- int ins = RubyNumeric.num2int(options.op_aref(context, RubySymbol.newSymbol(context.runtime, "instances")));
67
- pm.deployVerticle("org.jruby.jubilee.JubileeVerticle", new JsonObject(parseOptions(options)),
68
- context.runtime.getJRubyClassLoader().getURLs(), ins, null, new AsyncResultHandler<String>() {
69
- @Override
70
- public void handle(AsyncResult<String> result) {
71
- if (result.succeeded()) {
72
- context.runtime.getOutputStream().println("Jubilee is listening on port " + options.op_aref(context, port_k) +", press Ctrl+C to quit");
73
- // System.out.println("Deployment ID is " + result.result());
74
- } else{
75
- result.cause().printStackTrace();
46
+
47
+ @JRubyMethod
48
+ public IRubyObject initialize(ThreadContext context, IRubyObject config) {
49
+ this.options = config.convertToHash();
50
+ Ruby runtime = context.runtime;
51
+ RubySymbol clustered_k = runtime.newSymbol("clustered");
52
+ RubySymbol cluster_host_k = runtime.newSymbol("cluster_host");
53
+ RubySymbol cluster_port_k = runtime.newSymbol("cluster_port");
54
+ if (options.containsKey(clustered_k) && options.op_aref(context, clustered_k).isTrue()) {
55
+ int clusterPort = 0;
56
+ String clusterHost = null;
57
+ if (options.containsKey(cluster_port_k))
58
+ clusterPort = RubyNumeric.num2int(options.op_aref(context, cluster_port_k));
59
+ if (options.containsKey(cluster_host_k))
60
+ clusterHost = options.op_aref(context, cluster_host_k).asJavaString();
61
+ if (clusterHost == null) clusterHost = getDefaultAddress();
62
+ this.pm = PlatformLocator.factory.createPlatformManager(clusterPort, clusterHost);
63
+ } else {
64
+ this.pm = PlatformLocator.factory.createPlatformManager();
76
65
  }
77
- }
78
- });
79
- return this;
80
- }
81
-
82
- @JRubyMethod
83
- public IRubyObject stop(ThreadContext context) {
84
- pm.stop();
85
- return context.runtime.getNil();
86
- }
87
-
88
- private Map<String, Object> parseOptions(RubyHash options) {
89
- Ruby runtime = options.getRuntime();
90
- ThreadContext context = runtime.getCurrentContext();
91
- RubySymbol port_k = runtime.newSymbol("Port");
92
- RubySymbol host_k = runtime.newSymbol("Host");
93
- RubySymbol ssl_k = runtime.newSymbol("ssl");
94
- RubySymbol rack_app_k = runtime.newSymbol("rackapp");
95
- RubySymbol rack_up_k = runtime.newSymbol("rackup");
96
- RubySymbol ssl_keystore_k = runtime.newSymbol("ssl_keystore");
97
- RubySymbol ssl_password_k = runtime.newSymbol("ssl_password");
98
- RubySymbol eventbus_prefix_k = runtime.newSymbol("eventbus_prefix");
99
- RubySymbol quiet_k = runtime.newSymbol("quiet");
100
- RubySymbol environment_k = runtime.newSymbol("environment");
101
- Map<String, Object> map = new HashMap<>();
102
- map.put("host", options.op_aref(context, host_k).asJavaString());
103
- map.put("port", RubyNumeric.num2int(options.op_aref(context, port_k)));
104
-
105
- if (options.has_key_p(rack_up_k).isTrue())
106
- map.put("rackup", options.op_aref(context, rack_up_k).asJavaString());
107
- map.put("quiet", options.containsKey(quiet_k) && options.op_aref(context, quiet_k).isTrue());
108
-
109
- map.put("environment", options.op_aref(context, environment_k).asJavaString());
110
-
111
- boolean ssl = options.op_aref(context, ssl_k).isTrue();
112
- if (ssl) {
113
- map.put("keystore_path", options.op_aref(context, ssl_keystore_k).asJavaString());
114
- if (options.has_key_p(ssl_password_k).isTrue())
115
- map.put("keystore_password", options.op_aref(context, ssl_password_k).asJavaString());
66
+ JubileeVertx.init(this.pm.vertx());
67
+ return this;
116
68
  }
117
- map.put("ssl", ssl);
118
- if (options.has_key_p(eventbus_prefix_k).isTrue())
119
- map.put("event_bus", options.op_aref(context, eventbus_prefix_k).asJavaString());
120
- // This is a trick to put an Object into the config object
121
- // map.put("ruby", runtime);
122
- return map;
123
- }
124
- /*
125
- Get default interface to use since the user hasn't specified one
126
- */
127
- private String getDefaultAddress() {
128
- Enumeration<NetworkInterface> nets;
129
- try {
130
- nets = NetworkInterface.getNetworkInterfaces();
131
- } catch (SocketException e) {
132
- return null;
69
+
70
+ @JRubyMethod(name = "start")
71
+ public IRubyObject start(final ThreadContext context, final Block block) {
72
+
73
+ JsonObject verticleConf = parseOptions(options);
74
+ int ins = verticleConf.getInteger("instances");
75
+ this.pm.deployVerticle("org.jruby.jubilee.JubileeVerticle", verticleConf,
76
+ context.runtime.getJRubyClassLoader().getURLs(), ins, null, new AsyncResultHandler<String>() {
77
+ @Override
78
+ public void handle(AsyncResult<String> result) {
79
+ if (result.succeeded()) {
80
+ if (block.isGiven()) {
81
+ block.yieldSpecific(context);
82
+ }
83
+ } else {
84
+ result.cause().printStackTrace(context.runtime.getErrorStream());
85
+ }
86
+ }
87
+ });
88
+ return this;
89
+
90
+ }
91
+
92
+ @JRubyMethod
93
+ public IRubyObject stop(ThreadContext context) {
94
+ this.pm.stop();
95
+ return context.runtime.getNil();
133
96
  }
134
- NetworkInterface netinf;
135
- while (nets.hasMoreElements()) {
136
- netinf = nets.nextElement();
137
97
 
138
- Enumeration<InetAddress> addresses = netinf.getInetAddresses();
98
+ private JsonObject parseOptions(RubyHash options) {
99
+ Ruby runtime = options.getRuntime();
100
+ ThreadContext context = runtime.getCurrentContext();
101
+ RubySymbol port_k = runtime.newSymbol("Port");
102
+ RubySymbol host_k = runtime.newSymbol("Host");
103
+ RubySymbol ssl_k = runtime.newSymbol("ssl");
104
+ RubySymbol rack_up_k = runtime.newSymbol("rackup");
105
+ RubySymbol ssl_keystore_k = runtime.newSymbol("ssl_keystore");
106
+ RubySymbol ssl_password_k = runtime.newSymbol("ssl_password");
107
+ RubySymbol eventbus_prefix_k = runtime.newSymbol("eventbus_prefix");
108
+ RubySymbol quiet_k = runtime.newSymbol("quiet");
109
+ RubySymbol environment_k = runtime.newSymbol("environment");
110
+ RubySymbol root_k = runtime.newSymbol("root");
111
+ RubySymbol instances_k = RubySymbol.newSymbol(context.runtime, "instances");
112
+ JsonObject map = new JsonObject();
113
+ map.putString("host", options.op_aref(context, host_k).asJavaString());
114
+ map.putNumber("port", RubyNumeric.num2int(options.op_aref(context, port_k)));
115
+
116
+ map.putNumber("instances", RubyNumeric.num2int(options.op_aref(context, instances_k)));
117
+ if (options.has_key_p(root_k).isTrue())
118
+ map.putString("root", options.op_aref(context, root_k).asJavaString());
119
+
120
+ map.putString("rackup", options.op_aref(context, rack_up_k).asJavaString());
121
+ map.putBoolean("quiet", options.containsKey(quiet_k) && options.op_aref(context, quiet_k).isTrue());
122
+
123
+ String environ = options.op_aref(context, environment_k).asJavaString();
124
+ map.putString("environment", environ);
125
+ if (environ.equals("production"))
126
+ map.putBoolean("hide_error_stack", true);
127
+
128
+ boolean ssl = options.op_aref(context, ssl_k).isTrue();
129
+ if (ssl) {
130
+ map.putString("keystore_path", options.op_aref(context, ssl_keystore_k).asJavaString());
131
+ if (options.has_key_p(ssl_password_k).isTrue())
132
+ map.putString("keystore_password", options.op_aref(context, ssl_password_k).asJavaString());
133
+ }
134
+ map.putBoolean("ssl", ssl);
135
+ if (options.has_key_p(eventbus_prefix_k).isTrue())
136
+ map.putString("event_bus", options.op_aref(context, eventbus_prefix_k).asJavaString());
137
+ return map;
138
+ }
139
+
140
+ /*
141
+ Get default interface to use since the user hasn't specified one
142
+ */
143
+ private String getDefaultAddress() {
144
+ Enumeration<NetworkInterface> nets;
145
+ try {
146
+ nets = NetworkInterface.getNetworkInterfaces();
147
+ } catch (SocketException e) {
148
+ return null;
149
+ }
150
+ NetworkInterface netinf;
151
+ while (nets.hasMoreElements()) {
152
+ netinf = nets.nextElement();
153
+
154
+ Enumeration<InetAddress> addresses = netinf.getInetAddresses();
139
155
 
140
- while (addresses.hasMoreElements()) {
141
- InetAddress address = addresses.nextElement();
142
- if (!address.isAnyLocalAddress() && !address.isMulticastAddress()
143
- && !(address instanceof Inet6Address)) {
144
- return address.getHostAddress();
156
+ while (addresses.hasMoreElements()) {
157
+ InetAddress address = addresses.nextElement();
158
+ if (!address.isAnyLocalAddress() && !address.isMulticastAddress()
159
+ && !(address instanceof Inet6Address)) {
160
+ return address.getHostAddress();
161
+ }
162
+ }
145
163
  }
146
- }
164
+ return null;
147
165
  }
148
- return null;
149
- }
150
166
  }
@@ -1,8 +1,8 @@
1
1
  package org.jruby.jubilee.impl;
2
2
 
3
3
  import io.netty.buffer.ByteBuf;
4
- import org.jcodings.specific.ASCIIEncoding;
5
4
  import org.jcodings.Encoding;
5
+ import org.jcodings.specific.ASCIIEncoding;
6
6
  import org.jruby.*;
7
7
  import org.jruby.anno.JRubyMethod;
8
8
  import org.jruby.jubilee.Const;
@@ -68,8 +68,8 @@ public class RubyIORackInput extends RubyObject implements RackInput {
68
68
  @Override
69
69
  @JRubyMethod
70
70
  public IRubyObject gets(ThreadContext context) {
71
- Ruby runtime = context.runtime;
72
- RubyString line = RubyString.newEmptyString(context.runtime, BINARY);
71
+ Ruby runtime = context.runtime;
72
+ RubyString line = RubyString.newEmptyString(context.runtime, BINARY);
73
73
 
74
74
  if (isEOF()) return runtime.getNil();
75
75
 
@@ -176,10 +176,10 @@ public class RubyIORackInput extends RubyObject implements RackInput {
176
176
  }
177
177
 
178
178
  private int readableBytes() {
179
- if (! this.chunked) {
180
- return Math.min(buf.readableBytes(), this.len - buf.readerIndex());
181
- }
182
- return buf.readableBytes();
179
+ if (!this.chunked) {
180
+ return Math.min(buf.readableBytes(), this.len - buf.readerIndex());
181
+ }
182
+ return buf.readableBytes();
183
183
  }
184
184
 
185
185
  private boolean isEOF() {
@@ -189,8 +189,8 @@ public class RubyIORackInput extends RubyObject implements RackInput {
189
189
  }
190
190
 
191
191
  private IRubyObject readAll(Ruby runtime, RubyString dst) {
192
- while(!eof.get())
193
- ; // wait until all data received
192
+ while (!eof.get())
193
+ ; // wait until all data received
194
194
  int length = this.chunked ? buf.readableBytes() : Math.min(this.len, buf.readableBytes());
195
195
  byte[] data = new byte[length];
196
196
  buf.readBytes(data);
@@ -102,6 +102,6 @@ public class RubyNullIO extends RubyObject implements RackInput {
102
102
  */
103
103
  @Override
104
104
  public IRubyObject close(ThreadContext context) {
105
- return getRuntime().getNil();
105
+ return getRuntime().getNil();
106
106
  }
107
107
  }
@@ -2,15 +2,9 @@ package org.jruby.jubilee.utils;
2
2
 
3
3
  import org.jcodings.specific.USASCIIEncoding;
4
4
  import org.jruby.Ruby;
5
- import org.jruby.RubyHash;
6
- import org.jruby.RubyModule;
7
5
  import org.jruby.RubyString;
8
- import org.jruby.javasupport.JavaEmbedUtils;
9
6
  import org.jruby.util.ByteList;
10
7
 
11
- import java.util.Map;
12
- import java.util.Map.Entry;
13
-
14
8
  /**
15
9
  * Ruby reflection helper utilities.
16
10
  *
@@ -9,17 +9,18 @@ import org.vertx.java.core.Vertx;
9
9
  * Time: 15:24
10
10
  */
11
11
  public class JubileeVertx {
12
- public static Vertx vertx;
13
- private JubileeVertx() {
14
- }
12
+ public static Vertx vertx;
15
13
 
16
- public static void init(Vertx vertx) {
17
- JubileeVertx.vertx = vertx;
18
- }
14
+ private JubileeVertx() {
15
+ }
19
16
 
20
- public synchronized static Vertx vertx() {
21
- if (JubileeVertx.vertx == null)
22
- throw new RuntimeException("vertx is not initialized, do you run in jubilee server?");
23
- return JubileeVertx.vertx;
24
- }
17
+ public static void init(Vertx vertx) {
18
+ JubileeVertx.vertx = vertx;
19
+ }
20
+
21
+ public synchronized static Vertx vertx() {
22
+ if (JubileeVertx.vertx == null)
23
+ throw new RuntimeException("vertx is not initialized, do you run in jubilee server?");
24
+ return JubileeVertx.vertx;
25
+ }
25
26
  }
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: jubilee 1.1.0 java lib
5
+ # stub: jubilee 2.1.0.beta java lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "jubilee"
9
- s.version = "1.1.0"
9
+ s.version = "2.1.0.beta"
10
10
  s.platform = "java"
11
11
 
12
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
13
13
  s.authors = ["Isaiah Peng"]
14
- s.date = "2014-01-09"
14
+ s.date = "2014-07-24"
15
15
  s.description = "Jubilee is a rack server for JRuby built upon the high performance Vertx platform. It provides the best features of Vertx such as EventBus, SharedData, and clustering."
16
16
  s.email = "issaria@gmail.com"
17
17
  s.executables = ["jubilee", "jubilee_d"]
@@ -46,25 +46,30 @@ Gem::Specification.new do |s|
46
46
  "examples/client/sockjs-0.3.4.min.js",
47
47
  "examples/client/vertxbus.js",
48
48
  "examples/jubilee.conf.rb",
49
- "examples/jubilee/keystore.jks",
50
- "examples/jubilee/server-keystore.jks",
51
- "jars/hazelcast-2.6.3.jar",
49
+ "examples/keystore.jks",
50
+ "jars/hazelcast-3.2.3.jar",
52
51
  "jars/jackson-annotations-2.2.2.jar",
53
52
  "jars/jackson-core-2.2.2.jar",
54
53
  "jars/jackson-databind-2.2.2.jar",
55
- "jars/netty-all-4.0.13.Final.jar",
56
- "jars/vertx-core-2.1M3-SNAPSHOT.jar",
57
- "jars/vertx-hazelcast-2.1M3-SNAPSHOT.jar",
54
+ "jars/netty-all-4.0.20.Final.jar",
55
+ "jars/vertx-core-2.1.1.jar",
56
+ "jars/vertx-hazelcast-2.1.1.jar",
57
+ "jars/vertx-platform-2.1.1.jar",
58
+ "java/resources/META-INF/services/org.vertx.java.core.spi.cluster.ClusterManagerFactory",
59
+ "java/resources/default-cluster.xml",
58
60
  "java/src/jubilee/JubileeService.java",
59
61
  "java/src/org/jruby/jubilee/Const.java",
62
+ "java/src/org/jruby/jubilee/JubileeVerticle.java",
60
63
  "java/src/org/jruby/jubilee/RackApplication.java",
61
64
  "java/src/org/jruby/jubilee/RackEnvironment.java",
62
65
  "java/src/org/jruby/jubilee/RackEnvironmentHash.java",
63
66
  "java/src/org/jruby/jubilee/RackInput.java",
64
67
  "java/src/org/jruby/jubilee/RackResponse.java",
68
+ "java/src/org/jruby/jubilee/RubyCallable.java",
69
+ "java/src/org/jruby/jubilee/RubyChannel.java",
65
70
  "java/src/org/jruby/jubilee/RubyHttpServerResponse.java",
66
- "java/src/org/jruby/jubilee/RubyServer.java",
67
- "java/src/org/jruby/jubilee/deploy/Starter.java",
71
+ "java/src/org/jruby/jubilee/RubyNetSocket.java",
72
+ "java/src/org/jruby/jubilee/RubyPlatformManager.java",
68
73
  "java/src/org/jruby/jubilee/impl/RubyIORackInput.java",
69
74
  "java/src/org/jruby/jubilee/impl/RubyNullIO.java",
70
75
  "java/src/org/jruby/jubilee/utils/RubyHelper.java",
@@ -75,17 +80,20 @@ Gem::Specification.new do |s|
75
80
  "lib/jubilee/cli.rb",
76
81
  "lib/jubilee/configuration.rb",
77
82
  "lib/jubilee/const.rb",
78
- "lib/jubilee/jubilee.jar",
79
83
  "lib/jubilee/response.rb",
80
84
  "lib/jubilee/server.rb",
81
85
  "lib/jubilee/version.rb",
82
- "lib/rack/chunked.rb",
83
86
  "lib/rack/handler/jubilee.rb",
84
87
  "lib/vertx.rb",
85
88
  "lib/vertx/README.md",
86
89
  "lib/vertx/buffer.rb",
87
90
  "lib/vertx/event_bus.rb",
91
+ "lib/vertx/http.rb",
88
92
  "lib/vertx/shared_data.rb",
93
+ "lib/vertx/ssl_support.rb",
94
+ "lib/vertx/streams.rb",
95
+ "lib/vertx/tcp_support.rb",
96
+ "lib/vertx/wrapped_handler.rb",
89
97
  "spec/apps/rack/basic/config.ru",
90
98
  "spec/apps/rails4/basic/.gitignore",
91
99
  "spec/apps/rails4/basic/Gemfile",
@@ -161,17 +169,32 @@ Gem::Specification.new do |s|
161
169
  "spec/integration/basic_sinatra_spec.rb",
162
170
  "spec/spec_helper.rb",
163
171
  "test/.ruby-version",
164
- "test/config/app.rb",
172
+ "test/apps/app.rb",
173
+ "test/apps/checker.ru",
174
+ "test/apps/chunked.ru",
175
+ "test/apps/config.ru",
176
+ "test/apps/content_length.ru",
177
+ "test/apps/hex.ru",
178
+ "test/apps/hijack.ru",
179
+ "test/apps/hijack2.ru",
180
+ "test/apps/huge.ru",
181
+ "test/apps/method_override.ru",
182
+ "test/apps/overwrite_check.ru",
183
+ "test/apps/persistent.rb",
184
+ "test/apps/persistent.ru",
185
+ "test/apps/rack_crasher.ru",
186
+ "test/apps/rack_input.ru",
187
+ "test/apps/self_chunked.ru",
188
+ "test/apps/sha1.ru",
189
+ "test/apps/simple.ru",
190
+ "test/apps/url_scheme.ru",
165
191
  "test/jubilee/test_cli.rb",
166
192
  "test/jubilee/test_configuration.rb",
193
+ "test/jubilee/test_hijack.rb",
194
+ "test/jubilee/test_persistent.rb",
167
195
  "test/jubilee/test_rack_server.rb",
168
- "test/jubilee/test_response.rb",
169
196
  "test/jubilee/test_server.rb",
170
197
  "test/jubilee/test_upload.rb",
171
- "test/sinatra_app/app.rb",
172
- "test/sinatra_app/config.ru",
173
- "test/sinatra_app/public/test.html",
174
- "test/sinatra_app/unicorn.conf.rb",
175
198
  "test/test_helper.rb"
176
199
  ]
177
200
  s.homepage = "http://isaiah.github.io/jubilee"