On Aug 31, 2012, at 9:32 PM, [email protected] wrote: ACK to serie, but please fix the tests before push:
http://tracker.deltacloud.org/build/39/build Also in future we should consider using Rabbit subcollections for things like 'operation :disks'. It would be uber-cool if we can do things like: collection :machines do subcollection :disks end and Rabbit then find that collection and 'mount' it into the '/machine/:id/disks' automagically. -- Michal > From: marios <[email protected]> > > > Signed-off-by: marios <[email protected]> > --- > server/lib/cimi/models/machine_collection.rb | 11 +++++++---- > .../cimi/models/machine_configuration_collection.rb | 10 ++++++---- > server/lib/cimi/models/machine_image_collection.rb | 10 ++++++---- > server/lib/cimi/models/machine_template_collection.rb | 10 ++++++---- > server/lib/cimi/models/network_collection.rb | 11 ++++++----- > server/lib/cimi/models/schema.rb | 18 ++++++++++++++++++ > server/lib/cimi/models/volume_collection.rb | 10 ++++++---- > .../lib/cimi/models/volume_configuration_collection.rb | 10 ++++++---- > server/lib/cimi/models/volume_image_collection.rb | 10 ++++++---- > server/lib/cimi/models/volume_template_collection.rb | 10 ++++++---- > 10 files changed, 73 insertions(+), 37 deletions(-) > > diff --git a/server/lib/cimi/models/machine_collection.rb > b/server/lib/cimi/models/machine_collection.rb > index 9154aa9..27c721d 100644 > --- a/server/lib/cimi/models/machine_collection.rb > +++ b/server/lib/cimi/models/machine_collection.rb > @@ -17,17 +17,20 @@ class CIMI::Model::MachineCollection < CIMI::Model::Base > > act_as_root_entity :machine > > - array :machines do > - scalar :href > - end > + text :count > + > + #add machines array: > + self.schema.add_collection_member_array(CIMI::Model::Machine) > > def self.default(context) > + machines = CIMI::Model::Machine.all(context) > self.new( > :id => context.machines_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} MachineCollection", > - :machines => CIMI::Model::Machine.all_uri(context) > + :count => machines.size, > + :machines => machines > ) > end > > diff --git a/server/lib/cimi/models/machine_configuration_collection.rb > b/server/lib/cimi/models/machine_configuration_collection.rb > index 6d7ebad..e75bbb4 100644 > --- a/server/lib/cimi/models/machine_configuration_collection.rb > +++ b/server/lib/cimi/models/machine_configuration_collection.rb > @@ -17,17 +17,19 @@ class CIMI::Model::MachineConfigurationCollection < > CIMI::Model::Base > > act_as_root_entity :machine_configuration > > - array :machine_configurations do > - scalar :href > - end > + text :count > + > + self.schema.add_collection_member_array(CIMI::Model::MachineConfiguration) > > def self.default(context) > + machine_configurations = CIMI::Model::MachineConfiguration.all(context) > self.new( > :id => context.machine_configurations_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} > MachineConfigurationCollection", > - :machine_configurations => > CIMI::Model::MachineConfiguration.all_uri(context) > + :count => machine_configurations.count, > + :machine_configurations => machine_configurations > ) > end > > diff --git a/server/lib/cimi/models/machine_image_collection.rb > b/server/lib/cimi/models/machine_image_collection.rb > index 70bdc7b..703e515 100644 > --- a/server/lib/cimi/models/machine_image_collection.rb > +++ b/server/lib/cimi/models/machine_image_collection.rb > @@ -17,17 +17,19 @@ class CIMI::Model::MachineImageCollection < > CIMI::Model::Base > > act_as_root_entity :machine_image > > - array :machine_images do > - scalar :href > - end > + text :count > + > + self.schema.add_collection_member_array(CIMI::Model::MachineImage) > > def self.default(context) > + machine_images = CIMI::Model::MachineImage.all(context) > self.new( > :id => context.machine_images_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} > MachineImageCollection", > - :machine_images => CIMI::Model::MachineImage.all_uri(context) > + :count => machine_images.count, > + :machine_images => machine_images > ) > end > > diff --git a/server/lib/cimi/models/machine_template_collection.rb > b/server/lib/cimi/models/machine_template_collection.rb > index d2a3f23..bef9aaf 100644 > --- a/server/lib/cimi/models/machine_template_collection.rb > +++ b/server/lib/cimi/models/machine_template_collection.rb > @@ -17,17 +17,19 @@ class CIMI::Model::MachineTemplateCollection < > CIMI::Model::Base > > act_as_root_entity :machine_template > > - array :machine_templates do > - scalar :href > - end > + text :count > + > + self.schema.add_collection_member_array(CIMI::Model::MachineTemplate) > > def self.default(context) > + machine_templates = CIMI::Model::MachineTemplate.all(context) > self.new( > :id => context.machine_template_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} > MachineTemplateCollection", > - :machine_templates => CIMI::Model::MachineTemplate.all_uri(context) > + :count => machine_templates.size, > + :machine_templates => machine_templates > ) > end > > diff --git a/server/lib/cimi/models/network_collection.rb > b/server/lib/cimi/models/network_collection.rb > index d76a3dd..c17c3f7 100644 > --- a/server/lib/cimi/models/network_collection.rb > +++ b/server/lib/cimi/models/network_collection.rb > @@ -12,22 +12,23 @@ > # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the > # License for the specific language governing permissions and limitations > # under the License. > - > class CIMI::Model::NetworkCollection < CIMI::Model::Base > > act_as_root_entity :network > + text :count > > - array :networks do > - scalar :href > - end > +#add networks Array: > + self.schema.add_collection_member_array(CIMI::Model::Network) > > def self.default(context) > + networks = CIMI::Model::Network.all(context) > self.new( > :id => context.networks_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} NetworkCollection", > - :networks => CIMI::Model::Network.all(context).map { |c| { :href => > c.id } } > + :count => networks.size, > + :networks => networks > ) > end > > diff --git a/server/lib/cimi/models/schema.rb > b/server/lib/cimi/models/schema.rb > index 57a190d..088e111 100644 > --- a/server/lib/cimi/models/schema.rb > +++ b/server/lib/cimi/models/schema.rb > @@ -81,6 +81,9 @@ class CIMI::Model::Schema > end > > class Struct < Attribute > + > + attr_accessor :schema > + > def initialize(name, opts, &block) > content = opts[:content] > super(name, opts) > @@ -146,6 +149,9 @@ class CIMI::Model::Schema > end > > class Array < Attribute > + > + attr_accessor :struct > + > # For an array :funThings, we collect all <funThing/> elements (XmlSimple > # actually does the collecting) > def initialize(name, opts = {}, &block) > @@ -208,6 +214,9 @@ class CIMI::Model::Schema > # > # The actual Schema class > # > + > + attr_accessor :attributes > + > def initialize > @attributes = [] > end > @@ -230,6 +239,15 @@ class CIMI::Model::Schema > xml > end > > + #For MachineCollection, copy over the schema of Machine to hold > + #each member of the collection - avoid duplicating the schemas > + def add_collection_member_array(model) > + member_symbol = model.name.split("::").last.underscore.pluralize.to_sym > + members = CIMI::Model::Schema::Array.new(member_symbol) > + members.struct.schema.attributes = model.schema.attributes > + self.attributes << members > + end > + > def to_json(model, json = {}) > @attributes.freeze > @attributes.each { |attr| attr.to_json(model, json) } > diff --git a/server/lib/cimi/models/volume_collection.rb > b/server/lib/cimi/models/volume_collection.rb > index 1f4152e..6bec78f 100644 > --- a/server/lib/cimi/models/volume_collection.rb > +++ b/server/lib/cimi/models/volume_collection.rb > @@ -17,17 +17,19 @@ class CIMI::Model::VolumeCollection < CIMI::Model::Base > > act_as_root_entity :volume > > - array :volumes do > - scalar :href > - end > + text :count > + > + self.schema.add_collection_member_array(CIMI::Model::Volume) > > def self.default(context) > + volumes = CIMI::Model::Volume.all(context) > self.new( > :id => context.volumes_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} VolumeCollection", > - :volumes => CIMI::Model::Volume.all_uri(context) > + :count => volumes.count, > + :volumes => volumes > ) > end > > diff --git a/server/lib/cimi/models/volume_configuration_collection.rb > b/server/lib/cimi/models/volume_configuration_collection.rb > index 2120ae6..8800e35 100644 > --- a/server/lib/cimi/models/volume_configuration_collection.rb > +++ b/server/lib/cimi/models/volume_configuration_collection.rb > @@ -17,17 +17,19 @@ class CIMI::Model::VolumeConfigurationCollection < > CIMI::Model::Base > > act_as_root_entity :volume_configuration > > - array :volume_configurations do > - scalar :href > - end > + text :count > + > + self.schema.add_collection_member_array(CIMI::Model::VolumeConfiguration) > > def self.default(context) > + volume_configurations = CIMI::Model::VolumeConfiguration.all(context) > self.new( > :id => context.volume_configurations_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} > VolumeConfigurationCollection", > - :volume_configurations => > CIMI::Model::VolumeConfiguration.all_uri(context) > + :count => volume_configurations.size, > + :volume_configurations => volume_configurations > ) > end > > diff --git a/server/lib/cimi/models/volume_image_collection.rb > b/server/lib/cimi/models/volume_image_collection.rb > index f3da877..78881d5 100644 > --- a/server/lib/cimi/models/volume_image_collection.rb > +++ b/server/lib/cimi/models/volume_image_collection.rb > @@ -17,17 +17,19 @@ class CIMI::Model::VolumeImageCollection < > CIMI::Model::Base > > act_as_root_entity :volume_image > > - array :volume_images do > - scalar :href > - end > + text :count > + > + self.schema.add_collection_member_array(CIMI::Model::VolumeImage) > > def self.default(context) > + volume_images = CIMI::Model::VolumeImage.all(context) > self.new( > :id => context.volume_images_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} > VolumeImageCollection", > - :volume_images => CIMI::Model::VolumeImage.all_uri(context) > + :count => volume_images.count, > + :volume_images => volume_images > ) > end > > diff --git a/server/lib/cimi/models/volume_template_collection.rb > b/server/lib/cimi/models/volume_template_collection.rb > index f53547c..3f2ae02 100644 > --- a/server/lib/cimi/models/volume_template_collection.rb > +++ b/server/lib/cimi/models/volume_template_collection.rb > @@ -17,17 +17,19 @@ class CIMI::Model::VolumeTemplateCollection < > CIMI::Model::Base > > act_as_root_entity :volume_template > > - array :volume_templates do > - scalar :href > - end > + text :count > + > + self.schema.add_collection_member_array(CIMI::Model::VolumeTemplate) > > def self.default(context) > + volume_templates = CIMI::Model::VolumeTemplate.all(context) > self.new( > :id => context.volume_template_url, > :name => 'default', > :created => Time.now, > :description => "#{context.driver.name.capitalize} > VolumeTemplateCollection", > - :volume_templates => CIMI::Model::VolumeTemplate.all_uri(context) > + :count => volume_templates.size, > + :volume_templates => volume_templates > ) > end > > -- > 1.7.11.4 > Michal Fojtik http://deltacloud.org [email protected]
