From 7bda0ec7e5f6ead0af610f0393c4e039fad9dbf1 Mon Sep 17 00:00:00 2001 From: Gibheer Date: Thu, 13 Dec 2012 08:45:03 +0100 Subject: 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.) --- lib/zero/controller.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/zero/controller.rb b/lib/zero/controller.rb index 17d9b3f..febb23e 100644 --- a/lib/zero/controller.rb +++ b/lib/zero/controller.rb @@ -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 -- cgit v1.2.3-70-g09d2