Network API rev 3 - Collection helpers (passing context to views - check for presence of resource)
diff --git a/server/lib/deltacloud/helpers/deltacloud_helper.rb b/server/lib/deltacloud/helpers/deltacloud_helper.rb
index e069312..242effc 100644
--- a/server/lib/deltacloud/helpers/deltacloud_helper.rb
+++ b/server/lib/deltacloud/helpers/deltacloud_helper.rb
@@ -65,18 +65,19 @@
       http_method || Deltacloud::Rabbit::BaseCollection.http_method_for(action)
     end
 
-    def filter_all(model)
+    def filter_all(model, opts={})
       begin
         @benchmark = Benchmark.measure { @elements = driver.send(model.to_sym, credentials, params) }
       rescue => e
         @exception = e
       end
+      locals = opts[:check] ? {:elements => @elements, opts[:check]=>driver.respond_to?(opts[:check])} : {:elements => @elements}
       if @elements
         headers['X-Backend-Runtime'] = @benchmark.real.to_s
         instance_variable_set(:"@#{model}", @elements)
         respond_to do |format|
-          format.html { haml :"#{model}/index", :locals => { :elements => @elements } }
-          format.xml { haml :"#{model}/index", :locals => { :elements => @elements } }
+          format.html { haml :"#{model}/index", :locals => locals}
+          format.xml  { haml :"#{model}/index", :locals => locals}
           format.json { JSON::dump({ model => @elements.map { |el| el.to_hash(self) }}) }
         end
       else
@@ -84,16 +85,18 @@
       end
     end
 
-    def show(model)
+    def show(model, opts={})
       @benchmark = Benchmark.measure do
         @element = driver.send(model, credentials, { :id => params[:id]} )
       end
       headers['X-Backend-Runtime'] = @benchmark.real.to_s
       instance_variable_set("@#{model}", @element)
+      #checks for methods in opts:
+      locals = opts[:check] ? {model => @element, opts[:check]=>driver.respond_to?(opts[:check])} : {model => @element}
       if @element
         respond_to do |format|
-          format.html { haml :"#{model.to_s.pluralize}/show", :locals=>{model=>@element}}
-          format.xml { haml :"#{model.to_s.pluralize}/show" , :locals=>{model=>@element}}
+          format.html { haml :"#{model.to_s.pluralize}/show", :locals=>locals}
+          format.xml { haml :"#{model.to_s.pluralize}/show" , :locals=>locals}
           format.json { JSON::dump(model => @element.to_hash(self)) }
         end
       else
diff --git a/server/lib/deltacloud/helpers/rabbit_helper.rb b/server/lib/deltacloud/helpers/rabbit_helper.rb
index cdd0ae1..3c4d43f 100644
--- a/server/lib/deltacloud/helpers/rabbit_helper.rb
+++ b/server/lib/deltacloud/helpers/rabbit_helper.rb
@@ -18,15 +18,15 @@
 
   def self.standard_index_operation(opts={})
     collection_name = @collection_name
-    operation :index, :with_capability => opts[:capability] || collection_name do
-      control { filter_all collection_name }
+    operation :index, :with_capability => opts.delete(:capability) || collection_name do
+      control { filter_all collection_name, opts }
     end
   end
 
   def self.standard_show_operation(opts={})
     collection_name = @collection_name
-    operation :show, :with_capability => opts[:capability] || collection_name do
-      control { show collection_name.to_s.singularize.intern }
+    operation :show, :with_capability => opts.delete(:capability) || collection_name do
+      control { show collection_name.to_s.singularize.intern, opts}
     end
   end