Sha256: 19de3c45c37cb4e66eccfa612b266caf475bb71e8cc9cd16a9efb5b9b8ebefe0

Contents?: true

Size: 964 Bytes

Versions: 3

Compression:

Stored size: 964 Bytes

Contents

module HumanUrls
  module Sluggable
    extend ActiveSupport::Concern
    include ActiveModel::Dirty

    included do
      before_validation :prepare_slug
    end

    module ClassMethods
      def sluggify(slug_param=:slug, generated_from: false)
        validates_presence_of slug_param
        validates_uniqueness_of slug_param, case_sensitive: false
        validates_length_of slug_param, maximum: 244

        define_method(:to_param) do
          send(slug_param)
        end

        define_method(:prepare_slug) do
          # If these conditions generate slug from auto generated field
          if generated_from.present? && self.send("#{slug_param}").blank?
            # slug equals autogenerated field
            self.send("#{slug_param}=", send(generated_from))
          end
          self.send("#{slug_param}=", send(slug_param).to_s)
          self.send("#{slug_param}=", send(slug_param).parameterize)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
human_urls-0.1.7.pre.alpha.0 lib/human_urls/sluggable.rb
human_urls-0.1.6.pre.alpha.0 lib/human_urls/sluggable.rb
human_urls-0.1.2 lib/human_urls/sluggable.rb