module Slugable::ActsAsSlugable

Public Instance Methods

acts_as_slugable(options = {}) click to toggle source
# File lib/acts_as_slugable/acts_as_slugable_5.rb, line 6
      def acts_as_slugable(options = {})
        configuration = { source_column: 'name', slug_column: 'url_slug', scope: nil }
        configuration.update(options) if options.is_a?(Hash)

        configuration[:scope] = "#{configuration[:scope]}_id".intern if configuration[:scope].is_a?(Symbol) && configuration[:scope].to_s !~/_id$/

        if configuration[:scope].is_a?(Symbol)
          scope_condition_method = %(
            def slug_scope_condition
              if #{configuration[:scope].to_s}.nil?
                "#{configuration[:scope].to_s} IS NULL"
              else
                "#{configuration[:scope].to_s} = \#{#{configuration[:scope].to_s}}"
              end
            end
          )
        elsif configuration[:scope].nil?
          scope_condition_method = "def slug_scope_condition() \"1 = 1\" end"
        else
          scope_condition_method = "def slug_scope_condition() \"#{configuration[:scope]}\" end"
        end

        class_eval <<-EOV
          #{scope_condition_method}
        EOV

        define_method :acts_as_slugable_class do
          self.class
        end

        define_method :source_column do
          "#{configuration[:source_column]}"
        end

        define_method :slug_column do
          "#{configuration[:slug_column]}"
        end

        include Slugable::ActsAsSlugable::LocalInstanceMethods

        after_validation :create_slug
      end