### Home Classes Methods

### In Files

- lib/merb-core/controller/merb_controller.rb

### Parent

Merb::AbstractController

### Methods

- ::_callable_methods
- ::_filter_params
- ::abstract!
- ::abstract?
- ::call
- ::callable_actions
- ::hide_action
- ::inherited
- ::new
- ::overridable
- ::override!
- ::show_action
- ::subclasses_list
- #_absolute_template_location
- #_call
- #_dispatch
- #_template_location
- #absolute_url
- #params
- #rack_response
- #relative_url
- #resource
- #status
- #status=
- #url

### Included Modules

- Merb::ResponderMixin
- Merb::ControllerMixin
- Merb::AuthenticationMixin
- Merb::ConditionalGetMixin

### Files

- CHANGELOG
- LICENSE
- README
- TODO

### Class/Module Index

Quicksearch

- Merb
- Merb::AbstractController
- Merb::AcceptType
- Merb::AuthenticationMixin
- Merb::AuthenticationMixin::BasicAuthentication
- Merb::BootLoader
- Merb::BootLoader::AfterAppLoads
- Merb::BootLoader::BackgroundServices
- Merb::BootLoader::BeforeAppLoads
- Merb::BootLoader::BuildFramework
- Merb::BootLoader::ChooseAdapter
- Merb::BootLoader::Cookies
- Merb::BootLoader::Defaults
- Merb::BootLoader::Dependencies
- Merb::BootLoader::DropPidFile
- Merb::BootLoader::LoadClasses
- Merb::BootLoader::Logger
- Merb::BootLoader::MimeTypes
- Merb::BootLoader::MixinSession
- Merb::BootLoader::RackUpApplication
- Merb::BootLoader::ReloadClasses
- Merb::BootLoader::ReloadClasses::TimedExecutor
- Merb::BootLoader::Router
- Merb::BootLoader::SetupSession
- Merb::BootLoader::SetupStubClasses
- Merb::BootLoader::Templates
- Merb::ConditionalGetMixin
- Merb::Config
- Merb::Config::ConfigBlock
- Merb::Const
- Merb::Controller
- Merb::ControllerExceptions
- Merb::ControllerExceptions::Accepted
- Merb::ControllerExceptions::ActionNotFound
- Merb::ControllerExceptions::BadGateway
- Merb::ControllerExceptions::BadRequest
- Merb::ControllerExceptions::Base
- Merb::ControllerExceptions::ClientError
- Merb::ControllerExceptions::Conflict
- Merb::ControllerExceptions::Continue
- Merb::ControllerExceptions::Created
- Merb::ControllerExceptions::ExpectationFailed
- Merb::ControllerExceptions::Forbidden
- Merb::ControllerExceptions::GatewayTimeout
- Merb::ControllerExceptions::Gone
- Merb::ControllerExceptions::HTTPVersionNotSupported
- Merb::ControllerExceptions::Informational
- Merb::ControllerExceptions::InternalServerError
- Merb::ControllerExceptions::LayoutNotFound
- Merb::ControllerExceptions::LengthRequired
- Merb::ControllerExceptions::MethodNotAllowed
- Merb::ControllerExceptions::MovedPermanently
- Merb::ControllerExceptions::MovedTemporarily
- Merb::ControllerExceptions::MultiPartParseError
- Merb::ControllerExceptions::MultipleChoices
- Merb::ControllerExceptions::NoContent
- Merb::ControllerExceptions::NonAuthoritativeInformation
- Merb::ControllerExceptions::NotAcceptable
- Merb::ControllerExceptions::NotFound
- Merb::ControllerExceptions::NotImplemented
- Merb::ControllerExceptions::NotModified
- Merb::ControllerExceptions::OK
- Merb::ControllerExceptions::PartialContent
- Merb::ControllerExceptions::PaymentRequired
- Merb::ControllerExceptions::PreconditionFailed
- Merb::ControllerExceptions::ProxyAuthenticationRequired
- Merb::ControllerExceptions::Redirection
- Merb::ControllerExceptions::RequestEntityTooLarge
- Merb::ControllerExceptions::RequestRangeNotSatisfiable
- Merb::ControllerExceptions::RequestTimeout
- Merb::ControllerExceptions::RequestURITooLarge
- Merb::ControllerExceptions::ResetContent
- Merb::ControllerExceptions::SeeOther
- Merb::ControllerExceptions::ServerError
- Merb::ControllerExceptions::ServiceUnavailable
- Merb::ControllerExceptions::Successful
- Merb::ControllerExceptions::SwitchingProtocols
- Merb::ControllerExceptions::TemplateNotFound
- Merb::ControllerExceptions::TemporaryRedirect
- Merb::ControllerExceptions::Unauthorized
- Merb::ControllerExceptions::UnsupportedMediaType
- Merb::ControllerExceptions::UseProxy
- Merb::ControllerMixin
- Merb::CookieSession
- Merb::CookieSession::CookieOverflow
- Merb::CookieSession::TamperedWithCookie
- Merb::Cookies
- Merb::CookiesMixin
- Merb::CookiesMixin::RequestMixin
- Merb::Counter
- Merb::Dispatcher
- Merb::Dispatcher::DefaultException
- Merb::Dispatcher::DefaultExceptionHelper
- Merb::GlobalHelpers
- Merb::InlineTemplates
- Merb::Logger
- Merb::MemcacheSession
- Merb::MemcacheStore
- Merb::MemorySession
- Merb::MemorySessionStore
- Merb::Parse
- Merb::Plugins
- Merb::Rack
- Merb::Rack::AbstractAdapter
- Merb::Rack::Adapter
- Merb::Rack::Application
- Merb::Rack::ConditionalGet
- Merb::Rack::Console
- Merb::Rack::ContentLength
- Merb::Rack::DeferrableMiddleware
- Merb::Rack::Ebb
- Merb::Rack::EventedMongrel
- Merb::Rack::FastCGI
- Merb::Rack::Handler
- Merb::Rack::Handler::Mongrel
- Merb::Rack::Head
- Merb::Rack::Helpers
- Merb::Rack::Irb
- Merb::Rack::Middleware
- Merb::Rack::Mongrel
- Merb::Rack::PathPrefix
- Merb::Rack::Profiler
- Merb::Rack::Runner
- Merb::Rack::Static
- Merb::Rack::StreamWrapper
- Merb::Rack::SwiftipliedMongrel
- Merb::Rack::Thin
- Merb::Rack::ThinTurbo
- Merb::Rack::Tracer
- Merb::Rack::WEBrick
- Merb::RenderMixin
- Merb::RenderMixin::ClassMethods
- Merb::Request
- Merb::ReservedError
- Merb::Responder
- Merb::ResponderMixin
- Merb::ResponderMixin::ClassMethods
- Merb::ResponderMixin::ContentTypeAlreadySet
- Merb::Router
- Merb::Router::Behavior
- Merb::Router::Behavior::Error
- Merb::Router::Behavior::Proxy
- Merb::Router::CachedProc
- Merb::Router::GenerationError
- Merb::Router::NotCompiledError
- Merb::Router::Resources
- Merb::Router::RouteNotFound
- Merb::Server
- Merb::Session
- Merb::SessionContainer
- Merb::SessionMixin
- Merb::SessionMixin::NoSessionContainer
- Merb::SessionMixin::RequestMixin
- Merb::SessionMixin::RequestMixin::ClassMethods
- Merb::SessionMixin::SessionOverflow
- Merb::SessionStoreContainer
- Merb::System
- Merb::System::PortablePoller
- Merb::Template
- Merb::Template::Erubis
- Merb::Template::Erubis::Mixin
- Merb::Test
- Merb::Test::ControllerHelper
- Merb::Test::Cookie
- Merb::Test::CookieJar
- Merb::Test::ExampleGroup
- Merb::Test::Helpers
- Merb::Test::MakeRequest
- Merb::Test::Matchers
- Merb::Test::MultipartRequestHelper
- Merb::Test::MultipartRequestHelper::FileParam
- Merb::Test::MultipartRequestHelper::Param
- Merb::Test::MultipartRequestHelper::Post
- Merb::Test::RequestHelper
- Merb::Test::RequestHelper::CookieJar
- Merb::Test::RequestHelper::FakeRequest
- Merb::Test::RouteHelper
- Merb::Test::Rspec
- Merb::Test::Rspec::ControllerMatchers
- Merb::Test::Rspec::ControllerMatchers::BeError
- Merb::Test::Rspec::ControllerMatchers::BeRedirect
- Merb::Test::Rspec::ControllerMatchers::Provide
- Merb::Test::Rspec::RouteMatchers
- Merb::Test::Rspec::RouteMatchers::ParameterMatcher
- Merb::Test::Rspec::RouteMatchers::RouteToMatcher
- Merb::Test::ViewHelper
- Merb::Test::WebratHelper
- Merb::Worker
- Erubis
- Erubis::Basic
- Erubis::Basic::Converter
- Erubis::BlockAwareEnhancer
- Erubis::BlockAwareEruby
- Erubis::MEruby
- Spec
- Spec::Matchers
- Spec::Matchers::MatcherDSL
- Spec::Runner
- Spec::Runner::Formatter
- Spec::Runner::Formatter::BaseTextFormatter
- Gem
- Gem::Dependency
- Hpricot
- Hpricot::Elem
- Mongrel
- Mongrel::HttpResponse
- Class
- Exception
- Hash
- Kernel
- MemCache
- Memcached
- Object
- String
- Time

