class Sluggable::Rails::Slug
Attributes
definition[RW]
offset[R]
record[RW]
Public Class Methods
new(definition, record)
click to toggle source
# File lib/sluggable/rails/slug.rb, line 5 def initialize(definition, record) self.definition = definition self.record = record end
Public Instance Methods
base()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 29 def base String.try_convert(record.send(definition.origin)).to_s.parameterize separator: definition.separator end
changed?()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 41 def changed? record.send "#{definition.origin}_changed?" end
make()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 19 def make if makeable? @offset = 0 generate until present? && unique? true else false end end
makeable?()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 33 def makeable? definition.is_a?(Sluggable::Rails::Definition) && record.is_a?(ActiveRecord::Base) end
needs_an_update?()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 49 def needs_an_update? undefined? || changed? end
scope()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 53 def scope definition.scope.map{ |attribute| [attribute, record.send(attribute)] }.to_h end
shifted?()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 37 def shifted? !offset.zero? end
undefined?()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 45 def undefined? record.send(definition.attribute).blank? end
update()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 10 def update if make record.send "#{definition.attribute}=", self.to_s true else false end end
Protected Instance Methods
generate()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 59 def generate clear insert 0, base insert -1, (empty? ? '' : definition.separator) + offset.to_s if shifted? shift end
shift()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 66 def shift @offset += 1 end
unique?()
click to toggle source
# File lib/sluggable/rails/slug.rb, line 70 def unique? found = record.class.find_by({ definition.attribute => self.to_s }.merge(scope)) !found || found.id == record.id end