Class: Merb::Controller
- Includes:
- AuthenticationMixin, ControllerMixin, ResponderMixin
- Defined in:
- lib/merb-core/controller/merb_controller.rb
Constant Summary
Constants included from ResponderMixin
ResponderMixin::MIMES, ResponderMixin::TYPES
Instance Attribute Summary collapse
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
-
#route ⇒ Object
Returns the value of attribute route.
Class Method Summary collapse
-
._filter_params(params) ⇒ Object
This is a stub method so plugins can implement param filtering if they want.
-
.callable_actions ⇒ Object
The list of actions that are callable, after taking defaults, _hidden_actions and _shown_actions into consideration.
-
.hide_action(*names) ⇒ Object
Hide each of the given methods from being callable as actions.
-
.inherited(klass) ⇒ Object
Parameters klass<Merb::Controller>:: The Merb::Controller inheriting from the base class.
-
.show_action(*names) ⇒ Object
Makes each of the given methods being callable as actions.
- .subclasses_list ⇒ Object
Instance Method Summary collapse
-
#_absolute_template_location(template, type) ⇒ Object
The location to look for a template and mime-type.
-
#_dispatch(action = :index) ⇒ Object
Dispatch the action.
-
#_template_location(context, type = nil, controller = controller_name) ⇒ Object
The location to look for a template for a particular controller, context, and mime-type.
-
#cookies ⇒ Object
Returns Merb::Cookies:: A new Merb::Cookies instance representing the cookies that came in from the request object.
-
#initialize(request, status = 200, headers = {'Content-Type' => 'text/html; charset=utf-8'}) ⇒ Controller
constructor
Build a new controller.
-
#params ⇒ Object
Returns Hash:: The parameters from the request object.
-
#session ⇒ Object
Returns Hash:: The session that was extracted from the request object.
- #status ⇒ Object
-
#status=(s) ⇒ Object
Set the response status code.
Methods included from AuthenticationMixin
Methods included from ControllerMixin
#delete_cookie, #escape_xml, #message, #nginx_send_file, #redirect, #render_chunked, #render_deferred, #render_then_call, #run_later, #send_chunk, #send_data, #send_file, #set_cookie, #stream_file
Methods included from ResponderMixin
#_perform_content_negotiation, #_provided_formats, #content_type, #content_type=, #does_not_provide, included, #only_provides, #provides
Constructor Details
#initialize(request, status = 200, headers = {'Content-Type' => 'text/html; charset=utf-8'}) ⇒ Controller
Build a new controller.
Sets the variables that came in through the dispatch as available to the controller.
This method uses the :session_id_cookie_only and :query_string_whitelist configuration options. See CONFIG for more details.
Parameters
- request<Merb::Request>
-
The Merb::Request that came in from Mongrel.
- status<Integer>
-
An integer code for the status. Defaults to 200.
- headers<Hash=> value>
-
A hash of headers to start the controller with. These headers can be overridden later by the #headers method.
177 178 179 180 |
# File 'lib/merb-core/controller/merb_controller.rb', line 177 def initialize(request, status=200, headers={'Content-Type' => 'text/html; charset=utf-8'}) super() @request, @_status, @headers = request, status, headers end |
Instance Attribute Details
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
204 205 206 |
# File 'lib/merb-core/controller/merb_controller.rb', line 204 def headers @headers end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
204 205 206 |
# File 'lib/merb-core/controller/merb_controller.rb', line 204 def request @request end |
#route ⇒ Object
Returns the value of attribute route.
21 22 23 |
# File 'lib/merb-core/controller/merb_controller.rb', line 21 def route @route end |
Class Method Details
._filter_params(params) ⇒ Object
This is a stub method so plugins can implement param filtering if they want.
Parameters
- params<Hash=> String>
-
A list of params
Returns
- Hash=> String
-
A new list of params, filtered as desired
100 101 102 |
# File 'lib/merb-core/controller/merb_controller.rb', line 100 def _filter_params(params) params end |
.callable_actions ⇒ Object
The list of actions that are callable, after taking defaults, _hidden_actions and _shown_actions into consideration. It is calculated once, the first time an action is dispatched for this controller.
Returns
- SimpleSet
-
A set of actions that should be callable.
87 88 89 |
# File 'lib/merb-core/controller/merb_controller.rb', line 87 def callable_actions @callable_actions ||= Extlib::SimpleSet.new(_callable_methods) end |
.hide_action(*names) ⇒ Object
Hide each of the given methods from being callable as actions.
Parameters
- *names<~to-s>
-
Actions that should be added to the list.
Returns
- Array
-
An array of actions that should not be possible to dispatch to.
45 46 47 |
# File 'lib/merb-core/controller/merb_controller.rb', line 45 def hide_action(*names) self._hidden_actions = self._hidden_actions | names.map { |n| n.to_s } end |
.inherited(klass) ⇒ Object
Parameters
- klass<Merb::Controller>
-
The Merb::Controller inheriting from the base class.
28 29 30 31 32 |
# File 'lib/merb-core/controller/merb_controller.rb', line 28 def inherited(klass) _subclasses << klass.to_s super klass._template_root = Merb.dir_for(:view) unless self._template_root end |
.show_action(*names) ⇒ Object
Makes each of the given methods being callable as actions. You can use this to make methods included from modules callable as actions.
Parameters
- *names<~to-s>
-
Actions that should be added to the list.
Returns
- Array
-
An array of actions that should be dispatched to even if they would not otherwise be.
Example
module Foo
def self.included(base)
base.show_action(:foo)
end
def foo
# some actiony stuff
end
def foo_helper
# this should not be an action
end
end
77 78 79 |
# File 'lib/merb-core/controller/merb_controller.rb', line 77 def show_action(*names) self._shown_actions = self._shown_actions | names.map {|n| n.to_s} end |
.subclasses_list ⇒ Object
10 |
# File 'lib/merb-core/controller/merb_controller.rb', line 10 def self.subclasses_list() _subclasses end |
Instance Method Details
#_absolute_template_location(template, type) ⇒ Object
The location to look for a template and mime-type. This is overridden from AbstractController, which defines a version of this that does not involve mime-types.
Parameters
- template<String>
-
The absolute path to a template - without mime and template extension. The mime-type extension is optional - it will be appended from the current content type if it hasn’t been added already.
- type<~to_s>
-
The mime-type of the template that will be rendered. Defaults to nil.
157 158 159 |
# File 'lib/merb-core/controller/merb_controller.rb', line 157 def _absolute_template_location(template, type) _conditionally_append_extension(template, type) end |
#_dispatch(action = :index) ⇒ Object
Dispatch the action.
Parameters
- action<~to_s>
-
An action to dispatch to. Defaults to :index.
Returns
- String
-
The string sent to the logger for time spent.
Raises
- ActionNotFound
-
The requested action was not found in class.
194 195 196 197 198 199 200 201 202 |
# File 'lib/merb-core/controller/merb_controller.rb', line 194 def _dispatch(action=:index) start = Time.now if self.class.callable_actions.include?(action.to_s) super(action) else raise ActionNotFound, "Action '#{action}' was not found in #{self.class}" end @_benchmarks[:action_time] = Time.now - start end |
#_template_location(context, type = nil, controller = controller_name) ⇒ Object
The location to look for a template for a particular controller, context, and mime-type. This is overridden from AbstractController, which defines a version of this that does not involve mime-types.
Parameters
- context<~to_s>
-
The name of the action or template basename that will be rendered.
- type<~to_s>
-
The mime-type of the template that will be rendered. Defaults to nil.
- controller<~to_s>
-
The name of the controller that will be rendered. Defaults to controller_name.
Notes
By default, this renders “:controller/:action.:type”. To change this, override it in your application class or in individual controllers.
140 141 142 |
# File 'lib/merb-core/controller/merb_controller.rb', line 140 def _template_location(context, type = nil, controller = controller_name) _conditionally_append_extension(controller ? "#{controller}/#{context}" : "#{context}", type) end |
#cookies ⇒ Object
Returns
- Merb::Cookies
-
A new Merb::Cookies instance representing the cookies that came in from the request object
Notes
Headers are passed into the cookie object so that you can do:
[:foo] = "bar"
236 |
# File 'lib/merb-core/controller/merb_controller.rb', line 236 def () @_cookies ||= end |
#params ⇒ Object
Returns
- Hash
-
The parameters from the request object
226 |
# File 'lib/merb-core/controller/merb_controller.rb', line 226 def params() request.params end |
#session ⇒ Object
Returns
- Hash
-
The session that was extracted from the request object.
240 |
# File 'lib/merb-core/controller/merb_controller.rb', line 240 def session() request.session end |
#status ⇒ Object
206 207 208 |
# File 'lib/merb-core/controller/merb_controller.rb', line 206 def status @_status end |
#status=(s) ⇒ Object
Set the response status code.
Parameters
- s<Fixnum, Symbol>
-
A status-code or named http-status
214 215 216 217 218 219 220 221 222 |
# File 'lib/merb-core/controller/merb_controller.rb', line 214 def status=(s) if s.is_a?(Symbol) && STATUS_CODES.key?(s) @_status = STATUS_CODES[s] elsif s.is_a?(Fixnum) @_status = s else raise ArgumentError, "Status should be of type Fixnum or Symbol, was #{s.class}" end end |