diff --git a/lib/couchrest/model/base.rb b/lib/couchrest/model/base.rb index bff4dd83..9d97979c 100644 --- a/lib/couchrest/model/base.rb +++ b/lib/couchrest/model/base.rb @@ -31,6 +31,7 @@ def self.inherited(subklass) def self.inherited(subklass) super subklass.properties = self.properties.dup + subklass.properties_by_name = self.properties_by_name.dup # This is nasty: subklass._validators = self._validators.dup end diff --git a/spec/unit/base_spec.rb b/spec/unit/base_spec.rb index 10119b5d..571a40b3 100644 --- a/spec/unit/base_spec.rb +++ b/spec/unit/base_spec.rb @@ -564,4 +564,19 @@ def set_name; self.name = "foobar"; end end end + describe "model inheritance" do + context "multiple models with same base class" do + it "should not overwrite property definitions of the same name in different models" do + class MyBase < CouchRest::Model::Base; end + class MyModelA < MyBase + property :prop, Time + end + class MyModelB < MyBase + property :prop, Integer + end + MyModelA.new(:prop => Time.now).prop.class.should eq Time + end + end + end + end