--- server/libexec/lib/sinatra/abstract_format.rb | 23 +++++++++++++++++++++++ server/libexec/server.rb | 3 +++ 2 files changed, 26 insertions(+), 0 deletions(-) create mode 100644 server/libexec/lib/sinatra/abstract_format.rb
diff --git a/server/libexec/lib/sinatra/abstract_format.rb b/server/libexec/lib/sinatra/abstract_format.rb new file mode 100644 index 0000000..9dd58b0 --- /dev/null +++ b/server/libexec/lib/sinatra/abstract_format.rb @@ -0,0 +1,23 @@ +require 'pathname' + +module Rack + class AbstractFormat + + def initialize(app, default = nil) + @app, @default = app, default + end + + def call(env) + path = Pathname(env['PATH_INFO']) + return @app.call(env) unless ['.html', '.xml'].include?(path.extname) + env['PATH_INFO'] = path.to_s.sub(/#{path.extname}$/,'') + env['HTTP_ACCEPT'] = concat(env['HTTP_ACCEPT'], Rack::Mime.mime_type(path.extname, @default)) + @app.call(env) + end + + private + def concat(accept, type) + (accept || '').split(',').unshift(type).compact.join(',') + end + end +end diff --git a/server/libexec/server.rb b/server/libexec/server.rb index 8185eff..a085f32 100644 --- a/server/libexec/server.rb +++ b/server/libexec/server.rb @@ -2,6 +2,7 @@ require 'rubygems' require 'deltacloud' require 'sinatra' require 'sinatra/respond_to' +require 'sinatra/abstract_format' require 'erb' require 'haml' require 'open3' @@ -24,6 +25,8 @@ module Sinatra register Sinatra::RespondTo end
+use Rack::AbstractFormat + # Common actions #
deltacloud-devel@lists.fedorahosted.org