Module: Lotus::Action::Mime

Defined in:
lib/lotus/action/mime.rb

Overview

Mime type API

See Also:

  • ClassMethods#accept

Since:

  • 0.1.0

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

HTTP_ACCEPT =

The key that returns accepted mime types from the Rack env

Since:

  • 0.1.0

'HTTP_ACCEPT'.freeze
CONTENT_TYPE =

The header key to set the mime type of the response

Since:

  • 0.1.0

'Content-Type'.freeze
DEFAULT_ACCEPT =

The default mime type for an incoming HTTP request

Since:

  • 0.1.0

'*/*'.freeze
DEFAULT_CONTENT_TYPE =

The default mime type that is returned in the response

Since:

  • 0.1.0

'application/octet-stream'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Override Ruby’s hook for modules. It includes Mime types logic



40
41
42
# File 'lib/lotus/action/mime.rb', line 40

def self.included(base)
  base.extend ClassMethods
end

Instance Method Details

#content_typeString

The content type that will be automatically set in the response.

It prefers, in order:

* Explicit set value (see #format=)
* Weighted value from Accept
* Default content type

To override the value, use #format=

Examples:

require 'lotus/controller'

class Show
  include Lotus::Action

  def call(params)
    # ...
    content_type # => 'text/html'
  end
end

See Also:

  • #format=
  • Configuration#default_format
  • #default_content_type
  • #DEFAULT_CONTENT_TYPE

Since:

  • 0.1.0



175
176
177
# File 'lib/lotus/action/mime.rb', line 175

def content_type
  @content_type || accepts || default_content_type || DEFAULT_CONTENT_TYPE
end

#formatSymbol

Returns a symbol representation of the content type.

The framework automatically detects the request mime type, and returns the corresponding format.

However, if this value was explicitely set by ‘#format=`, it will return that value

Examples:

Default scenario

require 'lotus/controller'

class Show
  include Lotus::Action

  def call(params)
  end
end

action = Show.new

_, headers, _ = action.call({ 'HTTP_ACCEPT' => 'text/html' })
headers['Content-Type'] # => 'text/html'
action.format           # => :html

Set value

require 'lotus/controller'

class Show
  include Lotus::Action

  def call(params)
    self.format = :xml
  end
end

action = Show.new

_, headers, _ = action.call({ 'HTTP_ACCEPT' => 'text/html' })
headers['Content-Type'] # => 'application/xml'
action.format           # => :xml

See Also:

Since:

  • 0.2.0



142
143
144
# File 'lib/lotus/action/mime.rb', line 142

def format
  @format ||= detect_format
end