mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 20:26:35 +08:00
58 lines
1.3 KiB
Ruby
58 lines
1.3 KiB
Ruby
class StylesheetCache < ActiveRecord::Base
|
|
self.table_name = 'stylesheet_cache'
|
|
|
|
MAX_TO_KEEP = 50
|
|
|
|
def self.add(target, digest, content, source_map)
|
|
old_logger = ActiveRecord::Base.logger
|
|
|
|
return false if where(target: target, digest: digest).exists?
|
|
|
|
if Rails.env.development?
|
|
ActiveRecord::Base.logger = nil
|
|
end
|
|
|
|
success = create(target: target, digest: digest, content: content, source_map: source_map)
|
|
|
|
count = StylesheetCache.count
|
|
if count > MAX_TO_KEEP
|
|
|
|
remove_lower = StylesheetCache
|
|
.where(target: target)
|
|
.limit(MAX_TO_KEEP)
|
|
.order('id desc')
|
|
.pluck(:id)
|
|
.last
|
|
|
|
exec_sql("DELETE FROM stylesheet_cache where id < :id", id: remove_lower)
|
|
end
|
|
|
|
success
|
|
rescue ActiveRecord::RecordNotUnique
|
|
false
|
|
ensure
|
|
if Rails.env.development? && old_logger
|
|
ActiveRecord::Base.logger = old_logger
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
# == Schema Information
|
|
#
|
|
# Table name: stylesheet_cache
|
|
#
|
|
# id :integer not null, primary key
|
|
# target :string(255) not null
|
|
# digest :string(255) not null
|
|
# content :text not null
|
|
# created_at :datetime
|
|
# updated_at :datetime
|
|
# theme_id :integer default(-1), not null
|
|
# source_map :text
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_stylesheet_cache_on_target_and_digest (target,digest) UNIQUE
|
|
#
|