A container for responses available from the current controller for requests for different mime-types sent to a particular action.
The public controller methods respond_with
and
respond_to
may be called with a block that is used to define
responses to different mime-types, e.g. for respond_to
:
respond_to do |format| format.html format.xml { render xml: @people } end
In this usage, the argument passed to the block (format
above)
is an instance of the ActionController::MimeResponds::Collector class.
This object serves as a container in which available responses can be
stored by calling any of the dynamically generated, mime-type-specific
methods such as html
, xml
etc on the Collector. Each response is represented by a
corresponding block if present.
A subsequent call to negotiate_format(request) will enable the Collector to determine which specific mime-type it should respond with for the current request, with this response then being accessible by calling response.
# File lib/action_controller/metal/mime_responds.rb, line 402 def initialize(mimes) @order, @responses = [], {} mimes.each { |mime| send(mime) } end
# File lib/action_controller/metal/mime_responds.rb, line 407 def any(*args, &block) if args.any? args.each { |type| send(type, &block) } else custom(Mime::ALL, &block) end end
# File lib/action_controller/metal/mime_responds.rb, line 416 def custom(mime_type, &block) mime_type = Mime::Type.lookup(mime_type.to_s) unless mime_type.is_a?(Mime::Type) @order << mime_type @responses[mime_type] ||= block end
# File lib/action_controller/metal/mime_responds.rb, line 426 def negotiate_format(request) @format = request.negotiate_mime(order) end
# File lib/action_controller/metal/mime_responds.rb, line 422 def response @responses.fetch(format, @responses[Mime::ALL]) end