Spec-Zone.ru › Ruby on Rails 4.1

класс ActionController::MimeResponds::Collector

Родитель:
Object
Включенные модули:
AbstractController::Collector

Контейнер для ответов, доступных из текущего контроллера для запросов с различными типами MIME, отправленных в конкретный action.

Публичные методы контроллера respond_with и respond_to могут вызываться с блоком, который используется для определения ответов на разные типы MIME, например, для respond_to:

respond_to do |format|
  format.html
  format.xml { render xml: @people }
end

В этом случае аргумент, переданный в блок (format выше), представляет собой экземпляр класса ActionController::MimeResponds::Collector. Этот объект служит контейнером, в котором доступные ответы могут быть сохранены, вызвав любой из динамически сгенерированных методов, специфичных для типа MIME, таких как html, xml и т.д. на Collector. Каждый ответ представлен соответствующим блоком, если он есть.

Последующий вызов negotiate_format(request) позволит Collector определить, какой конкретный тип MIME следует использовать для ответа на текущий запрос, при этом этот ответ будет доступен путем вызова response.

Атрибуты

format[RW]

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

new(mimes, variant = nil) Показать исходный код
# File actionpack/lib/action_controller/metal/mime_responds.rb, line 470
def initialize(mimes, variant = nil)
  @responses = {}
  @variant = variant

  mimes.each { |mime| @responses["Mime::#{mime.upcase}".constantize] = nil }
end

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

all(*args, &block)
Псевдоним для: any
any(*args, &block) Показать исходный код
# File actionpack/lib/action_controller/metal/mime_responds.rb, line 477
def any(*args, &block)
  if args.any?
    args.each { |type| send(type, &block) }
  else
    custom(Mime::ALL, &block)
  end
end
Также алиас для: all
custom(mime_type, &block) Показать исходный код
# File actionpack/lib/action_controller/metal/mime_responds.rb, line 486
def custom(mime_type, &block)
  mime_type = Mime::Type.lookup(mime_type.to_s) unless mime_type.is_a?(Mime::Type)
  @responses[mime_type] ||= if block_given?
    block
  else
    VariantCollector.new(@variant)
  end
end
negotiate_format(request) Показать исходный код
# File actionpack/lib/action_controller/metal/mime_responds.rb, line 508
def negotiate_format(request)
  @format = request.negotiate_mime(@responses.keys)
end
response() Показать исходный код
# File actionpack/lib/action_controller/metal/mime_responds.rb, line 495
def response
  response = @responses.fetch(format, @responses[Mime::ALL])
  if response.is_a?(VariantCollector) # `format.html.phone` - variant inline syntax
    response.variant
  elsif response.nil? || response.arity == 0 # `format.html` - just a format, call its block
    response
  else # `format.html{ |variant| variant.phone }` - variant block syntax
    variant_collector = VariantCollector.new(@variant)
    response.call(variant_collector) # call format block with variants collector
    variant_collector.variant
  end
end

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

Spec-Zone.ru

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