scinote-web/app/models/concerns/prefixed_id_model.rb

35 lines
1.1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
module PrefixedIdModel
extend ActiveSupport::Concern
included do
unless Rails.env.production?
begin
indexdef = "CREATE INDEX index_#{table_name}_on_#{name.underscore}_code " \
"ON public.#{table_name} USING gin ((('#{self::ID_PREFIX}'::text || id)) gin_trgm_ops)"
index_exists = ActiveRecord::Base.connection.execute(
"SELECT indexdef FROM pg_indexes WHERE tablename NOT LIKE 'pg%';"
).to_a.map(&:values).flatten.include?(indexdef)
# rubocop:disable Rails/Output
puts("\nWARNING missing index\n#{indexdef}\nfor prefixed id model #{name}!\n\n") unless index_exists
# rubocop:enable Rails/Output
rescue ActiveRecord::NoDatabaseError, ActiveRecord::ConnectionNotEstablished
# only applicable during build and when setting up project
end
end
self::PREFIXED_ID_SQL = "('#{self::ID_PREFIX}' || #{table_name}.id)".freeze
def self.code(id)
"#{self::ID_PREFIX}#{id}"
end
def code
"#{self.class::ID_PREFIX}#{id}"
end
end
end