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 ++++++++++++++++----- spec/unit/controller/renderer_spec.rb | 4 ++-- 2 files changed, 18 insertions(+), 7 deletions(-) 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 diff --git a/spec/unit/controller/renderer_spec.rb b/spec/unit/controller/renderer_spec.rb index c840f23..21664ec 100644 --- a/spec/unit/controller/renderer_spec.rb +++ b/spec/unit/controller/renderer_spec.rb @@ -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 -- cgit v1.2.3-70-g09d2