Sha256: 3900228d116d4ba9d416eb13a6fd49d38e2dfbb65263861358e74a733d751113

Contents?: true

Size: 1.64 KB

Versions: 48

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

module Spree
  module Core
    module Permalinks
      extend ActiveSupport::Concern

      included do
        class_attribute :permalink_options
      end

      module ClassMethods
        def make_permalink(options = {})
          options[:field] ||= :permalink
          self.permalink_options = options

          before_validation(on: :create) { save_permalink }
        end

        def find_by_param(value, *args)
          send("find_by_#{permalink_field}", value, *args)
        end

        def find_by_param!(value, *args)
          send("find_by_#{permalink_field}!", value, *args)
        end

        def permalink_field
          permalink_options[:field]
        end

        def permalink_prefix
          permalink_options[:prefix] || ""
        end

        def permalink_length
          permalink_options[:length] || 9
        end

        def permalink_order
          order = permalink_options[:order]
          "#{order} ASC," if order
        end
      end

      def generate_permalink
        "#{self.class.permalink_prefix}#{Array.new(self.class.permalink_length){ rand(9) }.join}"
      end

      def save_permalink(permalink_value = to_param)
        permalink_value ||= generate_permalink
        permalink_field = self.class.permalink_field

        loop do
          other = self.class.where(permalink_field => permalink_value)
          break unless other.exists?

          # Try again with a new value
          permalink_value = generate_permalink
        end
        write_attribute(permalink_field, permalink_value)
      end
    end
  end
end

ActiveRecord::Base.send :include, Spree::Core::Permalinks

Version data entries

48 entries across 48 versions & 2 rubygems

Version Path
solidus_core-2.10.5 lib/spree/core/permalinks.rb
solidus_core-2.10.3 lib/spree/core/permalinks.rb
solidus_core-2.10.2 lib/spree/core/permalinks.rb
solidus_core-2.9.6 lib/spree/core/permalinks.rb
solidus_core-2.8.6 lib/spree/core/permalinks.rb
solidus_core-2.10.1 lib/spree/core/permalinks.rb
solidus_core-2.9.5 lib/spree/core/permalinks.rb
solidus_core-2.10.0 lib/spree/core/permalinks.rb
solidus_core-2.9.4 lib/spree/core/permalinks.rb
solidus_core-2.6.6 lib/spree/core/permalinks.rb
solidus_core-2.7.4 lib/spree/core/permalinks.rb
solidus_core-2.8.5 lib/spree/core/permalinks.rb
solidus_core-2.9.3 lib/spree/core/permalinks.rb
solidus_core-2.9.2 lib/spree/core/permalinks.rb
solidus_core-2.10.0.beta1 lib/spree/core/permalinks.rb
solidus_core-2.7.3 lib/spree/core/permalinks.rb
solidus_core-2.6.5 lib/spree/core/permalinks.rb
solidus_core-2.9.1 lib/spree/core/permalinks.rb
solidus_core-2.9.0 lib/spree/core/permalinks.rb
solidus_core-2.9.0.rc.1 lib/spree/core/permalinks.rb