0
0
Fork 0

added options to controller

This avoids hardcoding the options into the controller and therefore
should it make possible to use Rack::Request or Sinatra apps as
requests. (That sounds so weird.)
This commit is contained in:
Gibheer 2012-12-13 08:45:03 +01:00
parent 38bde320ac
commit 7bda0ec7e5
2 changed files with 18 additions and 7 deletions

View File

@ -7,7 +7,7 @@ module Zero
class Controller
# initialize a new instance of the controller and call response on it
def self.call(env)
new(Zero::Request.new(env)).response
new(env).response
end
# set the class to use for responses
@ -20,6 +20,16 @@ module Zero
@@response ||= Zero::Response
end
# set a class to use for requests
def self.request=(request_class)
@@request = request_class
end
# return the set request class
def self.request
@@request ||= Zero::Request
end
# set the renderer to use in the controller
def self.renderer=(renderer)
@@renderer = renderer
@ -35,10 +45,11 @@ module Zero
# initialize the controller
#
# At initialization `@request`, `@response` and `@renderer` are set.
# @param request [Request] a request object
def initialize(request)
@request = request
# This creates a new controller instance using the defined classes of
# renderer, request and response.
# @param env [Hash] a rack compatible environment
def initialize(env)
@request = self.class.request.new(env)
@response = self.class.response
@renderer = self.class.renderer
end

View File

@ -3,9 +3,9 @@ require 'spec_helper'
describe Zero::Controller, '#renderer' do
subject { Zero::Controller }
let(:renderer) { Object.new }
it 'returns the set renderer' do
subject.renderer = renderer
expect(subject.new(Object.new).renderer).to be(renderer)
expect(subject.new({}).renderer).to be(renderer)
end
end