diff options
author | Joshua Peek <josh@joshpeek.com> | 2009-04-14 16:18:24 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2009-04-14 16:18:24 -0500 |
commit | 4a3afe0b4f4193d8f35827c5550727f98c6b63e9 (patch) | |
tree | 57bdb11156379d711af7150c227c9b453d87ac69 | |
parent | 11d4bfb18cb679b41e7d0b1b34b6e1a453de3591 (diff) | |
download | rails-4a3afe0b4f4193d8f35827c5550727f98c6b63e9.tar.gz rails-4a3afe0b4f4193d8f35827c5550727f98c6b63e9.tar.bz2 rails-4a3afe0b4f4193d8f35827c5550727f98c6b63e9.zip |
Final blow to CGI
-rw-r--r-- | actionpack/lib/action_controller/cgi/ext.rb | 15 | ||||
-rw-r--r-- | actionpack/lib/action_controller/cgi/ext/cookie.rb | 112 | ||||
-rw-r--r-- | actionpack/lib/action_controller/cgi/ext/query_extension.rb | 22 | ||||
-rw-r--r-- | actionpack/lib/action_controller/cgi/ext/stdinput.rb | 24 | ||||
-rw-r--r-- | actionpack/lib/action_controller/cgi/process.rb | 75 | ||||
-rw-r--r-- | actionpack/lib/action_controller/dispatch/dispatcher.rb | 22 |
6 files changed, 2 insertions, 268 deletions
diff --git a/actionpack/lib/action_controller/cgi/ext.rb b/actionpack/lib/action_controller/cgi/ext.rb deleted file mode 100644 index 558748f4bd..0000000000 --- a/actionpack/lib/action_controller/cgi/ext.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'action_controller/cgi/ext/stdinput' -require 'action_controller/cgi/ext/query_extension' -require 'action_controller/cgi/ext/cookie' - -class CGI #:nodoc: - include ActionController::CgiExt::Stdinput - - class << self - alias :escapeHTML_fail_on_nil :escapeHTML - - def escapeHTML(string) - escapeHTML_fail_on_nil(string) unless string.nil? - end - end -end diff --git a/actionpack/lib/action_controller/cgi/ext/cookie.rb b/actionpack/lib/action_controller/cgi/ext/cookie.rb deleted file mode 100644 index 9cd19bb12d..0000000000 --- a/actionpack/lib/action_controller/cgi/ext/cookie.rb +++ /dev/null @@ -1,112 +0,0 @@ -require 'delegate' - -CGI.module_eval { remove_const "Cookie" } - -# TODO: document how this differs from stdlib CGI::Cookie -class CGI #:nodoc: - class Cookie < DelegateClass(Array) - attr_accessor :name, :value, :path, :domain, :expires - attr_reader :secure, :http_only - - # Creates a new CGI::Cookie object. - # - # The contents of the cookie can be specified as a +name+ and one - # or more +value+ arguments. Alternatively, the contents can - # be specified as a single hash argument. The possible keywords of - # this hash are as follows: - # - # * <tt>:name</tt> - The name of the cookie. Required. - # * <tt>:value</tt> - The cookie's value or list of values. - # * <tt>:path</tt> - The path for which this cookie applies. Defaults to the - # base directory of the CGI script. - # * <tt>:domain</tt> - The domain for which this cookie applies. - # * <tt>:expires</tt> - The time at which this cookie expires, as a Time object. - # * <tt>:secure</tt> - Whether this cookie is a secure cookie or not (defaults to - # +false+). Secure cookies are only transmitted to HTTPS servers. - # * <tt>:http_only</tt> - Whether this cookie can be accessed by client side scripts (e.g. document.cookie) or only over HTTP. - # More details in http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx. Defaults to +false+. - # - # These keywords correspond to attributes of the cookie object. - def initialize(name = '', *value) - if name.kind_of?(String) - @name = name - @value = Array(value) - @domain = nil - @expires = nil - @secure = false - @http_only = false - @path = nil - else - @name = name['name'] - @value = (name['value'].kind_of?(String) ? [name['value']] : Array(name['value'])).delete_if(&:blank?) - @domain = name['domain'] - @expires = name['expires'] - @secure = name['secure'] || false - @http_only = name['http_only'] || false - @path = name['path'] - end - - raise ArgumentError, "`name' required" unless @name - - # simple support for IE - unless @path - %r|^(.*/)|.match(ENV['SCRIPT_NAME']) - @path = ($1 or '') - end - - super(@value) - end - - # Sets whether the Cookie is a secure cookie or not. - def secure=(val) - @secure = val == true - end - - # Sets whether the Cookie is an HTTP only cookie or not. - def http_only=(val) - @http_only = val == true - end - - # Converts the Cookie to its string representation. - def to_s - buf = '' - buf << @name << '=' - buf << (@value.kind_of?(String) ? CGI::escape(@value) : @value.collect{|v| CGI::escape(v) }.join("&")) - buf << '; domain=' << @domain if @domain - buf << '; path=' << @path if @path - buf << '; expires=' << CGI::rfc1123_date(@expires) if @expires - buf << '; secure' if @secure - buf << '; HttpOnly' if @http_only - buf - end - - # FIXME: work around broken 1.8.7 DelegateClass#respond_to? - def respond_to?(method, include_private = false) - return true if super(method) - return __getobj__.respond_to?(method, include_private) - end - - # Parses a raw cookie string into a hash of <tt>cookie-name => cookie-object</tt> - # pairs. - # - # cookies = CGI::Cookie::parse("raw_cookie_string") - # # => { "name1" => cookie1, "name2" => cookie2, ... } - # - def self.parse(raw_cookie) - cookies = Hash.new([]) - - if raw_cookie - raw_cookie.split(/;\s?/).each do |pairs| - name, value = pairs.split('=',2) - next unless name and value - name = CGI::unescape(name) - unless cookies.has_key?(name) - cookies[name] = new(name, CGI::unescape(value)) - end - end - end - - cookies - end - end # class Cookie -end diff --git a/actionpack/lib/action_controller/cgi/ext/query_extension.rb b/actionpack/lib/action_controller/cgi/ext/query_extension.rb deleted file mode 100644 index 9620fd2873..0000000000 --- a/actionpack/lib/action_controller/cgi/ext/query_extension.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'cgi' - -class CGI #:nodoc: - module QueryExtension - # Remove the old initialize_query method before redefining it. - remove_method :initialize_query - - # Neuter CGI parameter parsing. - def initialize_query - # Fix some strange request environments. - env_table['REQUEST_METHOD'] ||= 'GET' - - # POST assumes missing Content-Type is application/x-www-form-urlencoded. - if env_table['CONTENT_TYPE'].blank? && env_table['REQUEST_METHOD'] == 'POST' - env_table['CONTENT_TYPE'] = 'application/x-www-form-urlencoded' - end - - @cookies = CGI::Cookie::parse(env_table['HTTP_COOKIE'] || env_table['COOKIE']) - @params = {} - end - end -end diff --git a/actionpack/lib/action_controller/cgi/ext/stdinput.rb b/actionpack/lib/action_controller/cgi/ext/stdinput.rb deleted file mode 100644 index 5e9b6784af..0000000000 --- a/actionpack/lib/action_controller/cgi/ext/stdinput.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'cgi' - -module ActionController - module CgiExt - # Publicize the CGI's internal input stream so we can lazy-read - # request.body. Make it writable so we don't have to play $stdin games. - module Stdinput - def self.included(base) - base.class_eval do - remove_method :stdinput - attr_accessor :stdinput - end - - base.alias_method_chain :initialize, :stdinput - end - - def initialize_with_stdinput(type = nil, stdinput = $stdin) - @stdinput = stdinput - @stdinput.set_encoding(Encoding::BINARY) if @stdinput.respond_to?(:set_encoding) - initialize_without_stdinput(type || 'query') - end - end - end -end diff --git a/actionpack/lib/action_controller/cgi/process.rb b/actionpack/lib/action_controller/cgi/process.rb deleted file mode 100644 index 34b97776f5..0000000000 --- a/actionpack/lib/action_controller/cgi/process.rb +++ /dev/null @@ -1,75 +0,0 @@ -module ActionController #:nodoc: - class CGIHandler - module ProperStream - def each - while line = gets - yield line - end - end - - def read(*args) - if args.empty? - super || "" - else - super - end - end - end - - def self.dispatch_cgi(app, cgi, out = $stdout) - env = cgi.__send__(:env_table) - env.delete "HTTP_CONTENT_LENGTH" - - cgi.stdinput.extend ProperStream - - env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/" - - env.update({ - "rack.version" => [0,1], - "rack.input" => cgi.stdinput, - "rack.errors" => $stderr, - "rack.multithread" => false, - "rack.multiprocess" => true, - "rack.run_once" => false, - "rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http" - }) - - env["QUERY_STRING"] ||= "" - env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"] - env["REQUEST_PATH"] ||= "/" - env.delete "PATH_INFO" if env["PATH_INFO"] == "" - - status, headers, body = app.call(env) - begin - out.binmode if out.respond_to?(:binmode) - out.sync = false if out.respond_to?(:sync=) - - headers['Status'] = status.to_s - - if headers.include?('Set-Cookie') - headers['cookie'] = headers.delete('Set-Cookie').split("\n") - end - - out.write(cgi.header(headers)) - - body.each { |part| - out.write part - out.flush if out.respond_to?(:flush) - } - ensure - body.close if body.respond_to?(:close) - end - end - end - - class CgiRequest #:nodoc: - DEFAULT_SESSION_OPTIONS = { - :database_manager => nil, - :prefix => "ruby_sess.", - :session_path => "/", - :session_key => "_session_id", - :cookie_only => true, - :session_http_only => true - } - end -end diff --git a/actionpack/lib/action_controller/dispatch/dispatcher.rb b/actionpack/lib/action_controller/dispatch/dispatcher.rb index 74c72e1a8b..1a923724a1 100644 --- a/actionpack/lib/action_controller/dispatch/dispatcher.rb +++ b/actionpack/lib/action_controller/dispatch/dispatcher.rb @@ -23,11 +23,6 @@ module ActionController end end - # DEPRECATE: Remove CGI support - def dispatch(cgi = nil, session_options = CgiRequest::DEFAULT_SESSION_OPTIONS, output = $stdout) - new(output).dispatch_cgi(cgi, session_options) - end - # Add a preparation callback. Preparation callbacks are run before every # request in development mode, and before the first request in production # mode. @@ -43,13 +38,7 @@ module ActionController end def run_prepare_callbacks - if defined?(Rails) && Rails.logger - logger = Rails.logger - else - logger = Logger.new($stderr) - end - - new(logger).send :run_callbacks, :prepare_dispatch + new.send :run_callbacks, :prepare_dispatch end def reload_application @@ -76,9 +65,7 @@ module ActionController include ActiveSupport::Callbacks define_callbacks :prepare_dispatch, :before_dispatch, :after_dispatch - # DEPRECATE: Remove arguments, since they are only used by CGI - def initialize(output = $stdout, request = nil, response = nil) - @output = output + def initialize @app = @@middleware.build(lambda { |env| self.dup._call(env) }) end @@ -97,11 +84,6 @@ module ActionController end end - # DEPRECATE: Remove CGI support - def dispatch_cgi(cgi, session_options) - CGIHandler.dispatch_cgi(self, cgi, @output) - end - def call(env) @app.call(env) end |