em-midori 0.0.8 → 0.0.9
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 +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
|