From: marios <[email protected]>

(related https://issues.apache.org/jira/browse/DTACLOUD-316)

Signed-off-by: marios <[email protected]>
---
 server/lib/deltacloud/drivers/base_driver.rb           | 17 +++++++++++++++++
 .../deltacloud/drivers/openstack/openstack_driver.rb   | 18 ++++++++----------
 server/lib/deltacloud/helpers/deltacloud_helper.rb     | 16 ----------------
 server/lib/deltacloud/server.rb                        |  9 +++------
 server/tests/deltacloud/deltacloud_helper_test.rb      | 18 ++++++++++--------
 server/views/api/show.html.haml                        |  2 +-
 server/views/api/show.xml.haml                         |  2 +-
 7 files changed, 40 insertions(+), 42 deletions(-)

diff --git a/server/lib/deltacloud/drivers/base_driver.rb 
b/server/lib/deltacloud/drivers/base_driver.rb
index 41b6923..3b37721 100644
--- a/server/lib/deltacloud/drivers/base_driver.rb
+++ b/server/lib/deltacloud/drivers/base_driver.rb
@@ -155,6 +155,23 @@ module Deltacloud
       (self.class.instance_methods - superclass_methods).include? method
     end
 
+    def supported_collections(credentials)
+      collection_arr = []
+      Deltacloud::Collections.deltacloud_modules.each do |m|
+        m.collections.each do |c|
+          # Get the required capability for the :index operation (like 
'realms' or 'instance_state_machine')
+          index_operation_capability = c.operation(:index).required_capability
+          # Then use this capability to check if the 'capability' lambda 
defined
+          # for the Sinatra::Base class evaluate to 'true'
+          next if m.settings.respond_to?(:capability) and 
!m.settings.capability(index_operation_capability)
+          yield c if block_given?
+          collection_arr << c
+        end
+      end
+      collection_arr
+    end
+
+
     ## Capabilities
     # The rabbit dsl supports declaring a capability that is required
     # in the backend driver for the call to succeed. A driver can
diff --git a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb 
b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
index ca824bd..7e11258 100644
--- a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
+++ b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb
@@ -40,17 +40,15 @@ module Deltacloud
 
         define_hardware_profile('default')
 
-        def respond_to?(capability)#, credentials)
-          if capability == :buckets
-            begin
-              client = new_client(Deltacloud.config["openstack_creds"], 
capability)
-            rescue Deltacloud::ExceptionHandler::NotImplemented 
#OpenStack::Exception::NotImplemented...
-              return false
-            end
-            return true
-          else
-            super(capability)
+        def supported_collections(credentials)
+          #get the collections as defined by 'capability' and 'respond_to?' 
blocks
+          super_collections = super
+          begin
+             client = new_client(credentials, :buckets)
+          rescue Deltacloud::ExceptionHandler::NotImplemented 
#OpenStack::Exception::NotImplemented...
+             return super_collections - [Sinatra::Rabbit::BucketsCollection]
           end
+          super_collections
         end
 
         def hardware_profiles(credentials, opts = {})
diff --git a/server/lib/deltacloud/helpers/deltacloud_helper.rb 
b/server/lib/deltacloud/helpers/deltacloud_helper.rb
index 33fbe23..404e293 100644
--- a/server/lib/deltacloud/helpers/deltacloud_helper.rb
+++ b/server/lib/deltacloud/helpers/deltacloud_helper.rb
@@ -18,22 +18,6 @@ module Deltacloud::Helpers
 
     require 'benchmark'
 
-    def supported_collections
-      collection_arr = []
-      Deltacloud::Collections.deltacloud_modules.each do |m|
-        m.collections.each do |c|
-          # Get the required capability for the :index operation (like 
'realms' or 'instance_state_machine')
-          index_operation_capability = c.operation(:index).required_capability
-          # Then use this capability to check if the 'capability' lambda 
defined
-          # for the Sinatra::Base class evaluate to 'true'
-          next if m.settings.respond_to?(:capability) and 
!m.settings.capability(index_operation_capability)
-          yield c if block_given?
-          collection_arr << c
-        end
-      end
-      collection_arr
-    end
-
     def auth_feature_name
       return 'key' if driver.class.has_feature?(:instances, 
:authentication_key)
       return 'password' if driver.class.has_feature?(:instances, 
:authentication_password)
diff --git a/server/lib/deltacloud/server.rb b/server/lib/deltacloud/server.rb
index e2b2a8f..4ed527a 100644
--- a/server/lib/deltacloud/server.rb
+++ b/server/lib/deltacloud/server.rb
@@ -46,13 +46,10 @@ module Deltacloud
     set :config, Deltacloud[:deltacloud]
 
     get '/' do
