use class_options for the controller
This commit is contained in:
parent
f9fd98510b
commit
399e0ea338
|
@ -2,7 +2,7 @@
|
|||
if RUBY_VERSION <= '1.9'
|
||||
require 'zero_fix18'
|
||||
end
|
||||
|
||||
require 'class_options'
|
||||
|
||||
module Zero
|
||||
require 'zero/controller'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue