---
server/lib/deltacloud/helpers/driver_helper.rb | 16 ++++++++++++++++
server/lib/deltacloud/models/base_model.rb | 24 ++++++++++++++++++++++++
server/server.rb | 20 +++++++++++++++++---
3 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/server/lib/deltacloud/helpers/driver_helper.rb
b/server/lib/deltacloud/helpers/driver_helper.rb
index 352253f..140f778 100644
--- a/server/lib/deltacloud/helpers/driver_helper.rb
+++ b/server/lib/deltacloud/helpers/driver_helper.rb
@@ -26,4 +26,20 @@ module DriverHelper
Converters::XMLConverter.new( self, type ).convert(obj)
end
end
+
+ def convert_to_json(type, obj)
+ if ( [ :flavor, :account, :image, :realm, :instance, :storage_volume,
:storage_snapshot ].include?( type ) )
+ if Array.eql?(obj.class)
+ data = obj.collect do |o|
+ o.to_hash.merge({ :href => self.send(:"#{type}_url", o.id ) })
+ end
+ type = type.to_s.pluralize
+ else
+ data = obj.to_hash
+ data.merge!({ :href => self.send(:"#{type}_url", data[:id]) })
+ end
+ return { :"#{type}" => data }.to_json
+ end
+ end
+
end
diff --git a/server/lib/deltacloud/models/base_model.rb
b/server/lib/deltacloud/models/base_model.rb
index c6d5251..1f42d7c 100644
--- a/server/lib/deltacloud/models/base_model.rb
+++ b/server/lib/deltacloud/models/base_model.rb
@@ -27,8 +27,32 @@ class BaseModel
end
end
+ def self.attr_accessor(*vars)
+ @attributes ||= [:id]
+ @attributes.concat vars
+ super
+ end
+
+ def self.attributes
+ @attributes
+ end
+
+ def attributes
+ self.class.attributes
+ end
+
def id
@id
end
+ def to_hash
+ out = {}
+ self.attributes.each { |attribute| out.merge!({ attribute =>
self.send(:"#{attribute}") } ) }
+ out
+ end
+
+ def to_json
+ self.to_hash.to_json
+ end
+
end
diff --git a/server/server.rb b/server/server.rb
index 67590d0..f807a9b 100644
--- a/server/server.rb
+++ b/server/server.rb
@@ -1,5 +1,6 @@
require 'rubygems'
require 'deltacloud'
+require 'json'
require 'sinatra'
require 'sinatra/respond_to'
require 'erb'
@@ -13,6 +14,8 @@ require 'sinatra/lazy_auth'
require 'deltacloud/validation'
require 'deltacloud/helpers'
+require 'ap'
+
configure do
set :raise_errors => false
end
@@ -47,7 +50,8 @@ def filter_all(model)
@elements = driver.send(model.to_sym, credentials, filter)
instance_variable_set(:"@#{model}", @elements)
respond_to do |format|
- format.xml { return convert_to_xml(singular, @elements) }
+ format.xml { convert_to_xml(singular, @elements) }
+ format.json { convert_to_json(singular, @elements) }
format.html { haml :"#{model}/index" }
end
end
@@ -56,7 +60,8 @@ def show(model)
@element = driver.send(model, credentials, { :id => params[:id]} )
instance_variable_set("@#{model}", @element)
respond_to do |format|
- format.xml { return convert_to_xml(model, @element) }
+ format.xml { convert_to_xml(model, @element) }
+ format.json { convert_to_json(model, @element) }
format.html { haml :"#{model.to_s.pluralize}/show" }
end
end
@@ -93,6 +98,14 @@ get '/api\/?' do
@version = 1.0
respond_to do |format|
format.xml { haml :"api/show" }
+ format.json do
+ { :api => {
+ :version => @version,
+ :driver => DRIVER,
+ :links => entry_points.collect { |l| { :rel => l[0], :href =>
l[1]} }
+ }
+ }.to_json
+ end
format.html { haml :"api/show" }
end
end
@@ -212,7 +225,8 @@ end
def instance_action(name)
@instance = driver.send(:"#{name}_instance", credentials, params[:id])
respond_to do |format|
- format.xml { return convert_to_xml(:instance, @instance) }
+ format.xml { convert_to_xml(:instance, @instance) }
+ format.json {convert_to_json(:instance, @instance) }
format.html { haml :"instances/show" }
end
end
--
1.6.6.2
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel