# -*- coding: utf-8 -*- # stolen from okkez http://github.com/hiki/hiki/blob/rack/hiki/request.rb module TDiary if Object.const_defined?( :Rack ) Request = ::Rack::Request class ::Rack::Request alias remote_addr ip end Request.class_eval { include RequestExtension } else raise RuntimeError, 'Do not use CGI class!' if Object.const_defined?( :Rack ) # CGI を Rack::Request っぽいインターフェイスに変換する class Request include RequestExtension attr_reader :env, :cgi def initialize( env, cgi = CGI.new ) @cgi = cgi @env = env end def params return @params if @params @params = { } @cgi.params.each{|k, v| v = v.uniq case v.size when 0 @params[k] = nil when 1 @params[k] = v[0] else @params[k] = v end } @params end def []( key ) params[key.to_s] end def []=( key, val ) params[key.to_s] = val end def request_method @env['REQUEST_METHOD'] end def header( header ) @cgi.header( header ) end def get? request_method == 'GET' end def head? request_method == 'HEAD' end def post? request_method == 'POST' end def put? request_method == 'PUT' end def delete? request_method == 'DELETE' end def xhr? @env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest" end def accept_encoding raise NameError, 'not implemented : accept_encoding' end def body raise NameError, 'not implemented : body' end def content_charset @env['CONTENT_CHARSET'] end def content_length @env['CONTENT_LENGTH'] end def content_type @env['CONTENT_TYPE'] end def remote_addr @env['REMOTE_ADDR'] end def cookies return @cookies if @cookies @cookies = { } @cgi.cookies.each{|k, v| case v.size when 0 @cookies[k] = nil when 1 @cookies[k] = v[0] else @cookies[k] = v end } @cookies end def form_data? raise NameError, 'not implemented : form_data?' end def fullpath raise NameError, 'not implemented : fullpath' end def host # Remove port number.from Rack::Response ( @env["HTTP_HOST"] || @env["SERVER_NAME"] ).gsub( /:\d+\z/, '' ) end def ip raise NameError, 'not implemented : ip' end def media_type raise NameError, 'not implemented : madia_type' end def media_type_params raise NameError, 'not implemented : media_type_params' end def openid_request raise NameError, 'not implemented : openid_request' end def openid_response raise NameError, 'not implemented : openid_response' end def parseable_data? raise NameError, 'not implemented : parseable_data?' end def path raise NameError, 'not implemented : path' end def path_info @env['PATH_INFO'].to_s end def path_info=( s ) raise NameError, 'not implemented : path_info=' end def port raise NameError, 'not implemented : port' end def query_string raise NameError, 'not implemented : query_string' end def referer raise NameError, 'not implemented : referer' end alias referrer referer def schema raise NameError, 'not implemented : schema' end def script_name @env['SCRIPT_NAME'] end def session_options raise NameError, 'not implemented : session_options' end def url raise NameError, 'not implemented : url' end def user_agent @cgi.user_agent end def base_url @cgi.base_url end def values_at( *keys ) raise NameError, 'not implemented : values_at' end end end end # Local Variables: # mode: ruby # indent-tabs-mode: t # tab-width: 3 # ruby-indent-level: 3 # End: