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

Sign up to get free protection for your applications and to get access to all the features.
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"