diff options
| -rw-r--r-- | lib/zero/request/server.rb | 47 | ||||
| -rw-r--r-- | spec/unit/zero/request/server/hostname_spec.rb | 1 | ||||
| -rw-r--r-- | spec/unit/zero/request/server/is_http_spec.rb | 20 | ||||
| -rw-r--r-- | spec/unit/zero/request/server/is_https_spec.rb | 20 | ||||
| -rw-r--r-- | spec/unit/zero/request/server/uri_spec.rb | 23 | 
5 files changed, 110 insertions, 1 deletions
| diff --git a/lib/zero/request/server.rb b/lib/zero/request/server.rb index 0aa82c8..8cf5092 100644 --- a/lib/zero/request/server.rb +++ b/lib/zero/request/server.rb @@ -14,6 +14,30 @@ module Zero        # the key for the server software        # @api private        KEY_SERVER_SOFTWARE = 'SERVER_SOFTWARE' +      # the key for https +      # @api private +      KEY_HTTPS           = 'HTTPS' +      # the https on switch +      # @api private +      KEY_HTTPS_ON_SWITCH = ['on', 'yes', '1'] +      # the string for http +      # @api private +      HTTP                = 'http' +      # the string for https +      # @api private +      HTTPS               = 'https' +      # protocol seperator +      # @api private +      URI_SEP_PROTOCOL    = '://' +      # port separator +      # @api private +      URI_SEP_PORT        = ':' +      # default http port +      # @api private +      DEFAULT_PORT_HTTP   = 80 +      # default https port +      # @api private +      DEFAULT_PORT_HTTPS  = 443        # This creates a new server instance extracting all server related        #  information from the environment. @@ -22,6 +46,12 @@ module Zero          @port     = environment[KEY_SERVER_PORT].to_i          @protocol = environment[KEY_SERVER_PROTOCOL]          @software = environment[KEY_SERVER_SOFTWARE] +        p environment[KEY_HTTPS] +        if KEY_HTTPS_ON_SWITCH.include?(environment[KEY_HTTPS]) +          @is_https = true +        else +          @is_https = false +        end        end        # get the port @@ -36,6 +66,23 @@ module Zero        # get the server software        # @return [String] the server software name        attr_reader :software +      # get if the request is served through https +      # @return [Boolean] true if server got the request through https +      def is_https?; @is_https; end +      # get if the request is served through http +      # @return [Boolean] true if server got the request though http +      def is_http?; !@is_https; end + +      # return the uri to the server +      # @return [String] the root uri to the server +      def uri +        uri = (is_https? ? HTTPS : HTTP) + URI_SEP_PROTOCOL + hostname +        if (port == DEFAULT_PORT_HTTP && is_http?) || +                                    (port == DEFAULT_PORT_HTTPS && is_https?) +          return uri +        end +        uri + URI_SEP_PORT + port.to_s +      end      end    end  end diff --git a/spec/unit/zero/request/server/hostname_spec.rb b/spec/unit/zero/request/server/hostname_spec.rb index b2275b4..2f9af13 100644 --- a/spec/unit/zero/request/server/hostname_spec.rb +++ b/spec/unit/zero/request/server/hostname_spec.rb @@ -6,4 +6,3 @@ describe Zero::Request::Server, '#hostname' do    let(:env) { EnvGenerator.get('/foo', {'SERVER_NAME' => hostname}) }    its(:hostname) { should be(hostname) }  end - diff --git a/spec/unit/zero/request/server/is_http_spec.rb b/spec/unit/zero/request/server/is_http_spec.rb new file mode 100644 index 0000000..6e41393 --- /dev/null +++ b/spec/unit/zero/request/server/is_http_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Zero::Request::Server, '#is_http?' do +  subject { Zero::Request::Server.new(env) } +  let(:hostname) { 'FooName' } + +  context 'with http' do +    let(:env) { EnvGenerator.get('/foo', {'SERVER_NAME' => hostname}) } +    its(:is_http?) { should be(true) } +  end + +  context 'with https' do +    let(:env) { EnvGenerator.get('/foo', { +      'SERVER_NAME' => hostname, +      'HTTPS' => 'on' +    }) } +    its(:is_http?) { should be(false) } +  end +end + diff --git a/spec/unit/zero/request/server/is_https_spec.rb b/spec/unit/zero/request/server/is_https_spec.rb new file mode 100644 index 0000000..340e489 --- /dev/null +++ b/spec/unit/zero/request/server/is_https_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Zero::Request::Server, '#is_https?' do +  subject { Zero::Request::Server.new(env) } +  let(:hostname) { 'FooName' } + +  context 'with http' do +    let(:env) { EnvGenerator.get('/foo', {'SERVER_NAME' => hostname}) } +    its(:is_https?) { should be(false) } +  end + +  context 'with https' do +    let(:env) { EnvGenerator.get('/foo', { +      'SERVER_NAME' => hostname, +      'HTTPS' => 'on' +    }) } +    its(:is_https?) { should be(true) } +  end +end + diff --git a/spec/unit/zero/request/server/uri_spec.rb b/spec/unit/zero/request/server/uri_spec.rb new file mode 100644 index 0000000..c9bd9ec --- /dev/null +++ b/spec/unit/zero/request/server/uri_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +describe Zero::Request::Server, '#uri' do +  subject { Zero::Request::Server.new(env) } +  let(:hostname) { 'FooName' } +  let(:port) { '80' } +  let(:protocol) { 'http' } +  let(:env) { EnvGenerator.get('/foo', { +    'SERVER_NAME' => hostname, +    'SERVER_PORT' => port +  }) } + +  context 'with standard port' do +    let(:result) { "#{protocol}://#{hostname}" } +    its(:uri) { should eq(result) } +  end + +  context 'with different port' do +    let(:port) { '9292' } +    let(:result) { "#{protocol}://#{hostname}:#{port}" } +    its(:uri) { should eq(result) } +  end +end | 
