diff --git a/lib/dm-core.rb b/lib/dm-core.rb index 369579d1..59117a33 100644 --- a/lib/dm-core.rb +++ b/lib/dm-core.rb @@ -318,6 +318,10 @@ def self.finalize_model(model) repository_name = model.repository_name relationships = model.relationships(repository_name).values + if name.to_s.strip.empty? + raise IncompleteModelError, "#{model.inspect} must have a name" + end + if model.properties(repository_name).empty? && !relationships.any? { |relationship| relationship.kind_of?(Associations::ManyToOne::Relationship) } raise IncompleteModelError, "#{name} must have at least one property or many to one relationship to be valid" diff --git a/spec/public/finalize_spec.rb b/spec/public/finalize_spec.rb index 7e531092..651f73f6 100644 --- a/spec/public/finalize_spec.rb +++ b/spec/public/finalize_spec.rb @@ -14,6 +14,15 @@ class ::ValidObject Object.send(:remove_const, :ValidObject) end + it 'should raise on an anonymous model' do + model = Class.new do + include DataMapper::Resource + property :id, Integer, :key => true + end + method(:subject).should raise_error(DataMapper::IncompleteModelError, "#{model.inspect} must have a name") + DataMapper::Model.descendants.delete(model) + end + it 'should raise on an empty model' do class ::EmptyObject include DataMapper::Resource