module SimpleSlug::ModelAddition::SingletonMethods

Public Instance Methods

simple_slug(*args) click to toggle source
# File lib/simple_slug/model_addition.rb, line 8
def simple_slug(*args)
  class_attribute :simple_slug_options, :simple_slug_adapter, instance_writer: false
  options = args.extract_options!
  self.simple_slug_options = options.reverse_merge(
      slug_column: SimpleSlug.slug_column,
      slug_method: args,
      slug_regexp: SimpleSlug.slug_regexp,
      min_length: SimpleSlug.min_length,
      max_length: SimpleSlug.max_length,
      callback_type: SimpleSlug.callback_type,
      validation: SimpleSlug.validation
  )
  self.simple_slug_adapter = SimpleSlug::Adapter.new(self)

  include InstanceMethods
  extend ClassMethods

  send(simple_slug_options[:callback_type], :simple_slug_generate, if: :should_generate_new_slug?) if simple_slug_options[:callback_type]

  if simple_slug_options[:validation]
    validates *simple_slug_adapter.column_names,
              presence: true,
              uniqueness: {case_sensitive: true},
              exclusion: {in: SimpleSlug.excludes},
              format: {with: simple_slug_options[:slug_regexp]},
              length: {minimum: simple_slug_options[:min_length], maximum: simple_slug_options[:max_length]}.reject{|_, v| v.blank? }
  end

  if simple_slug_options[:history]
    after_save :simple_slug_reset, :simple_slug_save_history
    after_destroy :simple_slug_cleanup_history
    include InstanceHistoryMethods
  end
end