diff options
-rw-r--r-- | lib/zero/request.rb | 6 | ||||
-rw-r--r-- | spec/unit/request/create_spec.rb | 21 |
2 files changed, 27 insertions, 0 deletions
diff --git a/lib/zero/request.rb b/lib/zero/request.rb index 22c5a52..6b6ff01 100644 --- a/lib/zero/request.rb +++ b/lib/zero/request.rb @@ -6,9 +6,15 @@ 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) + end + # create a new request object def initialize(env) @env = env + @env['zero.request'] = self end # get the environment diff --git a/spec/unit/request/create_spec.rb b/spec/unit/request/create_spec.rb new file mode 100644 index 0000000..a3440af --- /dev/null +++ b/spec/unit/request/create_spec.rb @@ -0,0 +1,21 @@ +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 |