Class: Sinatra::RespondWith::Format
- Inherits:
-
Object
- Object
- Sinatra::RespondWith::Format
show all
- Defined in:
- lib/sinatra/respond_with.rb
Instance Method Summary
collapse
Constructor Details
#initialize(app) ⇒ Format
Returns a new instance of Format.
92
93
94
95
96
97
|
# File 'lib/sinatra/respond_with.rb', line 92
def initialize(app)
@app = app
@map = {}
@generic = {}
@default = nil
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
126
127
128
129
130
|
# File 'lib/sinatra/respond_with.rb', line 126
def method_missing(method, *args, &block)
return super if args.any? || block.nil? || !@app.mime_type(method)
on(method, &block)
end
|
Instance Method Details
#finish {|_self| ... } ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/sinatra/respond_with.rb', line 109
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(/\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 500, 'Unknown template engine'
end
|
#on(type, &block) ⇒ Object
99
100
101
102
103
104
105
106
107
|
# File 'lib/sinatra/respond_with.rb', line 99
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
|