Michal Fojtik wrote: > On 26/05/10 08:54 -0400, Scott Seago wrote: > >> Signed-off-by: Scott Seago <[email protected]> >> --- >> client/lib/dcloud/hardware_profile.rb | 41 >> ++++++++++++++++++++++++++++++++- >> 1 files changed, 40 insertions(+), 1 deletions(-) >> >> diff --git a/client/lib/dcloud/hardware_profile.rb >> b/client/lib/dcloud/hardware_profile.rb >> index d6c4aa0..02ee303 100644 >> --- a/client/lib/dcloud/hardware_profile.rb >> +++ b/client/lib/dcloud/hardware_profile.rb >> @@ -22,7 +22,33 @@ module DCloud >> class HardwareProfile < BaseModel >> >> class Property >> - attr_reader :name, :unit, :value >> + class Range >> + attr_reader :first, :last >> + def initialize(element) >> + if element >> + @first = element.attributes['first'] >> + @last = element.attributes['last'] >> + end >> + end >> + def present? >> + ! @first.nil? >> + end >> + end >> + class Enum >> + attr_reader :entries >> + def initialize(element) >> + @entries = [] >> + if element >> + element.get_elements( 'entry' ).each do |entry| >> + @entries << entry.attributes['value'] >> + end >> + end >> + end >> + def present? >> + ! @entries.empty? >> + end >> + end >> + attr_reader :name, :kind, :unit, :value, :range, :enum >> >> def initialize(xml, name) >> @name = name >> @@ -30,6 +56,9 @@ module DCloud >> if p >> @value = p.attributes['value'] >> @unit = p.attributes['unit'] >> + @kind = p.attributes['kind'] >> + @range = Range.new(p.get_elements('range')[0]) if >> @kind=='range' >> + @enum = Enum.new(p.get_elements('enum')[0]) if >> @kind=='enum' >> end >> end >> >> @@ -37,6 +66,7 @@ module DCloud >> ! @value.nil? >> end >> >> + # FIXME: how to range/enum/kind bits fit into this? > > You mean how we display range/enum as a String ? > I suggest: > > Range: "1..3" > Enum: "1,2,3,4,5" > Sure -- also how do we combine that with value. Currently we just show the name+unit -- i.e. "5 MB" Perhaps we could do something like this: "5 MB (valid range 1..10 MB)", "10 GB (valid values 10,20,30,40,50 GB)"
In any case that can be a separate patch since it's not a functional requirement which affects interaction with the API. > >> def to_s >> v = @value || "---" >> u = @unit || "" >> @@ -52,10 +82,18 @@ module DCloud >> end >> end >> >> + class IntegerProperty < Property >> + def initialize(xml, name) >> + super(xml, name) >> + @value = @value.to_i if @value >> + end >> + end >> + >> xml_tag_name :hardware_profile >> >> attribute :memory >> attribute :storage >> + attribute :cpu >> attribute :architecture >> >> def initialize(client, uri, xml=nil) >> @@ -67,6 +105,7 @@ module DCloud >> unless xml.nil? >> @memory = FloatProperty.new(xml, 'memory') >> @storage = FloatProperty.new(xml, 'storage') >> + @cpu = IntegerProperty.new(xml, 'cpu') >> @architecture = Property.new(xml, 'architecture') >> end >> end >> -- >> 1.6.2.5 > > This patch looks good for me. ACK+ > > -- Michal > I'll push this as-is. If you or lutter want to update the to_s method separately that would be fine. Scott _______________________________________________ deltacloud-devel mailing list [email protected] https://fedorahosted.org/mailman/listinfo/deltacloud-devel
