Class: ActionController::MimeResponds::Responder
- Inherits:
-
Object
- Object
- ActionController::MimeResponds::Responder
show all
- Defined in:
- lib/action_controller/mime_responds.rb
Overview
Instance Method Summary
collapse
Constructor Details
#initialize(controller) ⇒ Responder
Returns a new instance of Responder.
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/action_controller/mime_responds.rb', line 112
def initialize(controller)
@controller = controller
@request = controller.request
@response = controller.response
@mime_type_priority = Array(Mime::Type.lookup_by_extension(@request.parameters[:format]) || @request.accepts)
@order = []
@responses = {}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(symbol, &block) ⇒ Object
142
143
144
145
146
147
148
149
150
|
# File 'lib/action_controller/mime_responds.rb', line 142
def method_missing(symbol, &block)
mime_constant = symbol.to_s.upcase
if Mime::SET.include?(Mime.const_get(mime_constant))
custom(Mime.const_get(mime_constant), &block)
else
super
end
end
|
Instance Method Details
#any(*args, &block) ⇒ Object
134
135
136
137
138
139
140
|
# File 'lib/action_controller/mime_responds.rb', line 134
def any(*args, &block)
if args.any?
args.each { |type| send(type, &block) }
else
custom(@mime_type_priority.first, &block)
end
end
|
#custom(mime_type, &block) ⇒ Object
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/action_controller/mime_responds.rb', line 123
def custom(mime_type, &block)
mime_type = mime_type.is_a?(Mime::Type) ? mime_type : Mime::Type.lookup(mime_type.to_s)
@order << mime_type
@responses[mime_type] ||= Proc.new do
@response.template.template_format = mime_type.to_sym
@response.content_type = mime_type.to_s
block_given? ? block.call : @controller.send(:render, :action => @controller.action_name)
end
end
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
# File 'lib/action_controller/mime_responds.rb', line 152
def respond
for priority in @mime_type_priority
if priority == Mime::ALL
@responses[@order.first].call
return
else
if @responses[priority]
@responses[priority].call
return end
end
end
if @order.include?(Mime::ALL)
@responses[Mime::ALL].call
else
@controller.send :head, :not_acceptable
end
end
|