0
0
Fork 0

use class_options for the controller

This commit is contained in:
Gibheer 2013-01-11 13:21:02 +01:00
parent f9fd98510b
commit 399e0ea338
6 changed files with 34 additions and 36 deletions

View File

@ -2,7 +2,7 @@
if RUBY_VERSION <= '1.9'
require 'zero_fix18'
end
require 'class_options'
module Zero
require 'zero/controller'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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