@@ -227,6 +227,67 @@ def app; subject end
227227 end
228228 end
229229
230+ context 'custom middleware' do
231+ class PhonyMiddleware
232+ def initialize ( app , *args )
233+ @args = args
234+ @app = app
235+ end
236+
237+ def call ( env )
238+ env [ 'phony.args' ] ||= [ ]
239+ env [ 'phony.args' ] << @args
240+ @app . call ( env )
241+ end
242+ end
243+
244+ describe '.middleware' do
245+ it 'should include middleware arguments from settings' do
246+ subject . stub! ( :settings_stack ) . and_return [ { :middleware => [ [ PhonyMiddleware , 'abc' , 123 ] ] } ]
247+ subject . middleware . should == [ [ PhonyMiddleware , 'abc' , 123 ] ]
248+ end
249+
250+ it 'should include all middleware from stacked settings' do
251+ subject . stub! ( :settings_stack ) . and_return [
252+ { :middleware => [ [ PhonyMiddleware , 123 ] , [ PhonyMiddleware , 'abc' ] ] } ,
253+ { :middleware => [ [ PhonyMiddleware , 'foo' ] ] }
254+ ]
255+
256+ subject . middleware . should == [
257+ [ PhonyMiddleware , 123 ] ,
258+ [ PhonyMiddleware , 'abc' ] ,
259+ [ PhonyMiddleware , 'foo' ]
260+ ]
261+ end
262+ end
263+
264+ describe '.use' do
265+ it 'should add middleware' do
266+ subject . use PhonyMiddleware , 123
267+ subject . middleware . should == [ [ PhonyMiddleware , 123 ] ]
268+ end
269+
270+ it 'should not show up outside the namespace' do
271+ subject . use PhonyMiddleware , 123
272+ subject . namespace :awesome do
273+ use PhonyMiddleware , 'abc'
274+ middleware . should == [ [ PhonyMiddleware , 123 ] , [ PhonyMiddleware , 'abc' ] ]
275+ end
276+
277+ subject . middleware . should == [ [ PhonyMiddleware , 123 ] ]
278+ end
279+
280+ it 'should actually call the middleware' do
281+ subject . use PhonyMiddleware , 'hello'
282+ subject . get '/' do
283+ env [ 'phony.args' ] . first . first
284+ end
285+
286+ get '/'
287+ last_response . body . should == 'hello'
288+ end
289+ end
290+ end
230291 describe '.basic' do
231292 it 'should protect any resources on the same scope' do
232293 subject . http_basic do |u , p |
0 commit comments