You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by ma...@redhat.com on 2012/03/14 12:15:44 UTC

[PATCH] CIMI - slight hack to content-negotiation when CIMI frontend is used

From: marios <ma...@redhat.com>

Prefer :xml/:json over :html if (:html AND [:xml OR :json]) are specified

Signed-off-by: marios <ma...@redhat.com>
---
 server/lib/cimi/server.rb         |    1 +
 server/lib/sinatra/rack_accept.rb |    7 ++++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/server/lib/cimi/server.rb b/server/lib/cimi/server.rb
index 6cd845e..653c8c8 100644
--- a/server/lib/cimi/server.rb
+++ b/server/lib/cimi/server.rb
@@ -35,6 +35,7 @@ use Rack::Date
 use Rack::CIMI
 
 configure do
+  set :cimi_preferred_formats, [:xml, :json]
   set :root_url, "/cimi"
   set :views, File::join($top_srcdir, 'views', 'cimi')
   set :public_folder, File::join($top_srcdir, 'public')
diff --git a/server/lib/sinatra/rack_accept.rb b/server/lib/sinatra/rack_accept.rb
index 2ad52c7..7b2f200 100644
--- a/server/lib/sinatra/rack_accept.rb
+++ b/server/lib/sinatra/rack_accept.rb
@@ -77,10 +77,11 @@ module Rack
             self[type] = handler
           end
           yield wants
-          if ENV['API_FRONTEND'] == "cimi"
-            @media_type = (accepting_formats.has_key?(:xml) ? [:xml, accepting_formats[:xml]] : nil)
+          if (ENV['API_FRONTEND'] == "cimi" && accepting_formats.has_key?(:html) &&
+                    (accepting_formats.keys & settings.cimi_preferred_formats).length > 0 )
+            request.env['rack-accept.formats'].delete(:html)
           end
-          @media_type ||= accepting_formats.to_a.sort { |a,b| a[1]<=>b[1] }.reverse.select do |format, priority|
+          @media_type = accepting_formats.to_a.sort { |a,b| a[1]<=>b[1] }.reverse.select do |format, priority|
             wants.keys.include?(format) == true
           end.first
           if @media_type and @media_type[0]
-- 
1.7.6.5