From: Michal Fojtik <[email protected]>
---
client/lib/base_object.rb | 15 +++++++++++++++
client/lib/deltacloud.rb | 12 ++++++++++--
server/views/drivers/index.xml.haml | 6 ++++--
server/views/drivers/show.xml.haml | 10 ++++++----
4 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/client/lib/base_object.rb b/client/lib/base_object.rb
index 43d7ee5..2050589 100644
--- a/client/lib/base_object.rb
+++ b/client/lib/base_object.rb
@@ -92,11 +92,26 @@ module DeltaCloud
}
end
+ def add_providers!(values)
+ @objects << {
+ :type => :provider,
+ :method_name => 'provider',
+ :values => values
+ }
+ @objects << {
+ :type => :providers,
+ :method_name => 'providers',
+ :values => values.keys
+ }
+ end
+
# Basic method hander. This define a way how value from property
# will be returned
def method_handler(m, args=[])
case m[:type]
when :link then return @client.send(m[:method_name].singularize,
m[:id])
+ when :provider then m[:values][args.first]
+ when :providers then m[:values]
when :text then return m[:value]
when :property then return m[:property]
when :collection then return m[:values]
diff --git a/client/lib/deltacloud.rb b/client/lib/deltacloud.rb
index e2db0ba..37e04fa 100644
--- a/client/lib/deltacloud.rb
+++ b/client/lib/deltacloud.rb
@@ -234,8 +234,16 @@ module DeltaCloud
obj.add_collection!(attribute.name, meta.inspect) && next
end
- # Deal with collections like public-addresses, private-addresses
- if (attribute/'./*').length > 0
+ if (attribute/'provider').length > 0
+ providers = {}
+ (attribute/'provider').each do |provider|
+ providers[provider[:id]] = (provider/'entrypoint').collect { |e| {
e[:kind] => e.text } }
+ end
+ obj.add_providers!(providers) && next
+ end
+
+ # Add special collection for driver providers
+ if not (attribute/'*').to_a.empty?
obj.add_collection!(attribute.name, (attribute/'*').collect {
|value| value.text }) && next
end
diff --git a/server/views/drivers/index.xml.haml
b/server/views/drivers/index.xml.haml
index 63e809f..afa4b28 100644
--- a/server/views/drivers/index.xml.haml
+++ b/server/views/drivers/index.xml.haml
@@ -3,5 +3,7 @@
%driver{ :href => driver_url(id), :id => id }
%name<
=details[:name]
- - driver_provider(details).keys.each do |prov|
- %provider{ :id => prov }
+ - unless driver_provider(details).keys.empty?
+ %providers
+ - driver_provider(details).keys.each do |prov|
+ %provider{ :id => prov }
diff --git a/server/views/drivers/show.xml.haml
b/server/views/drivers/show.xml.haml
index ea5f508..b8afead 100644
--- a/server/views/drivers/show.xml.haml
+++ b/server/views/drivers/show.xml.haml
@@ -1,7 +1,9 @@
%driver{ :href => driver_url(@name), :id => @name }
%name<
= @driver[:name]
- - driver_provider(@driver).each do |prov, details|
- %provider{ :id => prov }
- - details.each do |kind, url|
- %entrypoint{ :kind => kind }<=cdata(url)
+ - unless driver_provider(@driver).empty?
+ %providers
+ - driver_provider(@driver).each do |prov, details|
+ %provider{ :id => prov }
+ - details.each do |kind, url|
+ %entrypoint{ :kind => kind }<=cdata(url)
--
1.7.4.1