aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGibheer <gibheer@gmail.com>2013-01-11 13:21:02 +0100
committerGibheer <gibheer@gmail.com>2013-01-11 16:02:26 +0100
commit399e0ea3383732aa2a29557ed8344cae74632e8e (patch)
tree29effc7608f25a0b3740a46e2e8475171209a8a5
parentf9fd98510b7ccc6aa5bb8685fa1a7e144eb4d737 (diff)
use class_options for the controller
-rw-r--r--lib/zero.rb2
-rw-r--r--lib/zero/controller.rb28
-rw-r--r--spec/spec_helper.rb9
-rw-r--r--spec/unit/zero/controller/call_spec.rb12
-rw-r--r--spec/unit/zero/controller/render_spec.rb11
-rw-r--r--spec/unit/zero/controller/renderer_spec.rb8
6 files changed, 34 insertions, 36 deletions
diff --git a/lib/zero.rb b/lib/zero.rb
index 3d3580f..d1f3d9a 100644
--- a/lib/zero.rb
+++ b/lib/zero.rb
@@ -2,7 +2,7 @@
if RUBY_VERSION <= '1.9'
require 'zero_fix18'
end
-
+require 'class_options'
module Zero
require 'zero/controller'
diff --git a/lib/zero/controller.rb b/lib/zero/controller.rb
index ce9e247..ce2122f 100644
--- a/lib/zero/controller.rb
+++ b/lib/zero/controller.rb
@@ -5,40 +5,20 @@ module Zero
# rack compatible controllers. It catches #call and creates a new instance
# with the environment and calls #render on it.
class Controller
+ extend ClassOptions::Options
# initialize a new instance of the controller and call response on it
def self.call(env)
new(env).response
end
# set the class to use for responses
- def self.response=(response_class)
- @@response = response_class
- end
-
- # return the set response class
- def self.response
- @@response ||= Zero::Response
- end
+ options :response
# 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
+ options :request
# set the renderer to use in the controller
- def self.renderer=(renderer)
- @@renderer = renderer
- end
-
- # get the renderer set in the controller
- def self.renderer
- @@renderer
- end
+ options :renderer
# the renderer which can be used to render templates
attr_reader :renderer
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 1b0dd61..5711e6c 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -19,9 +19,12 @@ class SpecTemplateContext
end
end
-class SpecController < Zero::Controller
- def process; end
- def render; @response = [200, {'Content-Type' => 'text/html'}, ['foo']]; end
+def create_controller
+ Class.new(Zero::Controller) do
+ def process
+ @response.body = 'correct'
+ end
+ end
end
class SpecApp
diff --git a/spec/unit/zero/controller/call_spec.rb b/spec/unit/zero/controller/call_spec.rb
index 6cc56a4..44a8f0a 100644
--- a/spec/unit/zero/controller/call_spec.rb
+++ b/spec/unit/zero/controller/call_spec.rb
@@ -1,12 +1,14 @@
require 'spec_helper'
describe Zero::Controller, '.call' do
- subject { controller.call(env) }
- let(:controller) { SpecController }
+ let(:object) { create_controller }
+ subject { object.call(env) }
let(:env) { EnvGenerator.get('/foo') }
before :each do
- controller.renderer = Object.new
+ object.renderer = Object.new
+ object.response = Zero::Response
+ object.request = Zero::Request
end
it "returns a response" do
@@ -28,8 +30,8 @@ describe Zero::Controller, '.call' do
context "with the response" do
let(:response_class) { mock }
before :each do
- Zero::Controller.response = response_class
- response_class.should_receive(:new)
+ object.response = response_class
+ response_class.should_receive(:new).and_return(Zero::Response.new)
end
after :each do
diff --git a/spec/unit/zero/controller/render_spec.rb b/spec/unit/zero/controller/render_spec.rb
index 771db28..0d807cc 100644
--- a/spec/unit/zero/controller/render_spec.rb
+++ b/spec/unit/zero/controller/render_spec.rb
@@ -1,13 +1,20 @@
require 'spec_helper'
describe Zero::Controller, '#render' do
- subject { Zero::Controller.new(env) }
+ let(:object) { create_controller }
+ subject { object.new(env) }
+
+ before do
+ object.request = Zero::Request
+ object.response = Zero::Response
+ end
+
let(:env) { EnvGenerator.get('/foo') }
let(:renderer) { mock }
let(:template) { '/foo' }
before :each do
- Zero::Controller.renderer = renderer
+ object.renderer = renderer
renderer.should_receive(:render).with(template,
kind_of(Zero::Request::AcceptType), subject)
end
diff --git a/spec/unit/zero/controller/renderer_spec.rb b/spec/unit/zero/controller/renderer_spec.rb
index 21664ec..35e0475 100644
--- a/spec/unit/zero/controller/renderer_spec.rb
+++ b/spec/unit/zero/controller/renderer_spec.rb
@@ -1,11 +1,17 @@
require 'spec_helper'
describe Zero::Controller, '#renderer' do
- subject { Zero::Controller }
+ subject { create_controller }
let(:renderer) { Object.new }
+ before do
+ subject.response = Zero::Response
+ subject.request = Zero::Request
+ end
+
it 'returns the set renderer' do
subject.renderer = renderer
+ p subject.renderer
expect(subject.new({}).renderer).to be(renderer)
end
end