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