No matching classes.

# Merb::Controller

### Attributes

headers[R]

:api: public

request[R]

:api: public

### Public Class Methods

_callable_methods() click to toggle source

All methods that are callable as actions.

#### Returns

Array | A list of method names that are also actions

:api: private

    # File lib/merb-core/controller/merb_controller.rb, line 166
    def self._callable_methods
      callables = []
      klass = self
      begin
        callables << (klass.public_instance_methods(false) + klass._shown_actions).map{|m| m.to_s} - klass._hidden_actions
        klass = klass.superclass
      end until klass == Merb::AbstractController || klass == Object
      callables.flatten.reject{|action| action =~ /^_.*/}.map {|x| x.to_s}
    end

_filter_params(params) click to toggle source

This is a stub method so plugins can implement param filtering if they want.

#### Parameters

params<Hash{Symbol => String}> | A list of params

#### Returns

Hash{Symbol => String} | A new list of params, filtered as desired

:api: plugin @overridable

    # File lib/merb-core/controller/merb_controller.rb, line 155
    def self._filter_params(params)
      params
    end

abstract!() click to toggle source

Sets a controller to be "abstract" This controller will not be able to be routed to and is used for super classing only

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 453
    def self.abstract!
      @_abstract = true
    end

abstract?() click to toggle source

