diff --git a/app/models/domain.rb b/app/models/domain.rb index f8f27a6..07286bf 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -50,12 +50,20 @@ class Domain < ActiveRecord::Base errors[:name] = "cannot be a TLD or a reserved domain" if Tld.include?(name) # if parent domain is on our system, the user must own it - segments = name.split('.') - if segments.size >= 2 - parent = segments[1..-1].join('.') - parent_domain = Domain.find_by_name(parent) - if parent_domain.present? && parent_domain.user_id != user_id - errors[:name] = "issue, the parent domain `#{parent}` is registered to another user" + if parent_domain.present? && parent_domain.user_id != user_id + errors[:name] = "issue, the parent domain `#{parent_domain.name}` is registered to another user" + end + end + + def parent_domain + @parent_domain ||= {} + @parent_domain[name] ||= begin + segments = name.split('.') + if segments.size >= 2 + domain_name = segments[1..-1].join('.') + Domain.find_by_name(domain_name) + else + nil end end end diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index 2e4d4b3..ef30762 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -54,7 +54,8 @@ describe Domain do domain.should be_valid # stub a parent domain on another user account - Domain.stub_chain('find_by_name.user_id').and_return(domain.user_id + 1) + mock_domain = mock(:user_id => domain.user_id + 1, :name => 'x') + Domain.stub_chain('find_by_name').and_return(mock_domain) domain.should have(1).errors_on(:name) end