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. One can use an ActionDispatch::Response object to retrieve the current state of the response, or customize the response. An Response object can either represent a “real” HTTP response (i.e. one that is meant to be sent back to the web browser) or a test response (i.e. one that is generated from integration tests). See CgiResponse and TestResponse, respectively.

Response is mostly a Ruby on Rails framework implement 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.



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

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.



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

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.



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

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.



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

def header=(value)
  @header = value
end

#requestObject

Returns the value of attribute request.



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

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.



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

def sending_file=(value)
  @sending_file = value
end

Instance Method Details

#bodyObject



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

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

#body=(body) ⇒ Object



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

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

#body_partsObject



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

def body_parts
  @body
end

#codeObject

Returns a String to ensure compatibility with Net::HTTPResponse



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

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']


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

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



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

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



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

def location
  headers['Location']
end

#location=(url) ⇒ Object



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

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

#messageObject Also known as: status_message



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

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

#respond_to?(method) ⇒ Boolean

Returns:

  • (Boolean)


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

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



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

def response_code
  @status
end

#status=(status) ⇒ Object



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

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

#to_aObject Also known as: prepare!



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

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



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

def to_path
  @body.to_path
end

#write(str) ⇒ Object



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

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