Module: Merb::ControllerMixin

Module | Merb::ControllerMixin
In: | lib/merb-core/controller/mixins/controller.rb

Module that is mixed in to all implemented controllers.

### Methods

delete_cookie escape_html escape_xml h message nginx_send_file redirect render_chunked render_deferred render_then_call run_later send_chunk send_data send_file set_cookie stream_file

### Public Instance methods

delete_cookie(name)

Marks a cookie as deleted and gives it an expires stamp in the past. This method is used primarily internally in Merb.

Use the `cookies` hash to manipulate cookies instead.

#### Parameters

name<~to_s>: | A name for the cookie to delete.

:api: public

escape_html(obj)

Alias for escape_xml

escape_xml(obj)

Escapes the string representation of `obj` and escapes it for use in XML.

#### Parameter

obj<~to_s>: | The object to escape for use in XML.

#### Returns

String: | The escaped object.

:api: public

h(obj)

Alias for escape_xml

message()

Retreives the redirect message either locally or from the request.

:api: public

nginx_send_file(path, content_type = "")

Uses the nginx specific +X-Accel-Redirect+ header to send a file directly from nginx.

#### Notes

Unless Content-Disposition is set before calling this method, it is set to attachment with streamed file name.

For more information, see the nginx wiki: wiki.codemongers.com/NginxXSendfile

and the following sample gist: gist.github.com/11225

there‘s also example application up on GitHub:

github.com/michaelklishin/nginx-x-accel-redirect-example-application/tree/master

#### Parameters

path<String>: | Path to file to send to the client.
content_type<String>: | content type header value. By default is set to empty string to let Nginx detect it.

#### Return

String: | precisely a single space.

:api: public

redirect(url, opts = {})

#### Parameters

url<String>: | URL to redirect to. It can be either a relative or fully-qualified URL.
opts<Hash>: | An options hash (see below)

#### Options (opts)

:message<Hash>: | Messages to pass in url query string as value for "_message"
:permanent<Boolean>: | When true, return status 301 Moved Permanently

#### Returns

String: | Explanation of redirect.

#### Examples

      redirect("/posts/34")
      redirect("/posts/34", :message => { :notice => 'Post updated successfully!' })
      redirect("http://www.merbivore.com/")
      redirect("http://www.merbivore.com/", :permanent => true)

:api: public

render_chunked(&blk)

Renders the block given as a parameter using chunked encoding.

#### Parameters

&blk: | A block that, when called, will use send_chunks to send chunks of data down to the server. The chunking will terminate once the block returns.

#### Examples

      def stream
        prefix = '<p>'
        suffix = "</p>\r\n"
        render_chunked do
          IO.popen("cat /tmp/test.log") do |io|
            done = false
            until done
              sleep 0.3
              line = io.gets.chomp

              if line == 'EOF'
                done = true
              else
                send_chunk(prefix + line + suffix)
              end
            end
          end
        end
      end

:api: public

render_deferred(&blk)

#### Parameters

&blk: | A proc that should get called outside the mutex, and which will return the value to render.

#### Returns

Proc: | A block that the server can call later, allowing Merb to release the thread lock and render another request.

:api: public

render_then_call(str, &blk)

Renders the passed in string, then calls the block outside the mutex and after the string has been returned to the client.

#### Parameters

str<String>: | A `String` to return to the client.
&blk: | A block that should get called once the string has been returned.

#### Returns

Proc: | A block that Mongrel can call after returning the string to the user.

:api: public

run_later(&blk)

Enqueu a block to run in a background thread outside of the request response dispatch

#### Parameters

&blk: | proc to run later

#### Example

run_later do

      SomeBackgroundTask.run

end

:api: public

send_chunk(data)

Writes a chunk from `render_chunked` to the response that is sent back to the client. This should only be called within a `render_chunked` block.

#### Parameters

data<String>: | a chunk of data to return.

:api: public

send_data(data, opts={})

Send binary data over HTTP to the user as a file download. May set content type, apparent file name, and specify whether to show data inline or download as an attachment.

#### Parameters

data<String>: | Path to file to send to the client.
opts<Hash>: | Options for sending the data (see below).

#### Options (opts)

:disposition<String>: | The disposition of the file send. Defaults to "attachment".
:filename<String>: | The name to use for the file. Defaults to the filename of file.
:type<String>: | The content type.

:api: public

send_file(file, opts={})

Sends a file over HTTP. When given a path to a file, it will set the right headers so that the static file is served directly.

#### Parameters

file<String>: | Path to file to send to the client.
opts<Hash>: | Options for sending the file (see below).

#### Options (opts)

:disposition<String>: | The disposition of the file send. Defaults to "attachment".
:filename<String>: | The name to use for the file. Defaults to the filename of file.
:type<String>: | The content type.

#### Returns

IO: | An I/O stream for the file.

:api: public

set_cookie(name, value, expires)

Sets a cookie to be included in the response.

If you need to set a cookie, then use the `cookies` hash.

#### Parameters

name<~to_s>: | A name for the cookie.
value<~to_s>: | A value for the cookie.
expires<~gmtime:~strftime, Hash>: | An expiration time for the cookie, or a hash of cookie options.

:api: public

stream_file(opts={}, &stream)

Streams a file over HTTP.

#### Parameters

opts<Hash>: | Options for the file streaming (see below).
&stream: | A block that, when called, will return an object that responds to `get_lines` for streaming.

#### Options

:disposition<String>: | The disposition of the file send. Defaults to "attachment".
:type<String>: | The content type.
:content_length<Numeric>: | The length of the content to send.
:filename<String>: | The name to use for the streamed file.

#### Examples

      stream_file({ :filename => file_name, :type => content_type,
        :content_length => content_length }) do |response|
        AWS::S3::S3Object.stream(user.folder_name + "-" + user_file.unique_id, bucket_name) do |chunk|
          response.write chunk
        end
      end

:api: public

[Validate]