aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGibheer <gibheer@gmail.com>2012-12-13 08:45:03 +0100
committerGibheer <gibheer@gmail.com>2012-12-13 08:45:03 +0100
commit7bda0ec7e5f6ead0af610f0393c4e039fad9dbf1 (patch)
tree18741bc721d87b62906dc38e2effc801f1969518
parent38bde320ac7ba70b5d3a0320f70080062a8790c0 (diff)
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.)
-rw-r--r--lib/zero/controller.rb21
-rw-r--r--spec/unit/controller/renderer_spec.rb4
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