Asks a controller if it is abstract

### Returns

Boolean

    true if the controller has been set as abstract

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 464
    def self.abstract?
      !!@_abstract
    end

call(env) click to toggle source

Call the controller as a Rack endpoint.

Expects:

    env["merb.status"]:: the default status code to be returned
    env["merb.action_name"]:: the action name to dispatch
    env["merb.request_start"]:: a Time object representing the
      start of the request.

#### Parameters

env<Hash> | A rack environment

#### Returns

Array[Integer, Hash, each] | A standard Rack response

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 251
    def self.call(env)
      new(Merb::Request.new(env), env["merb.status"])._call
    end

callable_actions() click to toggle source

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.

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 141
    def self.callable_actions
      @callable_actions ||= Extlib::SimpleSet.new(_callable_methods)
    end

hide_action(*names) click to toggle source

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.

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 98
    def self.hide_action(*names)
      self._hidden_actions = self._hidden_actions | names.map { |n| n.to_s }
    end

inherited(klass) click to toggle source

#### Parameters

klass<Merb::Controller> | The Merb::Controller inheriting from the base class.

:api: private

    # File lib/merb-core/controller/merb_controller.rb, line 27
    def self.inherited(klass)
      _subclasses << klass.to_s
      super
      klass._template_root = Merb.dir_for(:view) unless self._template_root
    end

new(request, status=200, headers={'Content-Type' => 'text/html; charset=utf-8'}) click to toggle source

Build a new controller.

Sets the variables that came in through the dispatch as available to the controller.

#### Parameters

request<Merb::Request> | The Merb::Request that came in from Rack.
status<Integer> | An integer code for the status. Defaults to 200.
headers<Hash{header => value}> | A hash of headers to start the controller with. These headers can be overridden later by the headers method.

:api: plugin @overridable

    # File lib/merb-core/controller/merb_controller.rb, line 230
    def initialize(request, status=200, headers={'Content-Type' => 'text/html; charset=utf-8'})
      super()
      @request, @_status, @headers = request, status, headers
    end

overridable(*names) click to toggle source

#### Parameters

*names<Array> | an Array of method names that should be overridable in application controllers.

#### Returns

Array | The list of methods that are overridable

:api: plugin

    # File lib/merb-core/controller/merb_controller.rb, line 42
    def self.overridable(*names)
      self._overridable.push(*names)
    end

override!(*names) click to toggle source

In an application controller, call override! before a method to indicate that you want to override a method in Merb::Controller that is not normally overridable.

Doing this may potentially break your app in a future release of Merb, and this is provided for users who are willing to take that risk. Without using override!, Merb will raise an error if you attempt to override a method defined on Merb::Controller.

This is to help users avoid a common mistake of defining an action that overrides a core method on Merb::Controller.

#### Parameters

*names<Array> | An Array of methods that will override Merb core classes on purpose

#### Example

    class Kontroller < Application
      def status
        render
      end
    end

will raise a Merb::ReservedError, because status is a method on Merb::Controller.

    class Kontroller < Application
      override! :status
      def status
        some_code || super
      end
    end

will not raise a Merb::ReservedError, because the user specifically decided to override the status method.

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 84
    def self.override!(*names)
      self._override_bang.push(*names)
    end

show_action(*names) click to toggle source

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

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 129
    def self.show_action(*names)
      self._shown_actions = self._shown_actions | names.map {|n| n.to_s}
    end

subclasses_list() click to toggle source

:api: private

    # File lib/merb-core/controller/merb_controller.rb, line 15
    def self.subclasses_list() _subclasses end

