Class: ActionDispatch::Response

Inherits:
Rack::Response
  • Object
show all
Includes:
Http::Cache::Response, Setup
Defined in:
lib/action_dispatch/http/response.rb

Overview

Represents an HTTP response generated by a controller action. Use it to retrieve the current state of the response, or customize the response. It can either represent a real HTTP response (i.e. one that is meant to be sent back to the web browser) or a TestResponse (i.e. one that is generated from integration tests).

Response is mostly a Ruby on Rails framework implementation detail, and should never be used directly in controllers. Controllers should use the methods defined in ActionController::Base instead. For example, if you want to set the HTTP response’s content MIME type, then use ActionControllerBase#headers instead of Response#headers.

Nevertheless, integration tests may want to inspect controller responses in more detail, and that’s when Response can be useful for application developers. Integration test methods such as ActionDispatch::Integration::Session#get and ActionDispatch::Integration::Session#post return objects of type TestResponse (which are of course also of type Response).

For example, the following demo integration test prints the body of the controller response to the console:

class DemoControllerTest < ActionDispatch::IntegrationTest
  def test_print_root_path_to_console
    get('/')
    puts @response.body
  end
end

Direct Known Subclasses

TestResponse

Defined Under Namespace

Modules: Setup

Constant Summary collapse

EMPTY =
" "
CONTENT_TYPE =
"Content-Type"

Instance Attribute Summary collapse

Attributes included from Http::Cache::Response

#cache_control

Instance Method Summary collapse

Methods included from Http::Cache::Response

#etag, #etag=, #etag?, #initialize, #last_modified, #last_modified=, #last_modified?

Methods included from Setup

#initialize

Instance Attribute Details

#blankObject

Returns the value of attribute blank.



36
37
38
# File 'lib/action_dispatch/http/response.rb', line 36

def blank
  @blank
end

#charsetObject

Sets the HTTP response’s content MIME type. For example, in the controller you could write this:

response.content_type = "text/plain"

If a character set has been defined for this response (see charset=) then the character set information will also be included in the content type information.



133
134
135
# File 'lib/action_dispatch/http/response.rb', line 133

def charset
  @charset
end

#content_typeObject

Sets the HTTP response’s content MIME type. For example, in the controller you could write this:

response.content_type = "text/plain"

If a character set has been defined for this response (see charset=) then the character set information will also be included in the content type information.



133
134
135
# File 'lib/action_dispatch/http/response.rb', line 133

def content_type
  @content_type
end

#header=(value) ⇒ Object (writeonly) Also known as: headers=

Sets the attribute header

Parameters:

  • value

    the value to set the attribute header to.



38
39
40
# File 'lib/action_dispatch/http/response.rb', line 38

def header=(value)
  @header = value
end

#requestObject

Returns the value of attribute request.



36
37
38
# File 'lib/action_dispatch/http/response.rb', line 36

def request
  @request
end

#sending_file=(value) ⇒ Object (writeonly)

Sets the attribute sending_file

Parameters:

  • value

    the value to set the attribute sending_file to.



38
39
40
# File 'lib/action_dispatch/http/response.rb', line 38

def sending_file=(value)
  @sending_file = value
end

Instance Method Details

#bodyObject



99
100
101
102
103
# File 'lib/action_dispatch/http/response.rb', line 99

def body
  str = ''
  each { |part| str << part.to_s }
  str
end

#body=(body) ⇒ Object



107
108
109
110
# File 'lib/action_dispatch/http/response.rb', line 107

def body=(body)
  @blank = true if body == EMPTY
  @body = body.respond_to?(:to_str) ? [body] : body
end

#body_partsObject



112
113
114
# File 'lib/action_dispatch/http/response.rb', line 112

def body_parts
  @body
end

#codeObject

Returns a String to ensure compatibility with Net::HTTPResponse



78
79
80
# File 'lib/action_dispatch/http/response.rb', line 78

def code
  @status.to_s
end

#cookiesObject

Returns the response cookies, converted to a Hash of (name => value) pairs

assert_equal 'AuthorOfNewPage', r.cookies['author']


170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/action_dispatch/http/response.rb', line 170

def cookies
  cookies = {}
  if header = self["Set-Cookie"]
    header = header.split("\n") if header.respond_to?(:to_str)
    header.each do |cookie|
      if pair = cookie.split(';').first
        key, value = pair.split("=").map { |v| Rack::Utils.unescape(v) }
        cookies[key] = value
      end
    end
  end
  cookies
end

#each(&callback) ⇒ Object



149
150
151
152
153
154
155
156
157
158
159
# File 'lib/action_dispatch/http/response.rb', line 149

def each(&callback)
  if @body.respond_to?(:call)
    @writer = lambda { |x| callback.call(x) }
    @body.call(self, self)
  else
    @body.each { |part| callback.call(part.to_s) }
  end

  @writer = callback
  @block.call(self) if @block
end

#locationObject Also known as: redirect_url



116
117
118
# File 'lib/action_dispatch/http/response.rb', line 116

def location
  headers['Location']
end

#location=(url) ⇒ Object



121
122
123
# File 'lib/action_dispatch/http/response.rb', line 121

def location=(url)
  headers['Location'] = url
end

#messageObject Also known as: status_message



82
83
84
# File 'lib/action_dispatch/http/response.rb', line 82

def message
  Rack::Utils::HTTP_STATUS_CODES[@status]
end

#respond_to?(method) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
90
91
92
93
# File 'lib/action_dispatch/http/response.rb', line 87

def respond_to?(method)
  if method.to_sym == :to_path
    @body.respond_to?(:to_path)
  else
    super
  end
end

#response_codeObject

The response code of the request



73
74
75
# File 'lib/action_dispatch/http/response.rb', line 73

def response_code
  @status
end

#status=(status) ⇒ Object



68
69
70
# File 'lib/action_dispatch/http/response.rb', line 68

def status=(status)
  @status = Rack::Utils.status_code(status)
end

#to_aObject Also known as: prepare!



139
140
141
142
143
144
145
# File 'lib/action_dispatch/http/response.rb', line 139

def to_a
  assign_default_content_type_and_charset!
  handle_conditional_get!
  self["Set-Cookie"] = self["Set-Cookie"].join("\n") if self["Set-Cookie"].respond_to?(:join)
  self["ETag"]       = @_etag if @_etag
  super
end

#to_pathObject



95
96
97
# File 'lib/action_dispatch/http/response.rb', line 95

def to_path
  @body.to_path
end

#write(str) ⇒ Object



161
162
163
164
165
# File 'lib/action_dispatch/http/response.rb', line 161

def write(str)
  str = str.to_s
  @writer.call str
  str
end