Class: ActionController::CgiRequest

Inherits:
AbstractRequest show all
Defined in:
lib/action_controller/cgi_process.rb

Overview

:nodoc:

Constant Summary collapse

DEFAULT_SESSION_OPTIONS =
{
  :database_manager => CGI::Session::PStore,
  :prefix => "ruby_sess.",
  :session_path => "/"
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from AbstractRequest

#delete?, #domain, #formatted_post?, #get?, #head?, #host_with_port, #method, #parameters, #path, #path_parameters, #path_parameters=, #port, #port_string, #post?, #post_format, #protocol, #put?, #raw_post, #relative_url_root, #remote_ip, #request_uri, #server_software, #ssl?, #subdomains, #symbolized_path_parameters, #xml_http_request?, #xml_post?, #yaml_post?

Constructor Details

#initialize(cgi, session_options = {}) ⇒ CgiRequest

Returns a new instance of CgiRequest.



48
49
50
51
52
# File 'lib/action_controller/cgi_process.rb', line 48

def initialize(cgi, session_options = {})
  @cgi = cgi
  @session_options = session_options
  super()
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_id, *arguments) ⇒ Object



129
130
131
# File 'lib/action_controller/cgi_process.rb', line 129

def method_missing(method_id, *arguments)
  @cgi.send(method_id, *arguments) rescue super
end

Instance Attribute Details

#cgiObject

Returns the value of attribute cgi.



40
41
42
# File 'lib/action_controller/cgi_process.rb', line 40

def cgi
  @cgi
end

Instance Method Details

#cookiesObject



82
83
84
# File 'lib/action_controller/cgi_process.rb', line 82

def cookies
  @cgi.cookies.freeze
end

#envObject



78
79
80
# File 'lib/action_controller/cgi_process.rb', line 78

def env
  @cgi.send(:env_table)
end

#hostObject



86
87
88
# File 'lib/action_controller/cgi_process.rb', line 86

def host
  env["HTTP_X_FORWARDED_HOST"] || @cgi.host.to_s.split(":").first
end

#query_parametersObject



65
66
67
68
# File 'lib/action_controller/cgi_process.rb', line 65

def query_parameters
  qs = self.query_string
  qs.empty? ? {} : CGIMethods.parse_query_parameters(query_string)
end

#query_stringObject



54
55
56
57
58
59
60
61
62
63
# File 'lib/action_controller/cgi_process.rb', line 54

def query_string
  return @cgi.query_string unless @cgi.query_string.nil? || @cgi.query_string.empty?
  unless env['REQUEST_URI'].nil?
    parts = env['REQUEST_URI'].split('?')
  else
    return env['QUERY_STRING'] || ''
  end      
  parts.shift
  return parts.join('?')
end

#request_parametersObject



70
71
72
73
74
75
76
# File 'lib/action_controller/cgi_process.rb', line 70

def request_parameters
  if formatted_post?
    CGIMethods.parse_formatted_request_parameters(post_format, env['RAW_POST_DATA'])
  else
    CGIMethods.parse_request_parameters(@cgi.params)
  end
end

#reset_sessionObject



124
125
126
127
# File 'lib/action_controller/cgi_process.rb', line 124

def reset_session
  @session.delete
  @session = (@session_options == false ? {} : new_session)
end

#sessionObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/action_controller/cgi_process.rb', line 90

def session
  return @session unless @session.nil?

  begin
    @session = (@session_options == false ? {} : CGI::Session.new(@cgi, session_options_with_string_keys))
    @session["__valid_session"]
    return @session
  rescue ArgumentError => e
    # TODO: Uncomment this on 0.13.1
    # if e.message =~ %r{undefined class/module (\w+)}
    #   begin
    #     Module.const_missing($1)
    #   rescue LoadError, NameError => e
    #     raise(
    #       ActionController::SessionRestoreError, 
    #       "Session contained objects where the class definition wasn't available. " +
    #       "Remember to require classes for all objects kept in the session. " +
    #       "(Original exception: #{e.message} [#{e.class}])"
    #     )
    #   end
    # 
    #   retry
    # else
    #   raise
    # end
    raise(
      ActionController::SessionRestoreError, 
      "Session contained objects where the class definition wasn't available. " +
      "Remember to require classes for all objects kept in the session. " +
      "(Original exception: #{e.message} [#{e.class}])"
    )
  end
end