Sha256: e15e24518f93237a2d4d496c8ee49b6ad87ac3ab9be6c4b67af3a49c13732d71

Contents?: true

Size: 919 Bytes

Versions: 2

Compression:

Stored size: 919 Bytes

Contents

# frozen_string_literal: true

require 'active_support' unless defined?(ActiveSupport)

module Lite
  module Uxid
    module Record
      module Nanoid

        extend ActiveSupport::Concern

        included do
          before_create :callback_generate_uxid!, if: proc { respond_to?(:uxid) }
        end

        class_methods do
          def find_by_uxid(uxid)
            find_by(uxid: uxid)
          end

          def find_by_uxid!(uxid)
            record = find_by_uxid(uxid)
            return record unless record.nil?

            raise ActiveRecord::RecordNotFound
          end
        end

        private

        def callback_generate_uxid!
          random_nanoid = nil

          loop do
            random_nanoid = Lite::Uxid::Nanoid.encode
            break unless self.class.exists?(uxid: random_nanoid)
          end

          self.uxid = random_nanoid
        end

      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lite-uxid-1.1.2 lib/lite/uxid/record/nanoid.rb
lite-uxid-1.1.1 lib/lite/uxid/record/nanoid.rb