hobbit 0.4.2 → 0.4.3
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.md +5 -0
- data/README.md +46 -46
- data/lib/hobbit/response.rb +3 -3
- data/lib/hobbit/version.rb +1 -1
- data/spec/base_spec.rb +3 -3
- data/spec/response_spec.rb +7 -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: fc695229b6dbea81ceaf3de386769ca9dff5ded5
|
4
|
+
data.tar.gz: f5444f4ca2eeb0edd6929bfe7058476a75690972
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c7d75254bd0ae03006229ed7f665548eb7a5557dbdc0a866910d4ebf7aa9840b7bb2dcc93ec15d2f839219310ffc0e14b4ef2a7ac4b1449fc0a4b2ec0098af6
|
7
|
+
data.tar.gz: 4e5519917bbee84db20e22de8208e9776ec5bdeaef48b88c03f0158151373029ed695e015df5476e9ed34ca6e63b4dc1077bbdd6ab209949d8ed08c678643ca3
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -27,7 +27,7 @@ $ gem install hobbit
|
|
27
27
|
## Features
|
28
28
|
|
29
29
|
* DSL inspired by [Sinatra](http://www.sinatrarb.com/).
|
30
|
-
* [Speed](https://github.com/
|
30
|
+
* [Speed](https://github.com/luislavena/bench-micro).
|
31
31
|
* Extensible with standard ruby classes and modules, with no extra logic. See
|
32
32
|
[hobbit-contrib](https://github.com/patriciomacadden/hobbit-contrib).
|
33
33
|
* Zero configuration.
|
@@ -174,65 +174,46 @@ class App < Hobbit::Base
|
|
174
174
|
end
|
175
175
|
```
|
176
176
|
|
177
|
-
|
178
|
-
|
179
|
-
Each Hobbit application is a Rack stack (See this
|
180
|
-
[blog post](http://m.onkey.org/ruby-on-rack-2-the-builder) for more
|
181
|
-
information).
|
182
|
-
|
183
|
-
#### Mapping applications
|
177
|
+
#### Halting
|
184
178
|
|
185
|
-
|
186
|
-
|
179
|
+
To immediately stop a request within a filter or route you must specify the
|
180
|
+
status:
|
187
181
|
|
188
182
|
```ruby
|
189
183
|
require 'hobbit'
|
190
184
|
|
191
|
-
class InnerApp < Hobbit::Base
|
192
|
-
# gets called when path_info = '/inner'
|
193
|
-
get do
|
194
|
-
'Hello InnerApp!'
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
185
|
class App < Hobbit::Base
|
199
|
-
|
186
|
+
use Rack::Session::Cookie, secret: SecureRandom.hex(64)
|
187
|
+
|
188
|
+
def session
|
189
|
+
env['rack.session']
|
190
|
+
end
|
200
191
|
|
201
192
|
get '/' do
|
202
|
-
|
193
|
+
halt 401 unless session['user_id']
|
203
194
|
end
|
204
195
|
end
|
205
196
|
```
|
206
197
|
|
207
|
-
|
208
|
-
|
209
|
-
You can add any Rack middleware to the stack by using the `use` class method:
|
198
|
+
And also you can add a body:
|
210
199
|
|
211
200
|
```ruby
|
212
201
|
require 'hobbit'
|
213
202
|
|
214
203
|
class App < Hobbit::Base
|
215
204
|
use Rack::Session::Cookie, secret: SecureRandom.hex(64)
|
216
|
-
use Rack::ShowExceptions
|
217
205
|
|
218
206
|
def session
|
219
207
|
env['rack.session']
|
220
208
|
end
|
221
209
|
|
222
210
|
get '/' do
|
223
|
-
|
211
|
+
halt 401, body: 'This will be the body' unless session['user_id']
|
224
212
|
end
|
225
|
-
|
226
|
-
# more routes...
|
227
213
|
end
|
228
|
-
|
229
|
-
run App.new
|
230
214
|
```
|
231
215
|
|
232
|
-
|
233
|
-
|
234
|
-
To immediately stop a request within a filter or route you must specify the
|
235
|
-
status:
|
216
|
+
Or headers:
|
236
217
|
|
237
218
|
```ruby
|
238
219
|
require 'hobbit'
|
@@ -245,14 +226,14 @@ class App < Hobbit::Base
|
|
245
226
|
end
|
246
227
|
|
247
228
|
get '/' do
|
248
|
-
halt 401
|
229
|
+
halt 401, headers: { 'Content-Type' => 'text/html; charset=utf-8' }
|
249
230
|
end
|
250
231
|
end
|
251
232
|
```
|
252
233
|
|
253
|
-
|
234
|
+
Or both:
|
254
235
|
|
255
|
-
```ruby
|
236
|
+
``` ruby
|
256
237
|
require 'hobbit'
|
257
238
|
|
258
239
|
class App < Hobbit::Base
|
@@ -263,45 +244,64 @@ class App < Hobbit::Base
|
|
263
244
|
end
|
264
245
|
|
265
246
|
get '/' do
|
266
|
-
halt 401,
|
247
|
+
halt 401, headers: { 'Content-Type' => 'text/html; charset=utf-8' }, body: 'Woops'
|
267
248
|
end
|
268
249
|
end
|
269
250
|
```
|
270
251
|
|
271
|
-
|
252
|
+
### Built on top of rack
|
253
|
+
|
254
|
+
Each Hobbit application is a Rack stack (See this
|
255
|
+
[blog post](http://m.onkey.org/ruby-on-rack-2-the-builder) for more
|
256
|
+
information).
|
257
|
+
|
258
|
+
#### Mapping applications
|
259
|
+
|
260
|
+
You can mount any Rack application to the stack by using the `map` class
|
261
|
+
method:
|
272
262
|
|
273
263
|
```ruby
|
274
264
|
require 'hobbit'
|
275
265
|
|
276
|
-
class
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
env['rack.session']
|
266
|
+
class InnerApp < Hobbit::Base
|
267
|
+
# gets called when path_info = '/inner'
|
268
|
+
get do
|
269
|
+
'Hello InnerApp!'
|
281
270
|
end
|
271
|
+
end
|
272
|
+
|
273
|
+
class App < Hobbit::Base
|
274
|
+
map('/inner') { run InnerApp.new }
|
282
275
|
|
283
276
|
get '/' do
|
284
|
-
|
277
|
+
'Hello App!'
|
285
278
|
end
|
286
279
|
end
|
287
280
|
```
|
288
281
|
|
289
|
-
|
282
|
+
#### Using middleware
|
290
283
|
|
291
|
-
|
284
|
+
You can add any Rack middleware to the stack by using the `use` class method:
|
285
|
+
|
286
|
+
```ruby
|
292
287
|
require 'hobbit'
|
293
288
|
|
294
289
|
class App < Hobbit::Base
|
295
290
|
use Rack::Session::Cookie, secret: SecureRandom.hex(64)
|
291
|
+
use Rack::ShowExceptions
|
296
292
|
|
297
293
|
def session
|
298
294
|
env['rack.session']
|
299
295
|
end
|
300
296
|
|
301
297
|
get '/' do
|
302
|
-
|
298
|
+
session[:name] = 'hobbit'
|
303
299
|
end
|
300
|
+
|
301
|
+
# more routes...
|
304
302
|
end
|
303
|
+
|
304
|
+
run App.new
|
305
305
|
```
|
306
306
|
|
307
307
|
### Security
|
data/lib/hobbit/response.rb
CHANGED
@@ -11,17 +11,17 @@ module Hobbit
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def finish
|
14
|
-
headers['Content-Length'] = body.each.map
|
14
|
+
headers['Content-Length'] = body.each.map { |i| i.is_a?(Array) ? i.map(&:to_s).map(&:bytesize) : i.bytesize }.flatten.inject(0, &:+).to_s
|
15
15
|
[status, headers, body]
|
16
16
|
end
|
17
17
|
|
18
18
|
def redirect(target, status = 302)
|
19
|
-
headers['Location'] = target
|
20
19
|
self.status = status
|
20
|
+
headers['Location'] = target
|
21
21
|
end
|
22
22
|
|
23
23
|
def write(string)
|
24
|
-
|
24
|
+
body << string
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
data/lib/hobbit/version.rb
CHANGED
data/spec/base_spec.rb
CHANGED
@@ -231,9 +231,9 @@ EOS
|
|
231
231
|
end
|
232
232
|
end
|
233
233
|
|
234
|
-
it '
|
234
|
+
it 'returns the response given to halt function' do
|
235
235
|
get '/halt'
|
236
|
-
last_response.headers.must_equal({ 'Content-Length' => '' })
|
236
|
+
last_response.headers.must_equal({ 'Content-Length' => '0' })
|
237
237
|
last_response.body.must_equal ''
|
238
238
|
last_response.status.must_equal 501
|
239
239
|
end
|
@@ -258,7 +258,7 @@ EOS
|
|
258
258
|
|
259
259
|
it 'accepts headers' do
|
260
260
|
get '/halt_headers'
|
261
|
-
last_response.headers.must_equal({ header: 'OK', 'Content-Length' => '' })
|
261
|
+
last_response.headers.must_equal({ header: 'OK', 'Content-Length' => '0' })
|
262
262
|
last_response.status.must_equal 501
|
263
263
|
end
|
264
264
|
end
|
data/spec/response_spec.rb
CHANGED
@@ -61,6 +61,13 @@ describe Hobbit::Response do
|
|
61
61
|
h.must_include 'Content-Length'
|
62
62
|
h['Content-Length'].must_equal '17'
|
63
63
|
end
|
64
|
+
|
65
|
+
it 'must calculate the Content-Length of the body, even if the body is empty' do
|
66
|
+
response = Hobbit::Response.new
|
67
|
+
s, h, b = response.finish
|
68
|
+
h.must_include 'Content-Length'
|
69
|
+
h['Content-Length'].must_equal '0'
|
70
|
+
end
|
64
71
|
end
|
65
72
|
|
66
73
|
describe '#redirect' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobbit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patricio Mac Adden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|