module Sequel::Plugins::Slugging::InstanceMethods
Private Instance Methods
acceptable_slug?(slug)
click to toggle source
# File lib/sequel/plugins/slugging.rb, line 118 def acceptable_slug?(slug) return false unless acceptable_string?(slug) reserved = Sequel::Plugins::Slugging.reserved_words return false if reserved && reserved.include?(slug) ds = if history_table = self.class.slugging_opts[:history] ds = db[history_table].where(slug: slug, sluggable_type: self.class.to_s) # If the record already exists, don't consider its own slug to be 'taken'. ds = ds.exclude(sluggable_id: pk) if pk ds else ds = self.class.dataset.where(slug: slug) # If the record already exists, don't consider its own slug to be 'taken'. ds = ds.exclude(self.class.primary_key => pk) if pk ds end ds.empty? end
acceptable_string?(string)
click to toggle source
# File lib/sequel/plugins/slugging.rb, line 139 def acceptable_string?(string) string && string != ''.freeze end
before_create()
click to toggle source
Calls superclass method
# File lib/sequel/plugins/slugging.rb, line 69 def before_create set_slug super end
before_update()
click to toggle source
Calls superclass method
# File lib/sequel/plugins/slugging.rb, line 74 def before_update if p = self.class.slugging_opts[:regenerate_slug] set_slug if instance_exec(&p) end super end
find_available_slug()
click to toggle source
# File lib/sequel/plugins/slugging.rb, line 92 def find_available_slug candidates = [] Array(self.class.slugging_opts[:source]).each do |method_set| candidate = Array(method_set).map{|meth| get_slug_component(meth)}.join(' ') candidate = Sequel::Plugins::Slugging.slugifier.call(candidate) candidate = candidate.slice(0...Sequel::Plugins::Slugging.maximum_length) return candidate if acceptable_slug?(candidate) candidates << candidate end candidates.each do |candidate| return candidate << '-'.freeze << SecureRandom.uuid if acceptable_string?(candidate) end SecureRandom.uuid end
get_slug_component(method)
click to toggle source
# File lib/sequel/plugins/slugging.rb, line 111 def get_slug_component(method) case component = send(method) when NilClass, String then component else raise Error, "unexpected slug component: #{component.inspect}" end end
set_slug()
click to toggle source
# File lib/sequel/plugins/slugging.rb, line 82 def set_slug self.slug = find_available_slug if table = self.class.slugging_opts[:history] after_save_hook do db[table].insert(slug: slug, sluggable_id: pk, sluggable_type: self.class.to_s, created_at: Time.now) end end end