From a95f1436c4f31b88dccde31bd2468d99afa04e2b Mon Sep 17 00:00:00 2001 From: Gibheer Date: Wed, 12 Dec 2012 18:38:46 +0100 Subject: replaced .create with .new on Zero::Request --- lib/zero/controller.rb | 14 ++++++++++++-- lib/zero/request.rb | 13 ++++++++++--- lib/zero/router.rb | 2 +- spec/unit/controller/call_spec.rb | 2 +- spec/unit/request/create_spec.rb | 21 --------------------- spec/unit/request/new_spec.rb | 21 +++++++++++++++++++++ spec/unit/router/call_spec.rb | 2 +- 7 files changed, 46 insertions(+), 29 deletions(-) delete mode 100644 spec/unit/request/create_spec.rb create mode 100644 spec/unit/request/new_spec.rb diff --git a/lib/zero/controller.rb b/lib/zero/controller.rb index f7c8d53..17d9b3f 100644 --- a/lib/zero/controller.rb +++ b/lib/zero/controller.rb @@ -7,7 +7,17 @@ module Zero class Controller # initialize a new instance of the controller and call response on it def self.call(env) - new(Zero::Request.create(env)).response + new(Zero::Request.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 # set the renderer to use in the controller @@ -29,7 +39,7 @@ module Zero # @param request [Request] a request object def initialize(request) @request = request - @response = Zero::Response.new + @response = self.class.response @renderer = self.class.renderer end diff --git a/lib/zero/request.rb b/lib/zero/request.rb index 9dc9513..10862fe 100644 --- a/lib/zero/request.rb +++ b/lib/zero/request.rb @@ -6,9 +6,16 @@ require_relative 'request/server' module Zero # This class wraps around a rack environment for easier access to all data. class Request - def self.create(environment) - return environment['zero.request'] if environment.has_key?('zero.request') - new(environment) + class << self + # replace #new with a function to reuse an already defined request + alias_method :__new__, :new + + # reuse an already defined request in the environment or create a new one + # @param environment [Hash] a rack compatible request environment + def new(environment) + return environment['zero.request'] if environment.has_key?('zero.request') + __new__(environment) + end end # create a new request object diff --git a/lib/zero/router.rb b/lib/zero/router.rb index 9ec3b4b..5f77624 100644 --- a/lib/zero/router.rb +++ b/lib/zero/router.rb @@ -47,7 +47,7 @@ module Zero # @param env [Hash] a rack environment # @return [Array] a rack compatible response def call(env) - request = Zero::Request.create(env) + request = Zero::Request.new(env) @routes.each do |route, target| match = route.match(request.path) if match diff --git a/spec/unit/controller/call_spec.rb b/spec/unit/controller/call_spec.rb index 9d2317e..7ff6c40 100644 --- a/spec/unit/controller/call_spec.rb +++ b/spec/unit/controller/call_spec.rb @@ -21,7 +21,7 @@ describe Zero::Controller, '.call' do r = Zero::Request.new(env) r.params['foo'] = 'bar' subject - r = Zero::Request.create(env) + r = Zero::Request.new(env) expect(r.params['foo']).to eq('bar') end end diff --git a/spec/unit/request/create_spec.rb b/spec/unit/request/create_spec.rb deleted file mode 100644 index a3440af..0000000 --- a/spec/unit/request/create_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'spec_helper' - -describe Zero::Request, '.create' do - subject { Zero::Request.new(env) } - - context "with a fresh environment" do - let(:env) { EnvGenerator.get('/foo') } - it "creates an instance of Zero::Request" do - Zero::Request.create(env).should be_an_instance_of(Zero::Request) - end - end - - context "with an already used environment" do - let(:env) { EnvGenerator.get('/foo') } - let(:new_env) { subject.env } - - it "returns an already build request" do - Zero::Request.create(new_env).should be(subject) - end - end -end diff --git a/spec/unit/request/new_spec.rb b/spec/unit/request/new_spec.rb new file mode 100644 index 0000000..d057800 --- /dev/null +++ b/spec/unit/request/new_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +describe Zero::Request, '.new' do + subject { Zero::Request.new(env) } + + context "with a fresh environment" do + let(:env) { EnvGenerator.get('/foo') } + it "creates an instance of Zero::Request" do + Zero::Request.new(env).should be_an_instance_of(Zero::Request) + end + end + + context "with an already used environment" do + let(:env) { EnvGenerator.get('/foo') } + let(:new_env) { subject.env } + + it "returns an already build request" do + Zero::Request.new(new_env).should be(subject) + end + end +end diff --git a/spec/unit/router/call_spec.rb b/spec/unit/router/call_spec.rb index b7cf315..6f5c78c 100644 --- a/spec/unit/router/call_spec.rb +++ b/spec/unit/router/call_spec.rb @@ -45,7 +45,7 @@ describe Zero::Router, '#call' do let(:env) { EnvGenerator.get('/foo/bar') } let(:app) do lambda do |env| - [200, {}, [Zero::Request.create(env).params['id']]] + [200, {}, [Zero::Request.new(env).params['id']]] end end let(:result) { ['bar'] } -- cgit v1.2.3-70-g09d2