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