From: David Lutterkort <[email protected]>
---
server/lib/cimi/models/resource.rb | 2 +-
server/lib/cimi/models/schema.rb | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/server/lib/cimi/models/resource.rb
b/server/lib/cimi/models/resource.rb
index 0586538..3271c5e 100644
--- a/server/lib/cimi/models/resource.rb
+++ b/server/lib/cimi/models/resource.rb
@@ -56,7 +56,7 @@ module CIMI
def clone_base_schema
@schema_duped = true
- @schema = Marshal::load(Marshal.dump(superclass.base_schema))
+ @schema = superclass.base_schema.deep_clone
end
def base_schema_cloned?
diff --git a/server/lib/cimi/models/schema.rb b/server/lib/cimi/models/schema.rb
index 4026c69..298075b 100644
--- a/server/lib/cimi/models/schema.rb
+++ b/server/lib/cimi/models/schema.rb
@@ -91,6 +91,9 @@ class CIMI::Model::Schema
def initialize(name, opts, &block)
content = opts[:content]
super(name, opts)
+ if opts[:class]
+ opts[:schema] = opts[:class].schema
+ end
if opts[:schema]
if block_given?
raise "Cannot provide :schema option and a block"
@@ -280,6 +283,10 @@ class CIMI::Model::Schema
@attributes = []
end
+ def deep_clone
+ Marshal::load(Marshal.dump(self))
+ end
+
def collections
@attributes.select { |a| a.is_a?(Collection) }
end
--
1.8.1