### Public Instance Methods

_absolute_template_location(template, type) click to toggle source

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.

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 212
    def _absolute_template_location(template, type)
      _conditionally_append_extension(template, type)
    end

_call() click to toggle source

Dispatches the action and records benchmarks

#### Returns

Array[Integer, Hash, each] | A standard Rack response

:api: private

    # File lib/merb-core/controller/merb_controller.rb, line 261
    def _call
      _dispatch(request.env["merb.action_name"])
      _benchmarks[:dispatch_time] = Time.now - request.env["merb.request_start"]
      Merb.logger.info { _benchmarks.inspect }
      Merb.logger.flush
      rack_response
    end

_dispatch(action=:index) click to toggle source

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.

:api: plugin

    # File lib/merb-core/controller/merb_controller.rb, line 281
    def _dispatch(action=:index)
      Merb.logger.info { "Params: #{self.class._filter_params(request.params).inspect}" }
      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
      self
    end

_template_location(context, type, controller) click to toggle source

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. This will be "layout" for rendering a layout.

#### Notes

By default, this renders ":controller/:action.:type". To change this, override it in your application class or in individual controllers.

:api: public @overridable

    # File lib/merb-core/controller/merb_controller.rb, line 194
    def _template_location(context, type, controller)
      _conditionally_append_extension(controller ? "#{controller}/#{context}" : "#{context}", type)
    end

absolute_url(*args) click to toggle source

Returns the absolute url including the passed protocol and host.

This uses the same arguments as the url method, with added requirements of protocol and host options.

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 429
    def absolute_url(*args)
      options  = extract_options_from_args!(args) || {}
      options[:protocol] ||= request.protocol
      options[:host] ||= request.host
      args << options
      super(*args)
    end

params() click to toggle source

#### Returns

Hash | The parameters from the request object

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 324
    def params()  request.params  end

rack_response() click to toggle source

The results of the controller's render, to be returned to Rack.

#### Returns

Array[Integer, Hash, String] | The controller's status code, headers, and body

:api: private

    # File lib/merb-core/controller/merb_controller.rb, line 444
    def rack_response
      [status, headers, Merb::Rack::StreamWrapper.new(body)]
    end

relative_url(name, *args) click to toggle source
Alias for: url
resource(*args) click to toggle source

Generates a URL for a single or nested resource.

#### Parameters

resources<Symbol,Object> | The resources for which the URL

    should be generated. These resources should be specified
    in the router.rb file using #resources and #resource.

options<Hash> | Any extra parameters that are needed to

    generate the URL.

#### Returns

String | The generated URL.

#### Examples

Merb::Router.prepare do

    resources :users do
      resources :comments
    end

end

resource(:users) # => /users resource(@user) # => /users/10 resource(@user, :comments) # => /users/10/comments resource(@user, @comment) # => /users/10/comments/15 resource(:users, :new) # => /users/new resource(:@user, :edit) # => /users/10/edit

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 415
    def resource(*args)
      args << params
      Merb::Router.resource(*args)
    end

status() click to toggle source

#### Returns

Fixnum | The response status code

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 300
    def status
      @_status
    end

status=(s) click to toggle source

Set the response status code.

#### Parameters

s<Fixnum, Symbol> | A status-code or named http-status

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 310
    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

url(name, *args) click to toggle source

There are three possible ways to use this method. First, if you have a named route, you can specify the route as the first parameter as a symbol and any paramters in a hash. Second, you can generate the default route by just passing the params hash, just passing the params hash. Finally, you can use the anonymous parameters. This allows you to specify the parameters to a named route in the order they appear in the router.

#### Parameters(Named Route)

name<Symbol> | The name of the route.
args<Hash> | Parameters for the route generation.

#### Parameters(Default Route)

args<Hash> | Parameters for the route generation. This route will use the default route.

#### Parameters(Anonymous Parameters)

name<Symbol> | The name of the route.
args<Array> | An array of anonymous parameters to generate the route with. These parameters are assigned to the route parameters in the order that they are passed.

#### Returns

String | The generated URL.

#### Examples

Named Route

Merb::Router.prepare do

    match("/articles/:title").to(:controller => :articles, :action => :show).name("articles")

end

url(:articles, :title => "new_article")

Default Route

Merb::Router.prepare do

    default_routes

end

url(:controller => "articles", :action => "new")

Anonymous Paramters

Merb::Router.prepare do

    match("/articles/:year/:month/:title").to(:controller => :articles, :action => :show).name("articles")

end

url(:articles, 2008, 10, "test_article")

:api: public

    # File lib/merb-core/controller/merb_controller.rb, line 380
    def url(name, *args)
      args << params
      name = request.route if name == :this
      Merb::Router.url(name, *args)
    end

Also aliased as: relative_url

[Validate]

Generated with the Darkfish Rdoc Generator 2.