class Sinatra::RespondWith::Format

Public Class Methods

new(app) click to toggle source
# File lib/sinatra/respond_with.rb, line 90
def initialize(app)
  @app, @map, @generic, @default = app, {}, {}, nil
end

Public Instance Methods

finish() { |self| ... } click to toggle source
# File lib/sinatra/respond_with.rb, line 104
def finish
  yield self if block_given?
  mime_type = @app.content_type             ||
    @app.request.preferred_type(@map.keys)  ||
    @app.request.preferred_type             ||
    'text/html'
  type = mime_type.split(%r\s*;\s*/, 2).first
  handlers = [@map[type], @generic[type[%r^[^\/]+/]], @default].compact
  handlers.each do |block|
    if result = block.call(type)
      @app.content_type mime_type
      @app.halt result
    end
  end
  @app.halt 406
end
method_missing(meth, *args, &block) click to toggle source
# File lib/sinatra/respond_with.rb, line 121
def method_missing(meth, *args, &block)
  return super if args.any? or block.nil? or not @app.mime_type(meth)
  on(meth, &block)
end
on(type, &block) click to toggle source
# File lib/sinatra/respond_with.rb, line 94
def on(type, &block)
  @app.settings.mime_types(type).each do |mime|
    case mime
    when '*/*'            then @default     = block
    when %r^([^\/]+)\/\*$/ then @generic[$1] = block
    else                       @map[mime]   = block
    end
  end
end