Sha256: 8bbcb7590cf7bf603e1a3f2318d183c59374c0bf915169fdc4d4c0fc8f993c7a

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

require "active_record"
require "encoded_id"

module EncodedId
  module Rails
    module Model
      def self.included(base)
        base.extend(EncoderMethods)
        base.extend(FinderMethods)
        base.extend(QueryMethods)
      end

      def encoded_id
        return unless id
        return @encoded_id if defined?(@encoded_id) && !id_changed?
        @encoded_id = self.class.encode_encoded_id(id)
      end

      def slugged_encoded_id(with: :name_for_encoded_id_slug)
        return unless id
        return @slugged_encoded_id if defined?(@slugged_encoded_id) && !id_changed?
        @slugged_encoded_id = EncodedId::Rails::SluggedId.new(
          self,
          slug_method: with,
          id_method: :encoded_id,
          separator: EncodedId::Rails.configuration.slugged_id_separator
        ).slugged_id
      end

      # By default slug created from class name, but can be overridden
      def name_for_encoded_id_slug
        class_name = self.class.name
        raise StandardError, "Class must have a `name`, cannot create a slug" if !class_name || class_name.blank?
        class_name.underscore
      end

      # When duplicating an ActiveRecord object, we want to reset the memoized encoded_id
      def dup
        super.tap do |new_record|
          new_record.instance_variable_set(:@encoded_id, nil)
          new_record.instance_variable_set(:@slugged_encoded_id, nil)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
encoded_id-rails-0.6.1 lib/encoded_id/rails/model.rb