class Escher::Request::LegacyRequest

Constants

URIREGEX

based on the example in RFC 3986, but scheme, user, password, host, port and fraement support removed, only path and query left

Public Class Methods

new(request) click to toggle source
# File lib/escher/request/legacy_request.rb, line 11
def initialize(request)
  @request = request
  prepare_request_uri
  prepare_request_headers
end

Public Instance Methods

body() click to toggle source

TODO: create a test for empty body (= nil)

# File lib/escher/request/legacy_request.rb, line 114
def body
  case @request.class.to_s
    when 'Hash'
      @request[:body] || ''
    else
      @request.body || ''
  end
end
has_header?(key) click to toggle source
# File lib/escher/request/legacy_request.rb, line 91
def has_header?(key)
  @request_headers.each { |header|
    if header[0].downcase == key.downcase
      return true
    end
  }
  return false
end
headers() click to toggle source
# File lib/escher/request/legacy_request.rb, line 64
def headers
  @request_headers
end
host() click to toggle source
# File lib/escher/request/legacy_request.rb, line 125
def host
  @request_headers.each { |header|
    if header[0].downcase == key.downcase
      return header[1]
    end
  }
  case @request.class.to_s
    when 'Hash'
      @request[:host]
    else
      begin
        @request.host
      rescue
        ""
      end
  end
end
method() click to toggle source
# File lib/escher/request/legacy_request.rb, line 102
def method
  case @request.class.to_s
    when 'Hash'
      @request[:method]
    else
      @request.request_method
  end
end
path() click to toggle source
# File lib/escher/request/legacy_request.rb, line 145
def path
  @request_uri.path
end
prepare_request_headers() click to toggle source
# File lib/escher/request/legacy_request.rb, line 36
def prepare_request_headers
  @request_headers = []
  case @request.class.to_s
    when 'Hash'
      @request_headers = @request[:headers]
    when 'Sinatra::Request' # TODO: not working yet
      @request.env.each { |key, value|
        if key.downcase[0, 5] == "http_"
          @request_headers += [[key[5..-1].gsub("_", "-"), value]]
        end
      }
    when 'WEBrick::HTTPRequest'
      @request.header.each { |key, values|
        values.each { |value|
          @request_headers += [[key, value]]
        }
      }
  end
end
prepare_request_uri() click to toggle source
# File lib/escher/request/legacy_request.rb, line 19
def prepare_request_uri
  case @request.class.to_s
    when 'Hash'
      uri = @request[:uri]
    else
      uri = @request.uri
  end
  fragments = uri.scan(URIREGEX)[0]
  @request_uri = Addressable::URI.new({
                                        :path => fragments[0],
                                        :query => fragments[2],
                                      })
  raise "Invalid request URI: #{@request_uri}" unless @request_uri
end
query_values() click to toggle source
# File lib/escher/request/legacy_request.rb, line 151
def query_values
  @request_uri.query_values(Array) || []
end
request() click to toggle source
# File lib/escher/request/legacy_request.rb, line 58
def request
  @request
end
set_header(key, value) click to toggle source
# File lib/escher/request/legacy_request.rb, line 70
def set_header(key, value)
  found = false
  @request_headers.each { |header|
    if not found and header[0].downcase == key.downcase
      header[1] = value
      found = true
    end
  }
  unless found
    @request_headers += [[key, value]]
  end
  case @request.class.to_s
    when 'Hash'
      @request[:headers] = @request_headers
    else
      @request[key] = value
  end
end