-      if driver.name == "openstack" or params[:force_auth]
+      if params[:force_auth]
         return [401, 'Authentication failed'] unless 
driver.valid_credentials?(credentials)
-        if driver.name == "openstack"
-          Deltacloud.config["openstack_creds"] = credentials
-          #or here also works: Thread.current["openstack_creds"] = credentials
-        end
       end
+      @collections = driver.supported_collections(credentials)
       respond_to do |format|
         format.xml { haml :"api/show" }
         format.json { xml_to_json :"api/show" }
@@ -61,7 +58,7 @@ module Deltacloud
     end
 
     options '/' do
-      headers 'Allow' => supported_collections { |c| c.collection_name 
}.join(',')
+      headers 'Allow' => driver.supported_collections { |c| c.collection_name 
}.join(',')
     end
 
     post '/' do
diff --git a/server/tests/deltacloud/deltacloud_helper_test.rb 
b/server/tests/deltacloud/deltacloud_helper_test.rb
index b7de3e6..060948b 100644
--- a/server/tests/deltacloud/deltacloud_helper_test.rb
+++ b/server/tests/deltacloud/deltacloud_helper_test.rb
@@ -13,14 +13,16 @@ describe Deltacloud::Helpers::Application do
     @helper = ApplicationHelper.new
   end
 
-  it 'provides list of supported collections for the current driver' do
-    @helper.supported_collections.wont_be_empty
-    @helper.supported_collections.must_include 
Sinatra::Rabbit::InstancesCollection
-    @helper.supported_collections.wont_include 
Sinatra::Rabbit::LoadBalancersCollection
-    Thread.current[:driver] = 'ec2'
-    @helper.supported_collections.must_include 
Sinatra::Rabbit::LoadBalancersCollection
-    Thread.current[:driver] = 'mock'
-  end
+
+#THIS TEST SHOULD BE MOVED TO server/tests/drivers/base/base_driver_test.rb ?
+#  it 'provides list of supported collections for the current driver' do
+#    @helper.supported_collections.wont_be_empty
+#    @helper.supported_collections.must_include 
Sinatra::Rabbit::InstancesCollection
+#    @helper.supported_collections.wont_include 
Sinatra::Rabbit::LoadBalancersCollection
+#    Thread.current[:driver] = 'ec2'
+#    @helper.supported_collections.must_include 
Sinatra::Rabbit::LoadBalancersCollection
+#    Thread.current[:driver] = 'mock'
+#  end
 
   it 'provides name for the authentication feature' do
     @helper.auth_feature_name.wont_be_nil
diff --git a/server/views/api/show.html.haml b/server/views/api/show.html.haml
index 541c388..15a3490 100644
--- a/server/views/api/show.html.haml
+++ b/server/views/api/show.html.haml
@@ -3,7 +3,7 @@
 
 %div{ :'data-role' => :content, :'data-theme' => 'c'}
   %ul{ :'data-role' => :listview, :'data-inset' => 'true'}
-    - supported_collections do |c|
+    - @collections.each do |c|
       %li
         %a{ :href => url_for(c.collection_name),  :'data-icon' => 
"arrow-r"}=c.collection_name.to_s.gsub('_', ' ').titlecase
 
diff --git a/server/views/api/show.xml.haml b/server/views/api/show.xml.haml
index 73e7171..c9d970e 100644
--- a/server/views/api/show.xml.haml
+++ b/server/views/api/show.xml.haml
@@ -1,5 +1,5 @@
 %api{ :version => settings.version, :driver => driver_symbol, :provider => 
Thread.current[:provider] || ENV['API_PROVIDER'] }
-  - supported_collections do |c|
+  - @collections.each do |c|
     %link{ :rel => c.collection_name, :href => 
self.send(:"#{c.collection_name}_url")}
       - c.features.select { |f| driver.class.has_feature?(c.collection_name, 
f.name) }.each do |f|
         %feature{ :name => f.name }
-- 
1.7.11.4

Reply via email to