module Decidim::Nicknamizable
This concern contains the logic related to nicknames.
Public Instance Methods
disambiguate(name, scope)
click to toggle source
# File lib/decidim/nicknamizable.rb, line 51 def disambiguate(name, scope) candidate = name 2.step do |n| return candidate unless exists?(scope.merge(nickname: candidate)) candidate = numbered_variation_of(name, n) end end
nickname_length_range()
click to toggle source
# File lib/decidim/nicknamizable.rb, line 47 def nickname_length_range (0...nickname_max_length) end
nickname_max_length()
click to toggle source
Maximum allowed nickname length
# File lib/decidim/nicknamizable.rb, line 18 def nickname_max_length 20 end
nicknamize(name, scope = {})
click to toggle source
Converts any string into a valid nickname
-
Parameterizes it so it's valid as a URL.
-
Trims length so it fits validation constraints.
-
Disambiguates it so it's unique.
name - the String to nicknamize scope - a Hash with extra values to scope the nickname to
Example to nicknamize a user name, scoped to the organization:
nicknamize(user_name, organization: current_organization)
# File lib/decidim/nicknamizable.rb, line 36 def nicknamize(name, scope = {}) return unless name disambiguate( name.parameterize(separator: "_")[nickname_length_range], scope ) end
numbered_variation_of(name, number)
click to toggle source
# File lib/decidim/nicknamizable.rb, line 61 def numbered_variation_of(name, number) appendix = "_#{number}" "#{name[0...(nickname_max_length - appendix.length)]}#{appendix}" end