Spec-Zone.ru › Ruby on Rails 4.1

класс ActionDispatch::Response

Родитель:
Объект
Включенные модули:
ActionDispatch::Http::FilterRedirect, ActionDispatch::Http::Cache::Response

Представляет HTTP-ответ, сгенерированный действием контроллера. Используйте его для получения текущего состояния ответа или для его настройки. Он может представлять собой реальный HTTP-ответ (т.е. тот, который должен быть отправлен веб-браузеру) или TestResponse (т.е. тот, который генерируется из интеграционных тестов).

Класс Response в основном является внутренней реализацией фреймворка Ruby on Rails и никогда не должен использоваться напрямую в контроллерах. Контроллеры должны использовать методы, определённые в ActionController::Base вместо этого. Например, если вы хотите установить тип MIME содержимого HTTP-ответа, используйте ActionControllerBase#headers вместо Response#headers.

Тем не менее, интеграционные тесты могут захотеть более детально проверить ответы контроллеров, и тогда Response может быть полезен разработчикам приложений. Методы интеграционных тестов, такие как ActionDispatch::Integration::RequestHelpers#get и ActionDispatch::Integration::RequestHelpers#post, возвращают объекты типа TestResponse (которые, конечно же, также являются объектами типа Response).

Например, следующий демо-интеграционный тест выводит тело ответа контроллера в консоль:

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

Константы

CONTENT_TYPE
EMPTY
LOCATION
NO_CONTENT_CODES
SET_COOKIE

Атрибуты

charset[RW]

Кодировка символов ответа. HTML хочет знать кодировку передаваемого содержимого, поэтому нам нужно это передать.

content_type[R]

Устанавливает тип MIME содержимого HTTP-ответа. Например, в контроллере можно написать так:

response.content_type = "text/plain"

Если для данного ответа определена кодировка символов (см. charset), то информация о кодировке символов также будет включена в информацию о типе содержимого.

header[RW]

Получение и установка заголовков для данного ответа.

headers=[RW]

Получение и установка заголовков для данного ответа.

request[RW]

Запрос, на который отвечает ответ.

sending_file[W]
status[R]

Код HTTP-статуса.

stream[R]

Базовое тело в виде потокового объекта.

Публичные методы класса

new(status = 200, header = {}, body = [], options = {}) { |self| ... } Показать исходный код
Вызывает метод суперкласса
# File actionpack/lib/action_dispatch/http/response.rb, line 113
def initialize(status = 200, header = {}, body = [], options = {})
  super()

  default_headers = options.fetch(:default_headers, self.class.default_headers)
  header = merge_default_headers(header, default_headers)

  self.body, self.header, self.status = body, header, status

  @sending_file = false
  @blank        = false
  @cv           = new_cond
  @committed    = false
  @sending      = false
  @sent         = false
  @content_type = nil
  @charset      = nil

  if content_type = self[CONTENT_TYPE]
    type, charset = content_type.split(/;\s*charset=/)
    @content_type = Mime::Type.lookup(type)
    @charset = charset || self.class.default_charset
  end

  prepare_cache_control!

  yield self if block_given?
end

Общедоступные методы экземпляра

_status_code() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 300
def _status_code
  @status
end
await_commit() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 141
def await_commit
  synchronize do
    @cv.wait_until { @committed }
  end
end
await_sent() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 147
def await_sent
  synchronize { @cv.wait_until { @sent } }
end
body() Показать исходный код

Возвращает содержимое ответа в виде строки. Включает содержимое любых вызовов render.

# File actionpack/lib/action_dispatch/http/response.rb, line 225
def body
  strings = []
  each { |part| strings << part.to_s }
  strings.join
end
body=(body) Показать исходный код

Позволяет вручную задать или перезаписать тело ответа.

# File actionpack/lib/action_dispatch/http/response.rb, line 234
def body=(body)
  @blank = true if body == EMPTY

  if body.respond_to?(:to_path)
    @stream = body
  else
    synchronize do
      @stream = build_buffer self, munge_body_object(body)
    end
  end
end
body_parts() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 246
def body_parts
  parts = []
  @stream.each { |x| parts << x }
  parts
end
close() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 271
def close
  stream.close if stream.respond_to?(:close)
end
code() Показать исходный код

Возвращает строку для обеспечения совместимости с Net::HTTPResponse.

# File actionpack/lib/action_dispatch/http/response.rb, line 194
def code
  @status.to_s
end
commit!() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 151
def commit!
  synchronize do
    before_committed
    @committed = true
    @cv.broadcast
  end
end
committed?() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 175
def committed?; synchronize { @committed }; end
content_type=(content_type) Показать исходный код

Устанавливает тип содержимого HTTP.

# File actionpack/lib/action_dispatch/http/response.rb, line 184
def content_type=(content_type)
  @content_type = content_type.to_s
end
cookies() Показать исходный код

Возвращает куки ответа, преобразованные в Hash пар (имя => значение)

assert_equal 'AuthorOfNewPage', r.cookies['author']
# File actionpack/lib/action_dispatch/http/response.rb, line 286
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
delete_cookie(key, value={}) Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 256
def delete_cookie(key, value={})
  ::Rack::Utils.delete_cookie_header!(header, key, value)
end
location() Показать исходный код

Заголовок расположения, который будет отправлен в ответ.

# File actionpack/lib/action_dispatch/http/response.rb, line 261
def location
  headers[LOCATION]
end
Также алиас: redirect_url
location=(url) Показать исходный код

Устанавливает заголовок расположения, который будет отправлен в ответ.

# File actionpack/lib/action_dispatch/http/response.rb, line 267
def location=(url)
  headers[LOCATION] = url
end
message() Показать исходный код

Возвращает соответствующее сообщение для текущего кода HTTP-статуса:

response.status = 200
response.message # => "OK"

response.status = 404
response.message # => "Not Found"
# File actionpack/lib/action_dispatch/http/response.rb, line 206
def message
  Rack::Utils::HTTP_STATUS_CODES[@status]
end
Также алиас: status_message
prepare!()
Алиас для: to_a
redirect_url()
Алиас для: location
respond_to?(method, include_private = false) Показать исходный код
Вызывает метод суперкласса
# File actionpack/lib/action_dispatch/http/response.rb, line 211
def respond_to?(method, include_private = false)
  if method.to_s == 'to_path'
    stream.respond_to?(method)
  else
    super
  end
end
response_code() Показать исходный код

Код ответа запроса.

# File actionpack/lib/action_dispatch/http/response.rb, line 189
def response_code
  @status
end
sending!() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 159
def sending!
  synchronize do
    before_sending
    @sending = true
    @cv.broadcast
  end
end
sending?() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 174
def sending?;   synchronize { @sending };   end
sent!() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 167
def sent!
  synchronize do
    @sent = true
    @cv.broadcast
  end
end
sent?() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 176
def sent?;      synchronize { @sent };      end
set_cookie(key, value) Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 252
def set_cookie(key, value)
  ::Rack::Utils.set_cookie_header!(header, key, value)
end
status=(status) Показать исходный код

Устанавливает код HTTP-статуса.

# File actionpack/lib/action_dispatch/http/response.rb, line 179
def status=(status)
  @status = Rack::Utils.status_code(status)
end
status_message()
Алиас для: message
to_a() Показать исходный код

Преобразует Response в совместимый с Rack массив статуса, заголовков и тела.

# File actionpack/lib/action_dispatch/http/response.rb, line 277
def to_a
  rack_response @status, @header.to_hash
end
Также алиас: prepare!, to_ary
to_ary()
Алиас для: to_a
to_path() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 219
def to_path
  stream.to_path
end

© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API