module Slugable::ActsAsSlugable::ClassMethods

Public Instance Methods

acts_as_slugable(options = {}) click to toggle source
# File lib/acts_as_slugable/acts_as_slugable_4.rb, line 10
      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
          include Slugable::ActsAsSlugable::LocalInstanceMethods

          def acts_as_slugable_class
            ::#{self.name}
          end

          def source_column
            "#{configuration[:source_column]}"
          end

          def slug_column
            "#{configuration[:slug_column]}"
          end

          #{scope_condition_method}
        EOV

        include Slugable::ActsAsSlugable::LocalInstanceMethods
      end