forked from ruby-grape/grape-on-rack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
acme_app.rb
31 lines (29 loc) · 803 Bytes
/
acme_app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
module Acme
class App
def initialize
@filenames = [ '', '.html', 'index.html', '/index.html' ]
@rack_static = ::Rack::Static.new(
lambda { [404, {}, []] }, {
:root => File.expand_path('../../public', __FILE__),
:urls => %w[/]
})
end
def call(env)
request_path = env['PATH_INFO']
# static files
@filenames.each do |path|
response = @rack_static.call(env.merge({'PATH_INFO' => request_path + path}))
return response if response[0] != 404
end
# api
response = Acme::API.call(env)
# error pages
case response[0]
when 404, 500
@rack_static.call(env.merge({'PATH_INFO' => "/errors/#{response[0]}.html"}))
else
response
end
end
end
end