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
|
# File 'lib/fuse/server.rb', line 10
def call(env)
request = Rack::Request.new(env)
result = nil
status = 200
call_options = @options.merge Hash[request.GET.map{ |k, v| [k.to_sym, v] }]
if @root && (asset = Fuse::Document::Asset.for(request.path))
log env, "Serve asset #{asset.path}"
return asset.call(env)
end
begin
doc = Fuse::Document.new(call_options)
@root = doc.root
result = doc.to_s
log env, "Using #{doc.xsl_path} for transformation" if doc.xsl_path
log env, "Rendered #{doc.source_path} (#{result.length} bytes)", :success
rescue Fuse::Exception::SourceUnknown::TooManySources
result = render_list($!.options, $!.option_name, request)
log env, 'Multiple source document options', :notice
rescue Fuse::Exception
if $!.message
result = render_error($!.message)
log env, $!.message, :notice
else
raise
end
end if request.path == '/'
if result.nil?
log env, 'Not found', :error
status = 404
result = render_error('Not found')
end
[status, {'Content-Type' => 'text/html'}, [result]]
end
|