hobbit-contrib 0.3.0 → 0.4.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.md +4 -0
- data/lib/hobbit/contrib/version.rb +1 -1
- data/lib/hobbit/error_handling.rb +1 -1
- data/lib/hobbit/filter.rb +25 -7
- data/spec/filter_spec.rb +71 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d5577a3a973a53f5d608319d42f2f7bbe764277
|
4
|
+
data.tar.gz: 3571ca057d566d5c618bca565cb11a255fe0bba8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d2c7435085e2359a06036dc9953382644398f59b865ed5a667f55081853873aca86609a16053655a2fb70c029109e0d339720f5278fe973dd623f3e7cdbd58d
|
7
|
+
data.tar.gz: fa1a182827742a465144c88e9c2e0a0bf8c64481ac8c49e9255452f63f2f2ffd5c9d150c6e3d648929ea7fa7951b813c014e88243e149aa26176858703179889
|
data/CHANGELOG.md
CHANGED
@@ -13,7 +13,7 @@ module Hobbit
|
|
13
13
|
def _call(env)
|
14
14
|
super
|
15
15
|
rescue *self.class.errors.keys => e
|
16
|
-
rescued = self.class.errors.keys.detect { |k| e.kind_of?(k)}
|
16
|
+
rescued = self.class.errors.keys.detect { |k| e.kind_of?(k) }
|
17
17
|
|
18
18
|
body = instance_eval { self.class.errors[rescued].call(e) }
|
19
19
|
response.body = [body]
|
data/lib/hobbit/filter.rb
CHANGED
@@ -2,7 +2,7 @@ module Hobbit
|
|
2
2
|
module Filter
|
3
3
|
module ClassMethods
|
4
4
|
%w(after before).each do |kind|
|
5
|
-
define_method(kind) { |path = '', &block| filters[kind.to_sym] << compile_filter(path, &block) }
|
5
|
+
define_method(kind) { |path = '/', &block| filters[kind.to_sym] << compile_filter(path, &block) }
|
6
6
|
end
|
7
7
|
|
8
8
|
def filters
|
@@ -29,14 +29,21 @@ module Hobbit
|
|
29
29
|
@env = env
|
30
30
|
@request = Rack::Request.new(@env)
|
31
31
|
@response = Hobbit::Response.new
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
catch :halt do
|
33
|
+
filter :before
|
34
|
+
unless @response.status == 302
|
35
|
+
super
|
36
|
+
filter :after unless @halted
|
37
|
+
end
|
36
38
|
end
|
37
39
|
@response.finish
|
38
40
|
end
|
39
41
|
|
42
|
+
def halt(status, headers: {}, body: [])
|
43
|
+
@halted = true
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
40
47
|
def self.included(othermod)
|
41
48
|
othermod.extend ClassMethods
|
42
49
|
end
|
@@ -44,14 +51,25 @@ module Hobbit
|
|
44
51
|
private
|
45
52
|
|
46
53
|
def filter(kind)
|
47
|
-
filter =
|
54
|
+
filter = find_filter(kind)
|
55
|
+
if filter
|
56
|
+
instance_eval(&filter[:block])
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def find_filter(kind)
|
61
|
+
filter = self.class.filters[kind].detect do |f|
|
62
|
+
f[:compiled_path] =~ request.path_info
|
63
|
+
end
|
64
|
+
|
48
65
|
if filter
|
49
66
|
$~.captures.each_with_index do |value, index|
|
50
67
|
param = filter[:extra_params][index]
|
51
68
|
request.params[param] = value
|
52
69
|
end
|
53
|
-
instance_eval(&filter[:block])
|
54
70
|
end
|
71
|
+
|
72
|
+
filter
|
55
73
|
end
|
56
74
|
end
|
57
75
|
end
|
data/spec/filter_spec.rb
CHANGED
@@ -170,4 +170,75 @@ EOS
|
|
170
170
|
last_response.body.must_match /goodbye world/
|
171
171
|
end
|
172
172
|
end
|
173
|
+
|
174
|
+
describe 'when halting in a before filter' do
|
175
|
+
let :app do
|
176
|
+
mock_app do
|
177
|
+
include Hobbit::Filter
|
178
|
+
|
179
|
+
before do
|
180
|
+
halt 401
|
181
|
+
end
|
182
|
+
|
183
|
+
get '/' do
|
184
|
+
'hello world'
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'wont execute the route' do
|
190
|
+
get '/'
|
191
|
+
last_response.status.must_equal 401
|
192
|
+
last_response.body.must_be :empty?
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe 'when halting in a route' do
|
197
|
+
let :app do
|
198
|
+
mock_app do
|
199
|
+
include Hobbit::Filter
|
200
|
+
|
201
|
+
before do
|
202
|
+
response.headers['Content-Type'] = 'text/plain'
|
203
|
+
end
|
204
|
+
|
205
|
+
after do
|
206
|
+
response.headers['Content-Type'] = 'application/json'
|
207
|
+
end
|
208
|
+
|
209
|
+
get '/' do
|
210
|
+
halt 401, body: 'Unauthenticated'
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'wont execute the after filter' do
|
216
|
+
get '/'
|
217
|
+
last_response.status.must_equal 401
|
218
|
+
last_response.headers.wont_include 'Content-Type'
|
219
|
+
last_response.body.must_equal 'Unauthenticated'
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
describe 'when halting in an after filter' do
|
224
|
+
let :app do
|
225
|
+
mock_app do
|
226
|
+
include Hobbit::Filter
|
227
|
+
|
228
|
+
after do
|
229
|
+
halt 401
|
230
|
+
end
|
231
|
+
|
232
|
+
get '/' do
|
233
|
+
'hello world'
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
it 'wont execute the route' do
|
239
|
+
get '/'
|
240
|
+
last_response.status.must_equal 401
|
241
|
+
last_response.body.must_be :empty?
|
242
|
+
end
|
243
|
+
end
|
173
244
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobbit-contrib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
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-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -175,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
175
|
version: '0'
|
176
176
|
requirements: []
|
177
177
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.2.
|
178
|
+
rubygems_version: 2.2.1
|
179
179
|
signing_key:
|
180
180
|
specification_version: 4
|
181
181
|
summary: Contributed Hobbit extensions
|