scinote-web/app/models/concerns/prefixed_id_model.rb
2021-07-20 10:20:47 +02:00

29 lines
954 B
Ruby

# frozen_string_literal: true
module PrefixedIdModel
extend ActiveSupport::Concern
included do
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
self::PREFIXED_ID_SQL = "('#{self::ID_PREFIX}' || #{table_name}.id)"
def code
"#{self.class::ID_PREFIX}#{id}"
end
end
end