Sha256: 0b044fd758acae433726c84071475257933ebf753c9dc06865448728fd840143

Contents?: true

Size: 1.83 KB

Versions: 3

Compression:

Stored size: 1.83 KB

Contents

module FriendlyId
  module AcktiveRecord

    class Configuration < FriendlyId::Configuration

      # The column used to cache the friendly_id string. If no column is specified,
      # FriendlyId will look for a column named +cached_slug+ and use it automatically
      # if it exists. If for some reason you have a column named +cached_slug+
      # but don't want FriendlyId to modify it, pass the option
      # +:cache_column => false+ to {FriendlyId::AcktiveRecord#has_friendly_id has_friendly_id}.
      attr_accessor :cache_column

      # An array of classes for which the configured class serves as a
      # FriendlyId scope.
      attr_reader :child_scopes

      attr_reader :custom_cache_column

      def cache_column
        return @cache_column if defined?(@cache_column)
        @cache_column = autodiscover_cache_column
      end

      def cache_column?
        !! cache_column
      end

      def cache_column=(cache_column)
        @cache_column = cache_column
        @custom_cache_column = cache_column
      end

      def cache_finders?
        !! cache_column
      end

      def child_scopes
        @child_scopes ||= associated_friendly_classes.select { |klass| klass.friendly_id_config.scopes_over?(configured_class) }
      end

      def custom_cache_column?
        !! custom_cache_column
      end

      def scope_for(record)
        scope? ? record.send(scope).to_param : nil
      end

      def scopes_over?(klass)
        scope? && scope == klass.to_s.underscore.to_sym
      end

      private

      def autodiscover_cache_column
        :cached_slug if configured_class.columns.any? { |column| column.name == 'cached_slug' }
      end

      def associated_friendly_classes
        configured_class.reflect_on_all_associations.select { |assoc|
          assoc.klass.uses_friendly_id? }.map(&:klass)
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
friendly_id-3.0.0.beta3 lib/friendly_id/acktive_record/configuration.rb
friendly_id-3.0.0.beta2 lib/friendly_id/acktive_record/configuration.rb
friendly_id-3.0.0.beta1 lib/friendly_id/acktive_record/configuration.rb