Commit 498b0dadf4855e8547d25450c4f288f19e854186

Authored by Victor Costa
1 parent 6edafc75

Refactor profile identifier validation to put the code in a single place

Showing 1 changed file with 12 additions and 5 deletions   Show diff stats
app/models/profile.rb
... ... @@ -317,16 +317,23 @@ class Profile < ActiveRecord::Base
317 317 @top_level_articles ||= Article.top_level_for(self)
318 318 end
319 319  
320   - def self.is_available?(identifier, environment)
321   - !(identifier =~ IDENTIFIER_FORMAT).nil? && !RESERVED_IDENTIFIERS.include?(identifier) && Profile.find(:first, :conditions => ['environment_id = ? and identifier = ?', environment.id, identifier]).nil?
  320 + def self.is_available?(identifier, environment, profile_id=nil)
  321 + return false unless identifier =~ IDENTIFIER_FORMAT && !RESERVED_IDENTIFIERS.include?(identifier)
  322 + return true if environment.nil?
  323 +
  324 + profiles = environment.profiles.where(:identifier => identifier)
  325 + profiles = profiles.where(['id != ?', profile_id]) if profile_id.present?
  326 + !profiles.exists?
322 327 end
323 328  
324 329 validates_presence_of :identifier, :name
325   - validates_format_of :identifier, :with => IDENTIFIER_FORMAT, :if => lambda { |profile| !profile.identifier.blank? }
326   - validates_exclusion_of :identifier, :in => RESERVED_IDENTIFIERS
327   - validates_uniqueness_of :identifier, :scope => :environment_id
328 330 validates_length_of :nickname, :maximum => 16, :allow_nil => true
329 331 validate :valid_template
  332 + validate :valid_identifier
  333 +
  334 + def valid_identifier
  335 + errors.add(:identifier, _('is not available.')) unless Profile.is_available?(identifier, environment, id)
  336 + end
330 337  
331 338 def valid_template
332 339 if template_id.present? && template && !template.is_template
... ...