diff options
| author | Gibheer <gibheer@gmail.com> | 2012-11-29 19:44:12 +0100 | 
|---|---|---|
| committer | Gibheer <gibheer@gmail.com> | 2012-11-29 19:44:12 +0100 | 
| commit | 8c7eed073c7afa8f432da84b4cf96bffd3ba2656 (patch) | |
| tree | e5a57f33139328e71954e31ad21d13de8532fd85 | |
| parent | 2762f68363d7578ca02b77e4248496c62873d93c (diff) | |
added custom parameter
| -rw-r--r-- | lib/zero/request/parameter.rb | 29 | ||||
| -rw-r--r-- | spec/unit/request/parameter/[]_spec.rb | 56 | ||||
| -rw-r--r-- | spec/unit/request/parameter/custom_spec.rb | 18 | 
3 files changed, 103 insertions, 0 deletions
| diff --git a/lib/zero/request/parameter.rb b/lib/zero/request/parameter.rb index 13e92ea..cac9915 100644 --- a/lib/zero/request/parameter.rb +++ b/lib/zero/request/parameter.rb @@ -28,6 +28,9 @@ module Zero        attr_reader :payload        alias_method(:post, :payload) +      # get all custom parameters +      attr_reader :custom +        # creates a new parameter instance        #        # This should never be called directly, as it will be generated for you. @@ -37,6 +40,32 @@ module Zero        def initialize(environment)          @query   = extract_query_params(environment)          @payload = extract_payload_params(environment) +        @custom  = {} +        environment['zero.params.custom'] = @custom +      end + +      # get a parameter +      # +      # With this method you can get the value of a parameter. First the +      # custom parameters are checked, then payload and after that the query +      # ones. +      # +      # *Beware, that this may lead to security holes!* +      # +      # @param key [String] a key to look for +      # @returns [String] the value of the key +      def [](key) +        @custom[key] || @payload[key] || @query[key] +      end + +      # set a custom key/value pair +      # +      # Use this method if you want to set a custom parameter for later use. If +      # the key was already set it will be overwritten. +      # @param key [String] the key to use for saving the parameter +      # @param value [Object] the value for the key +      def []=(key, value) +        @custom[key] = value        end        private diff --git a/spec/unit/request/parameter/[]_spec.rb b/spec/unit/request/parameter/[]_spec.rb new file mode 100644 index 0000000..1136eae --- /dev/null +++ b/spec/unit/request/parameter/[]_spec.rb @@ -0,0 +1,56 @@ +require 'spec_helper' + +describe Zero::Request::Parameter, '#[]' do +  subject { Zero::Request::Parameter.new(env) } + +  context 'without parameters' do +    let(:env) { EnvGenerator.get('/foo') } + +    it 'returns the custom parameter' do +      subject['foo'] = 'bar' +      expect(subject['foo']).to eq('bar') +    end +  end + +  context 'with query parameters' do +    let(:env) { EnvGenerator.get('/foo?foo=bar') } + +    it 'returns the query parameter' do +      expect(subject['foo']).to eq('bar') +    end + +    it 'returns the custom parameter' do +      subject['foo'] = 'baz' +      expect(subject['foo']).to eq('baz') +    end +  end + +  context 'with payload parameters' do +    let(:env) do +      EnvGenerator.post('/foo', { +        :input => 'foo=bar', 'CONTENT_TYPE' => 'multipart/form-data' +      }) +    end + +    it 'returns the payload value' do +      expect(subject['foo']).to eq('bar') +    end + +    it 'returns the custom parameter' do +      subject['foo'] = 'baz' +      expect(subject['foo']).to eq('baz') +    end +  end + +  context 'with query and payload parameters' do +    let(:env) do +      EnvGenerator.post('/foo?foo=baz', { +        :input => 'foo=bar', 'CONTENT_TYPE' => 'multipart/form-data' +      }) +    end + +    it 'returns the payload parameter' do +      expect(subject['foo']).to eq('bar') +    end +  end +end diff --git a/spec/unit/request/parameter/custom_spec.rb b/spec/unit/request/parameter/custom_spec.rb new file mode 100644 index 0000000..9c720d2 --- /dev/null +++ b/spec/unit/request/parameter/custom_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe Zero::Request::Parameter, '#custom' do +  subject { Zero::Request::Parameter.new(env) } +  let(:env) { EnvGenerator.get('/foo') } + +  it 'returns a set custom parameter' do +    subject['foo'] = 'bar' +    expect(subject.custom['foo']).to eq('bar') +  end + +  it 'returns the latest set value' do +    subject['foo'] = 'first' +    subject['foo'] = 'latest' + +    expect(subject.custom['foo']).to eq('latest') +  end +end | 
