syro 2.0.0 → 2.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/CHANGELOG +4 -0
- data/README.md +8 -2
- data/lib/syro.rb +38 -5
- data/syro.gemspec +1 -1
- data/test/all.rb +16 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef99afaf8d8d2f03d42a66cf16b3aa8e76c91a66
|
4
|
+
data.tar.gz: 416d45ed7ca4d2c8e995e1b71d7a603f6b655d80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c755f0d05b8c8c8e7ffa3b1b811e658c7b9182a0632d9b5d15031414295cd97630166c773fc505d87c186d2c2a92e437512b8da6880bd8ae0c903223de7d98c6
|
7
|
+
data.tar.gz: 4cf42a210e82910a6997a7f7b54273ff98c2c0442978797d87f98a22aeac21355962f1eaca8024ae9b316a0aa0378e913fab54d41ac3d8ee308edd9052c27993
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -49,8 +49,8 @@ app = Syro.new {
|
|
49
49
|
The block is evaluated in a sandbox where the following methods are
|
50
50
|
available: `env`, `req`, `res`, `path`, `inbox`, `call`, `run`,
|
51
51
|
`halt`, `consume`, `capture`, `root?` `match`, `default`, `on`,
|
52
|
-
`root`,`get`, `put`, `post`, `patch` and `
|
53
|
-
methods are available for customizations: `default_headers`,
|
52
|
+
`root`,`get`, `put`, `head`, `post`, `patch`, `delete` and `options`.
|
53
|
+
Three other methods are available for customizations: `default_headers`,
|
54
54
|
`request_class` and `response_class`.
|
55
55
|
|
56
56
|
As a recommendation, user created variables should be instance
|
@@ -106,6 +106,9 @@ true.
|
|
106
106
|
`put`: Receives a block and calls it only if `root?` and `req.put?` are
|
107
107
|
true.
|
108
108
|
|
109
|
+
`head`: Receives a block and calls it only if `root?` and `req.head?`
|
110
|
+
are true.
|
111
|
+
|
109
112
|
`post`: Receives a block and calls it only if `root?` and `req.post?`
|
110
113
|
are true.
|
111
114
|
|
@@ -115,6 +118,9 @@ are true.
|
|
115
118
|
`delete`: Receives a block and calls it only if `root?` and `req.delete?`
|
116
119
|
are true.
|
117
120
|
|
121
|
+
`options`: Receives a block and calls it only if `root?` and
|
122
|
+
`req.options?` are true.
|
123
|
+
|
118
124
|
Decks
|
119
125
|
-----
|
120
126
|
|
data/lib/syro.rb
CHANGED
@@ -24,7 +24,7 @@ require "rack"
|
|
24
24
|
require "seg"
|
25
25
|
|
26
26
|
class Syro
|
27
|
-
INBOX = "syro.inbox".freeze
|
27
|
+
INBOX = "syro.inbox".freeze # :nodoc:
|
28
28
|
|
29
29
|
class Response
|
30
30
|
LOCATION = "Location".freeze # :nodoc:
|
@@ -48,14 +48,14 @@ class Syro
|
|
48
48
|
# res.body
|
49
49
|
# # => ["there is", "no try"]
|
50
50
|
#
|
51
|
-
|
51
|
+
attr_reader :body
|
52
52
|
|
53
53
|
# Returns a hash with the response headers.
|
54
54
|
#
|
55
55
|
# res.headers
|
56
56
|
# # => { "Content-Type" => "text/html", "Content-Length" => "42" }
|
57
57
|
#
|
58
|
-
|
58
|
+
attr_reader :headers
|
59
59
|
|
60
60
|
def initialize(headers = {})
|
61
61
|
@status = nil
|
@@ -179,10 +179,14 @@ class Syro
|
|
179
179
|
Rack::Utils.set_cookie_header!(@headers, key, value)
|
180
180
|
end
|
181
181
|
|
182
|
-
# Deletes cookie.
|
182
|
+
# Deletes given cookie.
|
183
183
|
#
|
184
184
|
# res.set_cookie("foo", "bar")
|
185
185
|
# res["Set-Cookie"]
|
186
|
+
# # => "foo=bar"
|
187
|
+
#
|
188
|
+
# res.delete_cookie("foo")
|
189
|
+
# res["Set-Cookie"]
|
186
190
|
# # => "foo=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 -0000"
|
187
191
|
#
|
188
192
|
def delete_cookie(key, value = {})
|
@@ -200,10 +204,24 @@ class Syro
|
|
200
204
|
@syro_env
|
201
205
|
end
|
202
206
|
|
207
|
+
# Returns the incoming request object. This object is an
|
208
|
+
# instance of Rack::Request.
|
209
|
+
#
|
210
|
+
# req.post? # => true
|
211
|
+
# req.params # => { "username" => "bob", "password" => "secret" }
|
212
|
+
# req[:username] # => "bob"
|
213
|
+
#
|
203
214
|
def req
|
204
215
|
@syro_req
|
205
216
|
end
|
206
217
|
|
218
|
+
# Returns the current response object. This object is an
|
219
|
+
# instance of Syro::Response.
|
220
|
+
#
|
221
|
+
# res.status = 200
|
222
|
+
# res["Content-Type"] = "text/html"
|
223
|
+
# res.write("<h1>Welcome back!</h1>")
|
224
|
+
#
|
207
225
|
def res
|
208
226
|
@syro_res
|
209
227
|
end
|
@@ -217,7 +235,7 @@ class Syro
|
|
217
235
|
end
|
218
236
|
|
219
237
|
def default_headers
|
220
|
-
|
238
|
+
{}
|
221
239
|
end
|
222
240
|
|
223
241
|
def request_class
|
@@ -254,6 +272,13 @@ class Syro
|
|
254
272
|
env[Rack::PATH_INFO], env[Rack::SCRIPT_NAME] = path, script
|
255
273
|
end
|
256
274
|
|
275
|
+
# Immediately stops the request and returns `response`
|
276
|
+
# as per Rack's specification.
|
277
|
+
#
|
278
|
+
# halt([200, { "Content-Type" => "text/html" }, ["hello"]])
|
279
|
+
# halt([res.status, res.headers, res.body])
|
280
|
+
# halt(res.finish)
|
281
|
+
#
|
257
282
|
def halt(response)
|
258
283
|
throw(:halt, response)
|
259
284
|
end
|
@@ -299,6 +324,10 @@ class Syro
|
|
299
324
|
root { yield } if req.put?
|
300
325
|
end
|
301
326
|
|
327
|
+
def head
|
328
|
+
root { yield } if req.head?
|
329
|
+
end
|
330
|
+
|
302
331
|
def post
|
303
332
|
root { yield } if req.post?
|
304
333
|
end
|
@@ -310,6 +339,10 @@ class Syro
|
|
310
339
|
def delete
|
311
340
|
root { yield } if req.delete?
|
312
341
|
end
|
342
|
+
|
343
|
+
def options
|
344
|
+
root { yield } if req.options?
|
345
|
+
end
|
313
346
|
end
|
314
347
|
|
315
348
|
include API
|
data/syro.gemspec
CHANGED
data/test/all.rb
CHANGED
@@ -108,6 +108,10 @@ app = Syro.new {
|
|
108
108
|
res.write("PUT /foo/bar")
|
109
109
|
}
|
110
110
|
|
111
|
+
head {
|
112
|
+
res.write("HEAD /foo/bar")
|
113
|
+
}
|
114
|
+
|
111
115
|
post {
|
112
116
|
res.write("POST /foo/bar")
|
113
117
|
}
|
@@ -119,6 +123,10 @@ app = Syro.new {
|
|
119
123
|
delete {
|
120
124
|
res.write("DELETE /foo/bar")
|
121
125
|
}
|
126
|
+
|
127
|
+
options {
|
128
|
+
res.write("OPTIONS /foo/bar")
|
129
|
+
}
|
122
130
|
}
|
123
131
|
}
|
124
132
|
|
@@ -200,6 +208,10 @@ test "path + verb" do |f|
|
|
200
208
|
assert_equal 200, f.last_response.status
|
201
209
|
assert_equal "PUT /foo/bar", f.last_response.body
|
202
210
|
|
211
|
+
f.head("/foo/bar")
|
212
|
+
assert_equal 200, f.last_response.status
|
213
|
+
assert_equal "HEAD /foo/bar", f.last_response.body
|
214
|
+
|
203
215
|
f.post("/foo/bar")
|
204
216
|
assert_equal 200, f.last_response.status
|
205
217
|
assert_equal "POST /foo/bar", f.last_response.body
|
@@ -211,6 +223,10 @@ test "path + verb" do |f|
|
|
211
223
|
f.delete("/foo/bar")
|
212
224
|
assert_equal 200, f.last_response.status
|
213
225
|
assert_equal "DELETE /foo/bar", f.last_response.body
|
226
|
+
|
227
|
+
f.options("/foo/bar")
|
228
|
+
assert_equal 200, f.last_response.status
|
229
|
+
assert_equal "OPTIONS /foo/bar", f.last_response.body
|
214
230
|
end
|
215
231
|
|
216
232
|
test "verbs match only on root" do |f|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: syro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michel Martens
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: seg
|