Skip to content

Instantly share code, notes, and snippets.

@agenteo
Created December 14, 2010 00:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save agenteo/739819 to your computer and use it in GitHub Desktop.
Save agenteo/739819 to your computer and use it in GitHub Desktop.
def generate_display_name
@display_name_candidate = generate_display_name_candidate
if Member.find_by_display_name(@display_name_candidate)
self.display_name = find_next_display_name_available
else
self.display_name = @display_name_candidate
end
return true
end
private
def generate_display_name_candidate
candidate = self.email.gsub(/@.*/, '').gsub(/\W/, '_')
if candidate.length >= MIN_DISPLAY_NAME
candidate
else
match_min_display_name(candidate)
end
end
def match_min_display_name(candidate)
chars_to_min_length = MIN_DISPLAY_NAME - candidate.length
candidate + ('_' * chars_to_min_length)
end
def find_next_display_name_available
member = find_last_member_with_display_name_candidate
if member
appended_number = member.display_name.match(/.*-(\d+)/)[1].to_i
@display_name_candidate + "-#{appended_number + 1}"
else
@display_name_candidate + '-1'
end
end
def find_last_member_with_display_name_candidate
Member.find(:last, :conditions => "display_name REGEXP '#{@display_name_candidate}-[[:digit:]]+'")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment