Sha256: 27705cb1e315ae75a7e52ee8e59d27c5365c5e03294c4db88817ea49ae774071

Contents?: true

Size: 924 Bytes

Versions: 3

Compression:

Stored size: 924 Bytes

Contents

# frozen_string_literal: true

require 'active_record'
require 'active_support'

module Lite
  module Uxid
    module Record
      module Hash

        extend ActiveSupport::Concern

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

          def self.find_by_uxid(uxid)
            decoded_id = Lite::Uxid::Hash.decode(uxid)
            find_by(id: decoded_id)
          end

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

            raise ActiveRecord::RecordNotFound
          end
        end

        def uxid_to_id
          return unless respond_to?(:uxid)

          Lite::Uxid::Hash.decode(uxid)
        end

        private

        def callback_generate_uxid!
          hash = Lite::Uxid::Hash.encode(id)
          update_column(:uxid, hash)
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lite-uxid-1.0.2 lib/lite/uxid/record/hash.rb
lite-uxid-1.0.1 lib/lite/uxid/record/hash.rb
lite-uxid-1.0.0 lib/lite/uxid/record/hash.rb