em-midori 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/em-midori.rb +1 -0
- data/lib/em-midori/api.rb +30 -16
- data/lib/em-midori/const.rb +6 -0
- data/lib/em-midori/error.rb +1 -0
- data/lib/em-midori/middleware.rb +13 -0
- data/lib/em-midori/request.rb +1 -1
- data/lib/em-midori/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98fbd92141350243b9a3e3d1419d3cc7364270d8
|
4
|
+
data.tar.gz: 6cb7c2807690751d6d0796511aa00d974ec51148
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 014ae17886c6a64490fa0b9ace13c98cd6873e2aa11bfe649f799e150e64477dabd734440bdd9553129fa1db49454dadd088d5957cbcf738f1e8332040e40821
|
7
|
+
data.tar.gz: 1178bfea1e5d3da5b34aa3b1a0b1c22c4fcfd1b844c0466166d33994202ddf022048c62530e3ded73074de980459a09e6f84d9e81fa4ab427efd113b4b5aa439
|
data/lib/em-midori.rb
CHANGED
data/lib/em-midori/api.rb
CHANGED
@@ -163,47 +163,46 @@ class Midori::API
|
|
163
163
|
# === Returns
|
164
164
|
# nil
|
165
165
|
def add_route(method, path, block)
|
166
|
-
@route = [] if @route.nil?
|
167
166
|
if path.class == String
|
168
167
|
# Convert String to Regexp to provide performance boost (Precompiled Regexp)
|
169
168
|
path = convert_route path
|
170
169
|
end
|
170
|
+
@route = [] if @route.nil?
|
171
171
|
@route << Midori::Route.new(method, path, block)
|
172
172
|
nil
|
173
173
|
end
|
174
174
|
|
175
175
|
# Process after receive data from client
|
176
176
|
# === Attributes
|
177
|
-
# * +request+ [+
|
177
|
+
# * +request+ [+Midori::Request+] - Http Raw Request
|
178
178
|
# === Returns
|
179
179
|
# [+Midori::Response+] - Http response
|
180
180
|
def receive(request, connection = nil)
|
181
181
|
@route.each do |route|
|
182
182
|
matched = match(route.method, route.path, request.method, request.path)
|
183
183
|
next unless matched
|
184
|
+
if @middleware.nil?
|
185
|
+
@middleware = []
|
186
|
+
@body_accept = [String]
|
187
|
+
end
|
188
|
+
@middleware.each { |middleware| request = middleware.before(request) }
|
184
189
|
clean_room = Midori::CleanRoom.new(request)
|
185
190
|
if request.websocket?
|
186
191
|
# Send 101 Switching Protocol
|
187
|
-
connection.send_data Midori::Response.new(101,
|
188
|
-
|
189
|
-
'Connection' => 'Upgrade',
|
190
|
-
'Sec-WebSocket-Accept' => Digest::SHA1.base64digest(request.header['Sec-WebSocket-Key'] + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
|
191
|
-
}, '')
|
192
|
-
result = -> { clean_room.instance_exec(connection.websocket, *matched, &route.function) }.call
|
192
|
+
connection.send_data Midori::Response.new(101, websocket_header(request.header['Sec-WebSocket-Key']), '')
|
193
|
+
-> { clean_room.instance_exec(connection.websocket, *matched, &route.function) }.call
|
193
194
|
return Midori::Response.new
|
194
195
|
elsif request.eventsource?
|
195
|
-
connection.send_data Midori::Response.new(200,
|
196
|
-
|
197
|
-
'Cache-Control' => 'no-cache',
|
198
|
-
'Connection' => 'keep-alive'
|
199
|
-
}, '')
|
200
|
-
result = -> { clean_room.instance_exec(connection.eventsource, *matched, &route.function) }.call
|
196
|
+
connection.send_data Midori::Response.new(200, Midori::Const::EVENTSOURCE_HEADER, '')
|
197
|
+
-> { clean_room.instance_exec(connection.eventsource, *matched, &route.function) }.call
|
201
198
|
return Midori::Response.new
|
202
199
|
else
|
203
200
|
result = -> { clean_room.instance_exec(*matched, &route.function) }.call
|
201
|
+
clean_room.body = result if @body_accept.include?(result.class)
|
202
|
+
response = clean_room.response
|
203
|
+
@middleware.reverse.each { |middleware| response = middleware.after(request, response) }
|
204
|
+
return response
|
204
205
|
end
|
205
|
-
clean_room.body = result if result.class == String
|
206
|
-
return clean_room.response
|
207
206
|
end
|
208
207
|
raise Midori::Error::NotFound
|
209
208
|
end
|
@@ -243,6 +242,21 @@ class Midori::API
|
|
243
242
|
path += '$' if path[-1] != '$'
|
244
243
|
Regexp.new path
|
245
244
|
end
|
245
|
+
|
246
|
+
def use(middleware)
|
247
|
+
raise Midori::Error::MiddlewareError unless middleware.new.is_a?Midori::Middleware
|
248
|
+
@middleware = [] if @middleware.nil?
|
249
|
+
@middleware << middleware
|
250
|
+
@body_accept = middleware.accept
|
251
|
+
end
|
252
|
+
|
253
|
+
def websocket_header(key)
|
254
|
+
{
|
255
|
+
'Upgrade' => 'websocket',
|
256
|
+
'Connection' => 'Upgrade',
|
257
|
+
'Sec-WebSocket-Accept' => Digest::SHA1.base64digest(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
|
258
|
+
}
|
259
|
+
end
|
246
260
|
end
|
247
261
|
|
248
262
|
private_class_method :add_route
|
data/lib/em-midori/const.rb
CHANGED
data/lib/em-midori/error.rb
CHANGED
data/lib/em-midori/request.rb
CHANGED
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.0.9
|
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-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eventmachine
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/em-midori/em_midori.rb
|
53
53
|
- lib/em-midori/error.rb
|
54
54
|
- lib/em-midori/eventsource.rb
|
55
|
+
- lib/em-midori/middleware.rb
|
55
56
|
- lib/em-midori/promise.rb
|
56
57
|
- lib/em-midori/request.rb
|
57
58
|
- lib/em-midori/response.rb
|