1. Welcome
  2. Getting Started [+/-]
    1. Installing from RubyGems
    2. Installing from GitHub.com
    3. Installing with Sake
  3. The Basics [+/-]
    1. Hello World
      1. Application Generation Options
    2. Paths
    3. Environments
    4. Rake
  4. Configuration [+/-]
    1. Configatron
    2. Initializers
      1. Gems
      2. Mime-Types
  5. Routing [+/-]
    1. Default Routes
    2. Named Routes
    3. RESTful/Resource Routes
    4. Nested Resource Routes
    5. Regex Routes
    6. Wildcard Routes
    7. Blocks in Routes
    8. Redirecting
    9. Error Handling
    10. Deferred? Routes
    11. Misc. Routing
  6. Controllers [+/-]
    1. Actions
    2. Headers/Status
    3. Handling Content Types
    4. Filters
    5. Helpers
    6. Layouts
    7. Tell Messaging
    8. Redirecting
    9. Rendering
      1. Engines
        1. Erubis
        2. XML Builder
        3. Extending
          1. Case Study: PDF Writer
      2. Types
        1. :action
        2. :text
        3. :inline
        4. :xml
        5. :url
        6. :partial
        7. :template
        8. :public
        9. Extending
          1. Case Study: PDF Writer
  7. Views [+/-]
    1. Helpers
    2. Layouts
    3. Assets Host
    4. Assets Management
    5. Form Builders
  8. Sessions [+/-]
    1. Session Store API
  9. Request/Response [+/-]
    1. Cookies
  10. Testing [+/-]
    1. RSpec
    2. Test::Unit::TestCase
  11. Porlets [+/-]
    1. Developing
    2. Testing
    3. Packaging
    4. Using
  12. Plugins [+/-]
    1. Extending
      1. Case Study: PDF Writer
  13. Deploying [+/-]
    1. Thin
    2. Passenger (mod_rails)
    3. Joyent Accelerator
  14. Mack More [+/-]
    1. mack-active_record
    2. mack-asset_packager
    3. mack-caching
    4. mack-data_factory
    5. mack-data_mapper
    6. mack-distributed
    7. mack-encryption
    8. mack-facets
    9. mack-haml
    10. mack-javascript
    11. mack-localization
    12. mack-markaby
    13. mack-notifier
    14. mack-orm
    15. mack-pdf_writer
  15. Rails to Mack Cheat Sheet
  16. Contributing
  17. APIs [+/-]

Handling Content Types

When a request comes in Mack will attempt to determine it's content type based on the extension of the request coming in. For example '/foo.xml' will automatically look up and set the 'Content-Type' header based on the Mack::Utils::MimeTypes registry. By default Mack will assume the type to be 'html'.

It's easy to override the content type for a request, there are a couple ways of doing so:

class UserController
  include Mack::Controller
  
  def download
    response.content_type = Mack::Utils::MimeTypes[:rtf]
  end
  
end

In the above example the content type will be set to 'application/rtf; application/x-rtf; text/richtext'. You obviously don't have to use the Mack::Utilss::MimeTypes registry, but it's a very convenient way of managing your different mime types, and it comes pre-loaded with 450 of them!

You can also set the content type when you call the render method, as such:

class UserController
  include Mack::Controller
  
  def download
    render(:text, File.read('/path/to/file'), :content_type => 'application/pdf')
  end
  
end

Sometimes when when developing you want to be able to handle different content types differently in your actions, that's where the wants method comes in handy.

class UserController
  include Mack::Controller
  
  def download
    # do common things...
    wants(:xml) do
      # do something specific for xml
    end
    wants(:js) do
      # do something specific for javascript
    end
    # do common things...
  end
  
end

Anything wrapped in a wants block will only be called if that content type has been requested by the end user.

This guide was written for Mack version 0.8.2