Sha256: d74a5f5fcc32671909de360b7201aead69cdaf963265b6a56438aba35d61e4fc
Contents?: true
Size: 1.13 KB
Versions: 6
Compression:
Stored size: 1.13 KB
Contents
require 'rack' class MyRackApp class NonArrayResponse # The rack response body need not implement #join, # but it must implement #each. It need not be an Array. # ActionDispatch::Response, for example, exercises that fact. # See: http://rack.rubyforge.org/doc/SPEC.html def each(*args, &blk) ["This is not in an array!"].each(*args, &blk) end end def self.call(env) case env.values_at('REQUEST_METHOD', 'PATH_INFO') when ['GET', '/'] [200, {}, ["This is my root!"]] when ['GET', '/greet'] name = env['QUERY_STRING'][/name=([^&]*)/, 1] || "World" [200, {}, ["Hello, #{name}"]] when ['GET', '/non_array_response'] [200, {}, NonArrayResponse.new] when ['GET', '/locked'] [200, {}, ["Single threaded response."]] when ['POST', '/greet'] name = env["rack.input"].read[/name=([^&]*)/, 1] || "World" [200, {}, ["Good to meet you, #{name}!"]] else [404, {}, ['']] end end end class MyLockedRackApp MUTEX = Mutex.new def self.call(env) lock = Rack::Lock.new(MyRackApp, MUTEX) lock.call(env) end end
Version data entries
6 entries across 6 versions & 1 rubygems