Spec-Zone.ru › Ruby on Rails 4.2

класс ActionDispatch::Response

Родитель:
Object
Включенные модули:
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 118
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
Вызывает метод родительского класса

Методы публичного экземпляра

abort() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 268
def abort
  if stream.respond_to?(:abort)
    stream.abort
  elsif stream.respond_to?(:close)
    # `stream.close` should really be reserved for a close from the
    # other direction, but we must fall back to it for
    # compatibility.
    stream.close
  end
end
await_commit() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 146
def await_commit
  synchronize do
    @cv.wait_until { @committed }
  end
end
await_sent() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 152
def await_sent
  synchronize { @cv.wait_until { @sent } }
end
body() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 218
def body
  strings = []
  each { |part| strings << part.to_s }
  strings.join
end

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

body=(body) Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 227
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 239
def body_parts
  parts = []
  @stream.each { |x| parts << x }
  parts
end
close() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 264
def close
  stream.close if stream.respond_to?(:close)
end
code() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 199
def code
  @status.to_s
end

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

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

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

cookies() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 305
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

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

assert_equal 'AuthorOfNewPage', r.cookies['author']
delete_cookie(key, value={}) Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 249
def delete_cookie(key, value={})
  ::Rack::Utils.delete_cookie_header!(header, key, value)
end
location() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 254
def location
  headers[LOCATION]
end

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

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

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

message() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 211
def message
  Rack::Utils::HTTP_STATUS_CODES[@status]
end

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

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

response.status = 404
response.message # => "Not Found"
Также алиасирован как: status_message
prepare!()
Псевдоним для: to_a
redirect_url()
Псевдоним для: location
response_code() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 194
def response_code
  @status
end

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

sending!() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 164
def sending!
  synchronize do
    before_sending
    @sending = true
    @cv.broadcast
  end
end
sending?() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 179
def sending?;   synchronize { @sending };   end
sent!() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 172
def sent!
  synchronize do
    @sent = true
    @cv.broadcast
  end
end
sent?() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 181
def sent?;      synchronize { @sent };      end
set_cookie(key, value) Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 245
def set_cookie(key, value)
  ::Rack::Utils.set_cookie_header!(header, key, value)
end
status=(status) Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 184
def status=(status)
  @status = Rack::Utils.status_code(status)
end

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

status_message()
Псевдоним для: message
to_a() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 283
def to_a
  rack_response @status, @header.to_hash
end

Преобразует Response в совместимый с Rack массив из статуса, заголовков и тела. Позволяет явное использование splat:

status, headers, body = *response
Также алиасирован как: prepare!
to_ary() Показать исходный код
# File actionpack/lib/action_dispatch/http/response.rb, line 292
    def to_ary
      ActiveSupport::Deprecation.warn("        `ActionDispatch::Response#to_ary` no longer performs implicit conversion
        to an array. Please use `response.to_a` instead, or a splat like `status,
        headers, body = *response`.
".squish)

      to_a
    end

Четко указывает, что объект ответа не является Array. Определение этого сделало бы явное splatting, но также позволило бы добавление ответов как массивов и «выравнивание» ответов, переходящее к телу rack! Неразумное поведение.

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

Spec-Zone.ru

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