jubilee 0.2.0 → 0.2.1

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
Binary file
Binary file
Binary file
@@ -7,6 +7,8 @@ import org.jruby.*;
7
7
  import org.jruby.runtime.*;
8
8
  import org.jruby.runtime.builtin.*;
9
9
  import org.jruby.anno.JRubyMethod;
10
+ import org.vertx.java.core.json.JsonArray;
11
+ import org.vertx.java.core.json.JsonObject;
10
12
 
11
13
  public class Server extends RubyObject {
12
14
  final private Vertx vertx;
@@ -16,7 +18,9 @@ public class Server extends RubyObject {
16
18
  private boolean ssl = false;
17
19
  private String keyStorePath;
18
20
  private String keyStorePassword;
21
+ private String eventBusPrefix;
19
22
  private int port;
23
+ private String host;
20
24
 
21
25
  public static void createServerClass(Ruby runtime) {
22
26
  RubyModule mJubilee = runtime.defineModule("Jubilee");
@@ -36,23 +40,50 @@ public class Server extends RubyObject {
36
40
  httpServer = vertx.createHttpServer();
37
41
  }
38
42
 
39
- @JRubyMethod(name = "initialize", required = 2, optional = 3)
40
- public IRubyObject initialize(ThreadContext context, IRubyObject[] args, Block block) {
41
- this.port = RubyInteger.num2int(args[1]);
42
- if (args.length > 2) {
43
- this.ssl = args[2].isTrue();
43
+ /**
44
+ * Initialize jubilee server, take a rack application and a configuration hash as parameter
45
+ * @param context
46
+ * @param args
47
+ * @param block
48
+ * @return
49
+ */
50
+ @JRubyMethod(name = "initialize")
51
+ public IRubyObject initialize(ThreadContext context, IRubyObject app, IRubyObject config, Block block) {
52
+ Ruby runtime = getRuntime();
53
+ RubyHash options = config.convertToHash();
54
+ RubySymbol port_k = runtime.newSymbol("Port");
55
+ RubySymbol host_k = runtime.newSymbol("Host");
56
+ RubySymbol ssl_k = runtime.newSymbol("ssl");
57
+ RubySymbol keystore_path_k = runtime.newSymbol("keystore_path");
58
+ RubySymbol keystore_password_k = runtime.newSymbol("keystore_password");
59
+ RubySymbol eventbus_prefix_k = runtime.newSymbol("eventbus_prefix");
60
+ this.port = RubyInteger.num2int(options.op_aref(context, port_k));
61
+ if (options.has_key_p(host_k).isTrue()) {
62
+ this.host = options.op_aref(context, host_k).toString();
63
+ } else {
64
+ this.host = "0.0.0.0";
65
+ }
66
+ this.ssl = options.op_aref(context, ssl_k).isTrue();
67
+ this.app = new RackApplication(app, this.ssl);
68
+ if (options.has_key_p(keystore_path_k).isTrue()) {
69
+ this.keyStorePath = options.op_aref(context, keystore_path_k).toString();
70
+ this.keyStorePassword = options.op_aref(context, keystore_password_k).toString();
71
+ }
72
+ if (options.has_key_p(eventbus_prefix_k).isTrue()) {
73
+ this.eventBusPrefix = options.op_aref(context, eventbus_prefix_k).toString();
44
74
  }
45
- this.app = new RackApplication(args[0], this.ssl);
46
- if (args.length > 3)
47
- this.keyStorePath = args[3].toString();
48
- if (args.length > 4)
49
- this.keyStorePassword = args[4].toString();
50
75
  running = false;
51
76
  return this;
52
77
  }
53
78
 
54
- @JRubyMethod(name = "start", optional = 1)
55
- public IRubyObject start(final ThreadContext context, final IRubyObject[] args, final Block block) {
79
+ /**
80
+ * Start http server, initialize states
81
+ * @param context
82
+ * @param block
83
+ * @return
84
+ */
85
+ @JRubyMethod(name = "start")
86
+ public IRubyObject start(final ThreadContext context, final Block block) {
56
87
  this.running = true;
57
88
  httpServer.setAcceptBacklog(10000);
58
89
  httpServer.requestHandler(new Handler<HttpServerRequest>() {
@@ -60,9 +91,14 @@ public class Server extends RubyObject {
60
91
  app.call(req);
61
92
  }
62
93
  });
94
+ if (eventBusPrefix != null) {
95
+ JsonObject config = new JsonObject().putString("prefix", eventBusPrefix);
96
+ // TODO read inbounds and outbounds from config file
97
+ vertx.createSockJSServer(httpServer).bridge(config, new JsonArray(), new JsonArray());
98
+ }
63
99
  if (ssl) httpServer.setSSL(true).setKeyStorePath(this.keyStorePath)
64
100
  .setKeyStorePassword(this.keyStorePassword);
65
- httpServer.listen(this.port);
101
+ httpServer.listen(this.port, this.host);
66
102
  return this;
67
103
  }
68
104
 
data/lib/jubilee.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require File.join(File.dirname(__FILE__), "../jars/jackson-core-asl-1.9.4.jar")
2
+ require File.join(File.dirname(__FILE__), "../jars/jackson-mapper-asl-1.9.4.jar")
1
3
  require File.join(File.dirname(__FILE__), "../jars/vertx-core-1.3.0.final.jar")
2
4
  require File.join(File.dirname(__FILE__), "../jars/netty-3.6.0.Beta1.jar")
3
5
 
data/lib/jubilee/cli.rb CHANGED
@@ -22,7 +22,7 @@ module Jubilee
22
22
  parse_options
23
23
  @config = Jubilee::Configuration.new(@options)
24
24
  @config.load
25
- server = Jubilee::Server.new(@config.app, {port: @config.port, ssl: @config.ssl, keystore_path: @config.keystore_path, keystore_password: @config.keystore_password})
25
+ server = Jubilee::Server.new(@config.app, @options)
26
26
  server.start
27
27
  puts "Jubilee is listening on port #{@config.port}, press Ctrl+C to quit"
28
28
  starter = org.jruby.jubilee.deploy.Starter.new
@@ -33,7 +33,7 @@ module Jubilee
33
33
  @options = {
34
34
  debug: false,
35
35
  daemon: false,
36
- port: 3215,
36
+ Port: 3215,
37
37
  ssl: false,
38
38
  environment: "development"
39
39
  }
@@ -51,7 +51,10 @@ module Jubilee
51
51
  @options[:chdir] = arg
52
52
  end
53
53
  o.on "-p", "--port PORT", "Defind which PORT the server should bind" do |arg|
54
- @options[:port] = arg
54
+ @options[:Port] = arg
55
+ end
56
+ o.on "--host HOST", "Defind which HOST the server should bind, default 0.0.0.0" do |arg|
57
+ @options[:Host] = arg
55
58
  end
56
59
  o.on "-e", "--environment ENV", "Rack environment" do |arg|
57
60
  @options[:environment] = arg
@@ -67,6 +70,12 @@ module Jubilee
67
70
  o.on "--ssl-password PASS", "SSL keystore password" do |arg|
68
71
  @options[:keystore_password] = arg
69
72
  end
73
+ o.separator ""
74
+ o.separator "Event bus options"
75
+ o.on "--eventbus PREFIX", "Event bus prefix" do |arg|
76
+ @options[:eventbus_prefix] = arg
77
+ end
78
+
70
79
  o.separator ""
71
80
  o.separator "Common options:"
72
81
  o.on "--verbose", "Log low level debug information" do
@@ -19,7 +19,11 @@ module Jubilee
19
19
  end
20
20
 
21
21
  def port
22
- @options[:port]
22
+ @options[:Port]
23
+ end
24
+
25
+ def host
26
+ @options[:Host]
23
27
  end
24
28
 
25
29
  def ssl
data/lib/jubilee/const.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Jubilee
2
2
  module Const
3
- JUBILEE_VERSION = VERSION = "0.1.0".freeze
3
+ JUBILEE_VERSION = VERSION = "0.2.1".freeze
4
4
  HTTP_11 = "HTTP/1.1".freeze
5
5
  HTTP_10 = "HTTP/1.0".freeze
6
6
 
@@ -33,6 +33,7 @@ module Jubilee
33
33
  HTTP_ACCEPT_LANGUAGE = "HTTP_ACCEPT_LANGUAGE".freeze
34
34
  HTTP_ACCEPT_ENCODING = "HTTP_ACCEPT_ENCODING".freeze
35
35
  HTTP_CONNECTION = "HTTP_CONNECTION".freeze
36
+ NEWLINE = "\n".freeze
36
37
 
37
38
  STATUS_WITH_NO_ENTITY_BODY = Hash[Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.map{|s| [s, true]}]
38
39
  end
Binary file
@@ -36,16 +36,19 @@ module Jubilee
36
36
  end
37
37
 
38
38
  def write_headers(response)
39
- @headers.each do |key, value|
39
+ @headers.each do |key, values|
40
40
  case key
41
41
  when CONTENT_LENGTH
42
- @content_length = value
42
+ @content_length = values
43
43
  next
44
44
  when TRANSFER_ENCODING
45
45
  @allow_chunked = false
46
46
  @content_length = nil
47
47
  end
48
- response.putHeader(key, value)
48
+ # Multiple values are joined by \n
49
+ values.split(NEWLINE).each do |value|
50
+ response.putHeader(key, value)
51
+ end
49
52
  end
50
53
  end
51
54
 
@@ -1,16 +1,13 @@
1
+ require 'rack/methodoverride'
1
2
  module Jubilee
2
3
  class Server < VertxServer
3
4
  def initialize(app, opts = {})
4
- options = {port: 3215, ssl: false}.merge(opts)
5
- if (options[:ssl])
6
- if options[:keystore_path].nil?
5
+ app = Rack::MethodOverride.new(app)
6
+ options = {Port: 3215, ssl: false}.merge(opts)
7
+ if (options[:ssl]) && options[:keystore_path].nil?
7
8
  raise ArgumentError, "Please provide a keystore for ssl"
8
- else
9
- super(Application.new(app), options[:port], options[:ssl], options[:keystore_path], options[:keystore_password])
10
- end
11
- else
12
- super(Application.new(app), options[:port])
13
9
  end
10
+ super(Application.new(app), options)
14
11
  end
15
12
  end
16
13
  end
@@ -6,14 +6,14 @@ module Rack
6
6
  module Handler
7
7
  module Jubilee
8
8
  DEFAULT_OPTIONS = {
9
- :host => '0.0.0.0',
10
- :port => 3000,
11
- :verbose => false
9
+ :Host => '0.0.0.0',
10
+ :Port => 3000,
11
+ :Verbose => false
12
12
  }
13
13
  def self.run(app, options = {})
14
14
  options = DEFAULT_OPTIONS.merge(options)
15
15
 
16
- if options[:verbose]
16
+ if options[:Verbose]
17
17
  app = Rack::CommonLogger.new(app, STDOUT)
18
18
  end
19
19
 
@@ -23,8 +23,9 @@ module Rack
23
23
 
24
24
  @server = ::Jubilee::Server.new(app, options)
25
25
 
26
- puts "Jubilee starting..."
27
- puts "Environment: #{ENV['RACK_ENV']}"
26
+ puts "Jubilee #{::Jubilee::Const::JUBILEE_VERSION} starting..."
27
+ puts "* Environment: #{ENV['RACK_ENV']}"
28
+ puts "* Listening on tcp://#{options[:Host]}:#{options[:Port]}"
28
29
 
29
30
  yield @server if block_given?
30
31
 
@@ -6,6 +6,6 @@ class TestJubileeCLI < MiniTest::Unit::TestCase
6
6
  cli = Jubilee::CLI.new(["app.rb"])
7
7
  cli.parse_options
8
8
  assert_equal "app.rb", cli.options[:rackup]
9
- assert_equal 3215, cli.options[:port]
9
+ assert_equal 3215, cli.options[:Port]
10
10
  end
11
11
  end
@@ -8,7 +8,7 @@ class TestConfig < MiniTest::Unit::TestCase
8
8
  def test_load
9
9
  @config.load
10
10
  resp = [200, {"Content-Type" => "text/plain"}, ["embeded app"]]
11
- skip "hard to test because of Rack::Lint"
12
- #assert_equal resp, @config.app.call({})
11
+ #skip "hard to test because of Rack::Lint"
12
+ assert_equal resp, @config.app.call({})
13
13
  end
14
14
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: jubilee
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.0
5
+ version: 0.2.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Isaiah Peng
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-12 00:00:00.000000000 Z
12
+ date: 2012-12-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -85,6 +85,8 @@ files:
85
85
  - examples/jubilee/server-keystore.jks
86
86
  - examples/ssl/ServerTest.java
87
87
  - examples/ssl/webroot/index.html
88
+ - jars/jackson-core-asl-1.9.4.jar
89
+ - jars/jackson-mapper-asl-1.9.4.jar
88
90
  - jars/netty-3.6.0.Beta1.jar
89
91
  - jars/vertx-core-1.3.0.final.jar
90
92
  - java/.idea/ant.xml