cuba 3.1.0.rc1 → 3.1.0.rc2
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/CHANGELOG +5 -3
- data/README.md +24 -0
- data/cuba.gemspec +1 -1
- data/lib/cuba.rb +18 -8
- data/test/integration.rb +27 -0
- data/test/settings.rb +3 -3
- metadata +8 -8
data/CHANGELOG
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
3.1.0.
|
1
|
+
3.1.0.rc2
|
2
2
|
|
3
3
|
* Do a deep clone of the settings object during inheritance.
|
4
4
|
* Start namespacing plugins (i.e. settings[:render]).
|
5
|
-
* Use rack/test when doing
|
6
|
-
* Capybara available via
|
5
|
+
* Use rack/test when doing `require 'cuba/test'`.
|
6
|
+
* Capybara available via `require 'cuba/capybara'`.
|
7
|
+
* Use a default hash for the render plugin.
|
8
|
+
* Allow the use of custom Request and Response objects.
|
7
9
|
|
8
10
|
3.0.0
|
9
11
|
|
data/README.md
CHANGED
@@ -198,6 +198,30 @@ on get, "api" do ... end
|
|
198
198
|
Actually, `get` is syntax sugar for `req.get?`, which in turn is syntax sugar
|
199
199
|
for `env["REQUEST_METHOD"] == "GET"`.
|
200
200
|
|
201
|
+
Request and Response
|
202
|
+
--------------------
|
203
|
+
|
204
|
+
You may have noticed we use `req` and `res` a lot. Those variables are
|
205
|
+
instances of [Rack::Request][request] and `Cuba::Response` respectively, and
|
206
|
+
`Cuba::Response` is just an optimized version of
|
207
|
+
[Rack::Response][response].
|
208
|
+
|
209
|
+
[request]: http://rack.rubyforge.org/doc/classes/Rack/Request.html
|
210
|
+
[response]: http://rack.rubyforge.org/doc/classes/Rack/Response.html
|
211
|
+
|
212
|
+
Those objects are helpers for accessing the request and for building
|
213
|
+
the response. Most of the time, you will just use `req.write`.
|
214
|
+
|
215
|
+
If you want to use custom `Request` or `Response` objects, you can
|
216
|
+
set the new values as follows:
|
217
|
+
|
218
|
+
``` ruby
|
219
|
+
Cuba.settings[:req] = MyRequest
|
220
|
+
Cuba.settings[:res] = MyResponse
|
221
|
+
```
|
222
|
+
|
223
|
+
Make sure to provide classes compatible with those from Rack.
|
224
|
+
|
201
225
|
Captures
|
202
226
|
--------
|
203
227
|
|
data/cuba.gemspec
CHANGED
data/lib/cuba.rb
CHANGED
@@ -7,7 +7,9 @@ class Cuba
|
|
7
7
|
|
8
8
|
attr :headers
|
9
9
|
|
10
|
-
def initialize(status = 200,
|
10
|
+
def initialize(status = 200,
|
11
|
+
headers = { "Content-Type" => "text/html; charset=utf-8" })
|
12
|
+
|
11
13
|
@status = status
|
12
14
|
@headers = headers
|
13
15
|
@body = []
|
@@ -112,15 +114,15 @@ class Cuba
|
|
112
114
|
|
113
115
|
def call!(env)
|
114
116
|
@env = env
|
115
|
-
@req =
|
116
|
-
@res =
|
117
|
+
@req = settings[:req].new(env)
|
118
|
+
@res = settings[:res].new
|
117
119
|
|
118
120
|
# This `catch` statement will either receive a
|
119
121
|
# rack response tuple via a `halt`, or will
|
120
122
|
# fall back to issuing a 404.
|
121
123
|
#
|
122
124
|
# When it `catch`es a throw, the return value
|
123
|
-
# of this whole `
|
125
|
+
# of this whole `call!` method will be the
|
124
126
|
# rack response tuple, which is exactly what we want.
|
125
127
|
catch(:halt) do
|
126
128
|
instance_eval(&@blk)
|
@@ -195,12 +197,14 @@ class Cuba
|
|
195
197
|
private :try
|
196
198
|
|
197
199
|
def consume(pattern)
|
198
|
-
|
200
|
+
matchdata = env["PATH_INFO"].match(/\A\/(#{pattern})((?:\/|\z))/)
|
201
|
+
|
202
|
+
return false unless matchdata
|
199
203
|
|
200
|
-
path, *vars =
|
204
|
+
path, *vars = matchdata.captures
|
201
205
|
|
202
206
|
env["SCRIPT_NAME"] += "/#{path}"
|
203
|
-
env["PATH_INFO"] = "#{vars.pop}#{
|
207
|
+
env["PATH_INFO"] = "#{vars.pop}#{matchdata.post_match}"
|
204
208
|
|
205
209
|
captures.push(*vars)
|
206
210
|
end
|
@@ -264,8 +268,11 @@ class Cuba
|
|
264
268
|
# end
|
265
269
|
def accept(mimetype)
|
266
270
|
lambda do
|
267
|
-
String(env["HTTP_ACCEPT"]).split(",")
|
271
|
+
accept = String(env["HTTP_ACCEPT"]).split(",")
|
272
|
+
|
273
|
+
if accept.any? { |s| s.strip == mimetype }
|
268
274
|
res["Content-Type"] = mimetype
|
275
|
+
end
|
269
276
|
end
|
270
277
|
end
|
271
278
|
|
@@ -325,3 +332,6 @@ class Cuba
|
|
325
332
|
throw :halt, response
|
326
333
|
end
|
327
334
|
end
|
335
|
+
|
336
|
+
Cuba.settings[:req] = Rack::Request
|
337
|
+
Cuba.settings[:res] = Cuba::Response
|
data/test/integration.rb
CHANGED
@@ -85,3 +85,30 @@ test "reset and use" do
|
|
85
85
|
assert "2" == env["m.second"]
|
86
86
|
assert "3" == env["m.block"]
|
87
87
|
end
|
88
|
+
|
89
|
+
test "custom response" do
|
90
|
+
class MyResponse < Cuba::Response
|
91
|
+
def foobar
|
92
|
+
write "Default"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
Cuba.settings[:res] = MyResponse
|
97
|
+
|
98
|
+
Cuba.define do
|
99
|
+
on get do
|
100
|
+
on "hello" do
|
101
|
+
res.foobar
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
env = { "REQUEST_METHOD" => "GET", "PATH_INFO" => "/hello",
|
107
|
+
"SCRIPT_NAME" => "/" }
|
108
|
+
|
109
|
+
status, headers, resp = Cuba.call(env)
|
110
|
+
|
111
|
+
assert 200 == status
|
112
|
+
assert "text/html; charset=utf-8" == headers["Content-Type"]
|
113
|
+
assert_response resp, ["Default"]
|
114
|
+
end
|
data/test/settings.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.expand_path("helper", File.dirname(__FILE__))
|
2
2
|
|
3
|
-
test "settings
|
4
|
-
|
5
|
-
|
3
|
+
test "settings contains request and response classes by default" do
|
4
|
+
assert_equal Cuba.settings[:req], Rack::Request
|
5
|
+
assert_equal Cuba.settings[:res], Cuba::Response
|
6
6
|
end
|
7
7
|
|
8
8
|
test "is inheritable and allows overriding" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.0.
|
4
|
+
version: 3.1.0.rc2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &2151834200 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2151834200
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: cutest
|
27
|
-
requirement: &
|
27
|
+
requirement: &2151832280 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2151832280
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: capybara
|
38
|
-
requirement: &
|
38
|
+
requirement: &2151830340 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2151830340
|
47
47
|
description: Cuba is a microframework for web applications.
|
48
48
|
email:
|
49
49
|
- michel@soveran.com
|