class FriendlyId::Candidates
This class provides the slug candidate functionality. @see FriendlyId::Slugged
Public Class Methods
new(object, *array)
click to toggle source
# File lib/friendly_id/candidates.rb, line 11 def initialize(object, *array) @object = object @raw_candidates = to_candidate_array(object, array.flatten(1)) end
Public Instance Methods
each(*args) { |candidate| ... }
click to toggle source
# File lib/friendly_id/candidates.rb, line 16 def each(*args, &block) return candidates unless block_given? candidates.each{ |candidate| yield candidate } end
Private Instance Methods
candidates()
click to toggle source
# File lib/friendly_id/candidates.rb, line 23 def candidates @candidates ||= begin candidates = normalize(@raw_candidates) filter(candidates) end end
filter(candidates)
click to toggle source
# File lib/friendly_id/candidates.rb, line 36 def filter(candidates) unless candidates.all? {|x| reserved?(x)} candidates.reject! {|x| reserved?(x)} end candidates end
normalize(candidates)
click to toggle source
# File lib/friendly_id/candidates.rb, line 30 def normalize(candidates) candidates.map do |candidate| @object.normalize_friendly_id(candidate.map(&:call).join(' ')) end.select {|x| wanted?(x)} end
reserved?(slug)
click to toggle source
# File lib/friendly_id/candidates.rb, line 66 def reserved?(slug) config = @object.friendly_id_config return false unless config.uses? ::FriendlyId::Reserved return false unless config.reserved_words config.reserved_words.include?(slug) end
to_candidate_array(object, array)
click to toggle source
# File lib/friendly_id/candidates.rb, line 43 def to_candidate_array(object, array) array.map do |candidate| case candidate when String [->{candidate}] when Array to_candidate_array(object, candidate).flatten when Symbol [object.method(candidate)] else if candidate.respond_to?(:call) [candidate] else [->{candidate.to_s}] end end end end
wanted?(slug)
click to toggle source
# File lib/friendly_id/candidates.rb, line 62 def wanted?(slug) slug.present? end