Commit 498b0dadf4855e8547d25450c4f288f19e854186
1 parent
6edafc75
Exists in
master
and in
18 other branches
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 | ... | ... |