On 03/28/2013 12:45 AM, di...@fast.au.fujitsu.com wrote:

ACK. I'll need to rebase the 'CIMI - more descriptibe schema errors' patch after this :-)

  -- Michal

From: David Lutterkort <lut...@redhat.com>

---
  server/lib/cimi/models/schema.rb | 28 ++++++++++++++++++++++------
  1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/server/lib/cimi/models/schema.rb b/server/lib/cimi/models/schema.rb
index 5a2049b..8dd309c 100644
--- a/server/lib/cimi/models/schema.rb
+++ b/server/lib/cimi/models/schema.rb
@@ -124,12 +124,12 @@ class CIMI::Model::Schema
      end

      def to_xml(model, xml)
-      conv = convert_to_xml(model[name])
+      conv = convert_to_xml(extract(model))
        xml[xml_name] = [conv] unless conv.empty?
      end

      def to_json(model, json)
-      conv = convert_to_json(model[name])
+      conv = convert_to_json(extract(model))
        json[json_name] = conv unless conv.empty?
      end

@@ -179,6 +179,14 @@ class CIMI::Model::Schema
          @struct_class ||= ::Struct.new(nil, *@schema.attribute_names)
        end
      end
+    def extract(model)
+      if model.respond_to?("[]")
+        model[name] || {}
+      else
+        {}
+      end
+    end
+
    end

    class Ref < CIMI::Model::Schema::Struct
@@ -268,13 +276,21 @@ class CIMI::Model::Schema
      end

      def to_xml(model, xml)
-      ary = (model[name] || {}).map { |k, v| { "key" => k, "content" => v } }
-      xml[xml_name] = ary unless ary.empty?
+      mapped = extract(model).map { |k, v| { "key" => k, "content" => v } }
+      xml[xml_name] = mapped unless mapped.empty?
      end

      def to_json(model, json)
-      if model[name] && ! model[name].empty?
-        json[json_name] = model[name]
+      h = extract(model)
+      json[json_name] = h unless h.empty?
+    end
+
+    private
+    def extract(model)
+      if model.respond_to?("[]")
+        model[name] || {}
+      else
+        {}
        end
      end
    end



--

Michal Fojtik <mfoj...@redhat.com>
Deltacloud API, CloudForms

Reply via email to