-
Notifications
You must be signed in to change notification settings - Fork 5
/
config.ru
executable file
·70 lines (53 loc) · 1.49 KB
/
config.ru
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env unicorn -N -Ilib
require 'jellyfish'
class Jelly
include Jellyfish
controller_include Module.new{
def dispatch
headers_merge 'content-type' => 'application/json; charset=utf-8',
'Access-Control-Allow-Origin' => '*'
super
end
def render obj
["#{Jellyfish::Json.encode(obj)}\n"]
end
}
handle Jellyfish::NotFound do |e|
status 404
body %Q|{"error":{"name":"NotFound"}}\n|
end
handle StandardError do |error|
jellyfish.log_error(error, env['rack.errors'])
name = error.class.name
message = error.message
status 500
body render('error' => {'name' => name, 'message' => message})
end
get '/users' do
render [:name => 'jellyfish']
end
post '/users' do
render :message => "jellyfish #{request.params['name']} created."
end
put %r{\A/users/(?<id>\d+)} do |match|
render :message => "jellyfish ##{match[:id]} updated."
end
delete %r{\A/users/(?<id>\d+)} do |match|
render :message => "jellyfish ##{match[:id]} deleted."
end
get %r{\A/posts/(?<year>\d+)-(?<month>\d+)/(?<name>\w+)} do |match|
render Hash[match.names.zip(match.captures)]
end
get '/posts/tags/ruby' do
render []
end
end
App = Jellyfish::Builder.app do
use Rack::CommonLogger
use Rack::ContentLength
use Rack::Deflater
run Rack::Cascade.new([Rack::File.new('public/index.html'),
Rack::File.new('public'),
Jelly.new])
end
run App