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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/CHANGELOG +9 -0
- data/README.md +12 -7
- data/jars/vertx-core-2.1.1.jar +0 -0
- data/java/src/jubilee/JubileeService.java +3 -3
- data/java/src/org/jruby/jubilee/Const.java +1 -1
- data/java/src/org/jruby/jubilee/JubileeVerticle.java +29 -4
- data/java/src/org/jruby/jubilee/RackApplication.java +38 -35
- data/java/src/org/jruby/jubilee/RackEnvironment.java +57 -23
- data/java/src/org/jruby/jubilee/RackEnvironmentHash.java +64 -11
- data/java/src/org/jruby/jubilee/RackInput.java +13 -10
- data/java/src/org/jruby/jubilee/RubyCallable.java +52 -0
- data/java/src/org/jruby/jubilee/RubyChannel.java +89 -0
- data/java/src/org/jruby/jubilee/RubyHttpServerResponse.java +72 -60
- data/java/src/org/jruby/jubilee/RubyNetSocket.java +169 -0
- data/java/src/org/jruby/jubilee/RubyPlatformManager.java +129 -113
- data/java/src/org/jruby/jubilee/impl/RubyIORackInput.java +9 -9
- data/java/src/org/jruby/jubilee/impl/RubyNullIO.java +1 -1
- data/java/src/org/jruby/jubilee/utils/RubyHelper.java +0 -6
- data/java/src/org/jruby/jubilee/vertx/JubileeVertx.java +12 -11
- data/jubilee.gemspec +43 -20
- data/lib/jubilee.rb +0 -1
- data/lib/jubilee/cli.rb +5 -3
- data/lib/jubilee/configuration.rb +2 -7
- data/lib/jubilee/const.rb +30 -28
- data/lib/jubilee/response.rb +40 -5
- data/lib/jubilee/server.rb +0 -3
- data/lib/jubilee/version.rb +1 -1
- data/spec/apps/rails4/basic/Gemfile +0 -2
- data/spec/apps/rails4/basic/Gemfile.lock +0 -7
- data/spec/integration/basic_rack_spec.rb +4 -3
- data/spec/integration/basic_rails4_spec.rb +4 -3
- data/spec/integration/basic_sinatra_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -0
- data/test/{config → apps}/app.rb +0 -0
- data/test/apps/checker.ru +5 -10
- data/test/apps/chunked.ru +3 -0
- data/test/{config → apps}/config.ru +0 -0
- data/test/apps/content_length.ru +3 -0
- data/test/apps/hex.ru +4 -0
- data/test/apps/hijack.ru +7 -0
- data/test/apps/hijack2.ru +7 -0
- data/test/apps/huge.ru +4 -0
- data/test/apps/method_override.ru +1 -1
- data/test/apps/overwrite_check.ru +3 -2
- data/test/apps/persistent.rb +14 -0
- data/test/apps/persistent.ru +3 -0
- data/test/apps/rack_input.ru +5 -0
- data/test/apps/self_chunked.ru +6 -0
- data/test/apps/sha1.ru +2 -0
- data/test/apps/simple.ru +10 -1
- data/test/jubilee/test_cli.rb +1 -1
- data/test/jubilee/test_configuration.rb +1 -3
- data/test/jubilee/test_hijack.rb +27 -0
- data/test/jubilee/test_persistent.rb +208 -0
- data/test/jubilee/test_rack_server.rb +29 -68
- data/test/jubilee/test_server.rb +49 -15
- data/test/jubilee/test_upload.rb +13 -60
- data/test/test_helper.rb +2 -2
- metadata +19 -9
- data/java/src/org/jruby/jubilee/RubyServer.java +0 -159
- data/lib/jubilee/jubilee.jar +0 -0
- data/lib/rack/chunked.rb +0 -38
- data/test/config/app.ru +0 -3
- 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
|
-
|
28
|
+
private PlatformManager pm;
|
29
|
+
private RubyHash options;
|
28
30
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
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
|
-
|
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
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
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
|
-
|
72
|
-
|
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
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
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
|
-
|
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);
|
@@ -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
|
-
|
13
|
-
private JubileeVertx() {
|
14
|
-
}
|
12
|
+
public static Vertx vertx;
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
}
|
14
|
+
private JubileeVertx() {
|
15
|
+
}
|
19
16
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
}
|
data/jubilee.gemspec
CHANGED
@@ -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
|
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 = "
|
9
|
+
s.version = "2.1.0.beta"
|
10
10
|
s.platform = "java"
|
11
11
|
|
12
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
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-
|
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/
|
50
|
-
"
|
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.
|
56
|
-
"jars/vertx-core-2.
|
57
|
-
"jars/vertx-hazelcast-2.
|
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/
|
67
|
-
"java/src/org/jruby/jubilee/
|
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/
|
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"
|