em-midori 0.0.9.5 → 0.1.0
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/lib/em-midori.rb +4 -1
- data/lib/em-midori/api.rb +3 -5
- data/lib/em-midori/configure.rb +9 -0
- data/lib/em-midori/const.rb +6 -0
- data/lib/em-midori/core_ext/configurable.rb +32 -0
- data/lib/em-midori/runner.rb +51 -0
- data/lib/em-midori/server.rb +1 -1
- data/lib/em-midori/version.rb +2 -1
- metadata +5 -3
- data/lib/em-midori/em_midori.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6d10050423b7536832c5ef0b7d94ead6bb713a8
|
4
|
+
data.tar.gz: 949d87027c3feaece3ce05637b91569f37056978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69ee80d129f50421830b10c57dc3712211892d9cb5e047422e7b90e7b8bf2eb2bb01fb44b03c0d1d7b6424e1843a8861be7fa040d383b73dffa9cb22ca7bce5d
|
7
|
+
data.tar.gz: 1b97321457676354063864beb257e0b8ce43e5e873beb34b1dd9a08e6db0e00471ae3b99dc440071f3c561e984a608b215b0ad41f02fae2d6b4ea0d0c8dfeffb
|
data/lib/em-midori.rb
CHANGED
@@ -4,15 +4,16 @@ require 'eventmachine'
|
|
4
4
|
require 'fiber'
|
5
5
|
require 'logger'
|
6
6
|
require 'http/parser'
|
7
|
+
require 'socket'
|
7
8
|
|
8
9
|
require_relative 'em-midori/version'
|
10
|
+
require_relative 'em-midori/core_ext/configurable'
|
9
11
|
require_relative 'em-midori/string'
|
10
12
|
require_relative 'em-midori/promise'
|
11
13
|
require_relative 'em-midori/const'
|
12
14
|
require_relative 'em-midori/define_class'
|
13
15
|
require_relative 'em-midori/error'
|
14
16
|
require_relative 'em-midori/clean_room'
|
15
|
-
require_relative 'em-midori/em_midori'
|
16
17
|
require_relative 'em-midori/request'
|
17
18
|
require_relative 'em-midori/response'
|
18
19
|
require_relative 'em-midori/api'
|
@@ -21,3 +22,5 @@ require_relative 'em-midori/server'
|
|
21
22
|
require_relative 'em-midori/websocket'
|
22
23
|
require_relative 'em-midori/eventsource'
|
23
24
|
require_relative 'em-midori/middleware'
|
25
|
+
require_relative 'em-midori/configure'
|
26
|
+
require_relative 'em-midori/runner'
|
data/lib/em-midori/api.rb
CHANGED
@@ -235,11 +235,9 @@ class Midori::API
|
|
235
235
|
# @param [String] key 'Sec-WebSocket-Key' in request header
|
236
236
|
# @return [Hash] header
|
237
237
|
def websocket_header(key)
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
'Sec-WebSocket-Accept' => Digest::SHA1.base64digest(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
|
242
|
-
}
|
238
|
+
header = Midori::Const::WEBSOCKET_HEADER.clone
|
239
|
+
header['Sec-WebSocket-Accept'] = Digest::SHA1.base64digest(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
|
240
|
+
header
|
243
241
|
end
|
244
242
|
|
245
243
|
# Helper block for defining methods in APIs
|
data/lib/em-midori/const.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Midori
|
2
|
+
# Provide flexible configuration for Midori Server
|
3
|
+
module Configurable
|
4
|
+
# Modified from Sinatra
|
5
|
+
# Sets an option to the given value.
|
6
|
+
# @param [Symbol] option the name of config
|
7
|
+
# @param [Object] value value to the name
|
8
|
+
# @param [Boolean] read_only Generate option= method or not
|
9
|
+
def set(option, value = (not_set = true), read_only = false)
|
10
|
+
raise ArgumentError if not_set
|
11
|
+
|
12
|
+
setter = proc { |val| set option, val }
|
13
|
+
getter = proc { value }
|
14
|
+
|
15
|
+
define_singleton("#{option}=", setter) unless read_only
|
16
|
+
define_singleton(option, getter)
|
17
|
+
define_singleton("#{option}?", "!!#{option}") unless method_defined? "#{option}?"
|
18
|
+
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Dynamically defines a method on settings.
|
25
|
+
def define_singleton(name, content = Proc.new)
|
26
|
+
singleton_class.class_eval do
|
27
|
+
undef_method(name) if method_defined? name
|
28
|
+
String === content ? class_eval("def #{name}() #{content}; end") : define_method(name, &content)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
##
|
2
|
+
# Abstract runner class to control instance of Midori Server
|
3
|
+
class Midori::Runner
|
4
|
+
attr_reader :bind, :port
|
5
|
+
|
6
|
+
def initialize(api, configure = Midori::Configure)
|
7
|
+
@logger = configure.logger
|
8
|
+
@bind = configure.bind
|
9
|
+
@port = configure.port
|
10
|
+
|
11
|
+
@api = api
|
12
|
+
end
|
13
|
+
|
14
|
+
# Get Midori server whether running
|
15
|
+
# @return [Boolean] [true] running
|
16
|
+
# @return [Boolean] [false] not running
|
17
|
+
def running?
|
18
|
+
!!@server_signature
|
19
|
+
end
|
20
|
+
|
21
|
+
# Start the Midori server
|
22
|
+
# @note This is an async method, but no callback
|
23
|
+
def start
|
24
|
+
return if running?
|
25
|
+
|
26
|
+
EventMachine.set_simultaneous_accept_count(40) unless RUBY_PLATFORM == 'java'
|
27
|
+
EventMachine.run do
|
28
|
+
@logger.info "Midori #{Midori::VERSION} is now running on #{bind}:#{port}".blue
|
29
|
+
@server_signature = EventMachine.start_server bind, port, Midori::Server, @api, @logger
|
30
|
+
end
|
31
|
+
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
35
|
+
# Stop the Midori server
|
36
|
+
# @note This is an async method, but no callback
|
37
|
+
# @return [Boolean] [true] stop successfully
|
38
|
+
# @return [Boolean] [false] nothing to stop
|
39
|
+
def stop
|
40
|
+
if running?
|
41
|
+
@logger.info 'Goodbye Midori'.blue
|
42
|
+
EventMachine.stop_server(@server_signature)
|
43
|
+
@server_signature = nil
|
44
|
+
EM.stop
|
45
|
+
true
|
46
|
+
else
|
47
|
+
@logger.error 'Midori Server has NOT been started'.red
|
48
|
+
false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/em-midori/server.rb
CHANGED
@@ -32,7 +32,7 @@ module Midori::Server
|
|
32
32
|
receive_new_request(data)
|
33
33
|
end
|
34
34
|
now_time = Time.now
|
35
|
-
@logger.info "#{@request.ip} - - \"#{@request.method} #{@request.path}\" #{@response.status} #{(now_time.to_f - start_time.to_f).round(6)}".green
|
35
|
+
@logger.info "#{@request.ip} - - \"#{@request.method} #{@request.path} HTTP/#{@request.protocol.join('.')}\" #{@response.status} #{(now_time.to_f - start_time.to_f).round(6)}".green
|
36
36
|
end)
|
37
37
|
end.call
|
38
38
|
end
|
data/lib/em-midori/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-midori
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HeckPsi Lab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eventmachine
|
@@ -55,9 +55,10 @@ files:
|
|
55
55
|
- lib/em-midori.rb
|
56
56
|
- lib/em-midori/api.rb
|
57
57
|
- lib/em-midori/clean_room.rb
|
58
|
+
- lib/em-midori/configure.rb
|
58
59
|
- lib/em-midori/const.rb
|
60
|
+
- lib/em-midori/core_ext/configurable.rb
|
59
61
|
- lib/em-midori/define_class.rb
|
60
|
-
- lib/em-midori/em_midori.rb
|
61
62
|
- lib/em-midori/error.rb
|
62
63
|
- lib/em-midori/eventsource.rb
|
63
64
|
- lib/em-midori/middleware.rb
|
@@ -65,6 +66,7 @@ files:
|
|
65
66
|
- lib/em-midori/request.rb
|
66
67
|
- lib/em-midori/response.rb
|
67
68
|
- lib/em-midori/route.rb
|
69
|
+
- lib/em-midori/runner.rb
|
68
70
|
- lib/em-midori/server.rb
|
69
71
|
- lib/em-midori/string.rb
|
70
72
|
- lib/em-midori/version.rb
|
data/lib/em-midori/em_midori.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# The main module of Midori
|
3
|
-
module Midori
|
4
|
-
@logger = ::Logger.new(STDOUT)
|
5
|
-
# Start Midori Server instance
|
6
|
-
# @note This is an async method, but no callback
|
7
|
-
# @param [Class] api Inherit from +Midori::API+
|
8
|
-
# @param [String] ip The ip address to bind
|
9
|
-
# @param [Fixnum] port Port number
|
10
|
-
# @param [Logger] logger Ruby logger
|
11
|
-
# @return [nil] nil
|
12
|
-
def self.run(api = Midori::API, ip = '127.0.0.1', port = 8081, logger = ::Logger.new(STDOUT))
|
13
|
-
@logger = logger
|
14
|
-
EventMachine.set_simultaneous_accept_count(40) unless RUBY_PLATFORM == "java"
|
15
|
-
EventMachine.run do
|
16
|
-
@logger.info "Midori #{Midori::VERSION} is now running on #{ip}:#{port}".blue
|
17
|
-
@midori_server = EventMachine.start_server ip, port, Midori::Server, api, logger
|
18
|
-
end
|
19
|
-
nil
|
20
|
-
end
|
21
|
-
|
22
|
-
# Stop Midori Server instance
|
23
|
-
# @note This is an async method, but no callback
|
24
|
-
# @return [Boolean] [true] stop successfully
|
25
|
-
# @return [Boolean] [false] nothing to stop
|
26
|
-
def self.stop
|
27
|
-
if @midori_server.nil?
|
28
|
-
@logger.error 'Midori Server has NOT been started'.red
|
29
|
-
return false
|
30
|
-
else
|
31
|
-
EventMachine.stop_server(@midori_server)
|
32
|
-
@midori_server = nil
|
33
|
-
@logger.info 'Goodbye Midori'.blue
|
34
|
-
return true
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|