use class_options for the controller
This commit is contained in:
parent
f9fd98510b
commit
399e0ea338
@ -2,7 +2,7 @@
|
|||||||
if RUBY_VERSION <= '1.9'
|
if RUBY_VERSION <= '1.9'
|
||||||
require 'zero_fix18'
|
require 'zero_fix18'
|
||||||
end
|
end
|
||||||
|
require 'class_options'
|
||||||
|
|
||||||
module Zero
|
module Zero
|
||||||
require 'zero/controller'
|
require 'zero/controller'
|
||||||
|
@ -5,40 +5,20 @@ module Zero
|
|||||||
# rack compatible controllers. It catches #call and creates a new instance
|
# rack compatible controllers. It catches #call and creates a new instance
|
||||||
# with the environment and calls #render on it.
|
# with the environment and calls #render on it.
|
||||||
class Controller
|
class Controller
|
||||||
|
extend ClassOptions::Options
|
||||||
# initialize a new instance of the controller and call response on it
|
# initialize a new instance of the controller and call response on it
|
||||||
def self.call(env)
|
def self.call(env)
|
||||||
new(env).response
|
new(env).response
|
||||||
end
|
end
|
||||||
|
|
||||||
# set the class to use for responses
|
# set the class to use for responses
|
||||||
def self.response=(response_class)
|
options :response
|
||||||
@@response = response_class
|
|
||||||
end
|
|
||||||
|
|
||||||
# return the set response class
|
|
||||||
def self.response
|
|
||||||
@@response ||= Zero::Response
|
|
||||||
end
|
|
||||||
|
|
||||||
# set a class to use for requests
|
# set a class to use for requests
|
||||||
def self.request=(request_class)
|
options :request
|
||||||
@@request = request_class
|
|
||||||
end
|
|
||||||
|
|
||||||
# return the set request class
|
|
||||||
def self.request
|
|
||||||
@@request ||= Zero::Request
|
|
||||||
end
|
|
||||||
|
|
||||||
# set the renderer to use in the controller
|
# set the renderer to use in the controller
|
||||||
def self.renderer=(renderer)
|
options :renderer
|
||||||
@@renderer = renderer
|
|
||||||
end
|
|
||||||
|
|
||||||
# get the renderer set in the controller
|
|
||||||
def self.renderer
|
|
||||||
@@renderer
|
|
||||||
end
|
|
||||||
|
|
||||||
# the renderer which can be used to render templates
|
# the renderer which can be used to render templates
|
||||||
attr_reader :renderer
|
attr_reader :renderer
|
||||||
|
@ -19,9 +19,12 @@ class SpecTemplateContext
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class SpecController < Zero::Controller
|
def create_controller
|
||||||
def process; end
|
Class.new(Zero::Controller) do
|
||||||
def render; @response = [200, {'Content-Type' => 'text/html'}, ['foo']]; end
|
def process
|
||||||
|
@response.body = 'correct'
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class SpecApp
|
class SpecApp
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Zero::Controller, '.call' do
|
describe Zero::Controller, '.call' do
|
||||||
subject { controller.call(env) }
|
let(:object) { create_controller }
|
||||||
let(:controller) { SpecController }
|
subject { object.call(env) }
|
||||||
let(:env) { EnvGenerator.get('/foo') }
|
let(:env) { EnvGenerator.get('/foo') }
|
||||||
|
|
||||||
before :each do
|
before :each do
|
||||||
controller.renderer = Object.new
|
object.renderer = Object.new
|
||||||
|
object.response = Zero::Response
|
||||||
|
object.request = Zero::Request
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a response" do
|
it "returns a response" do
|
||||||
@ -28,8 +30,8 @@ describe Zero::Controller, '.call' do
|
|||||||
context "with the response" do
|
context "with the response" do
|
||||||
let(:response_class) { mock }
|
let(:response_class) { mock }
|
||||||
before :each do
|
before :each do
|
||||||
Zero::Controller.response = response_class
|
object.response = response_class
|
||||||
response_class.should_receive(:new)
|
response_class.should_receive(:new).and_return(Zero::Response.new)
|
||||||
end
|
end
|
||||||
|
|
||||||
after :each do
|
after :each do
|
||||||
|
@ -1,13 +1,20 @@
|
|||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Zero::Controller, '#render' do
|
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(:env) { EnvGenerator.get('/foo') }
|
||||||
let(:renderer) { mock }
|
let(:renderer) { mock }
|
||||||
let(:template) { '/foo' }
|
let(:template) { '/foo' }
|
||||||
|
|
||||||
before :each do
|
before :each do
|
||||||
Zero::Controller.renderer = renderer
|
object.renderer = renderer
|
||||||
renderer.should_receive(:render).with(template,
|
renderer.should_receive(:render).with(template,
|
||||||
kind_of(Zero::Request::AcceptType), subject)
|
kind_of(Zero::Request::AcceptType), subject)
|
||||||
end
|
end
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Zero::Controller, '#renderer' do
|
describe Zero::Controller, '#renderer' do
|
||||||
subject { Zero::Controller }
|
subject { create_controller }
|
||||||
let(:renderer) { Object.new }
|
let(:renderer) { Object.new }
|
||||||
|
|
||||||
|
before do
|
||||||
|
subject.response = Zero::Response
|
||||||
|
subject.request = Zero::Request
|
||||||
|
end
|
||||||
|
|
||||||
it 'returns the set renderer' do
|
it 'returns the set renderer' do
|
||||||
subject.renderer = renderer
|
subject.renderer = renderer
|
||||||
|
p subject.renderer
|
||||||
expect(subject.new({}).renderer).to be(renderer)
|
expect(subject.new({}).renderer).to be(renderer)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user