diff options
| -rw-r--r-- | lib/zero.rb | 2 | ||||
| -rw-r--r-- | lib/zero/controller.rb | 28 | ||||
| -rw-r--r-- | spec/spec_helper.rb | 9 | ||||
| -rw-r--r-- | spec/unit/zero/controller/call_spec.rb | 12 | ||||
| -rw-r--r-- | spec/unit/zero/controller/render_spec.rb | 11 | ||||
| -rw-r--r-- | spec/unit/zero/controller/renderer_spec.rb | 8 | 
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 | 
