1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- # frozen_string_literal: true
- # == Schema Information
- #
- # Table name: site_uploads
- #
- # id :bigint(8) not null, primary key
- # var :string default(""), not null
- # file_file_name :string
- # file_content_type :string
- # file_file_size :integer
- # file_updated_at :datetime
- # meta :json
- # created_at :datetime not null
- # updated_at :datetime not null
- # blurhash :string
- #
- class SiteUpload < ApplicationRecord
- include Attachmentable
- STYLES = {
- thumbnail: {
- '@1x': {
- format: 'png',
- geometry: '1200x630#',
- file_geometry_parser: FastGeometryParser,
- blurhash: {
- x_comp: 4,
- y_comp: 4,
- }.freeze,
- },
- '@2x': {
- format: 'png',
- geometry: '2400x1260#',
- file_geometry_parser: FastGeometryParser,
- }.freeze,
- }.freeze,
- mascot: {}.freeze,
- }.freeze
- has_attached_file :file, styles: ->(file) { STYLES[file.instance.var.to_sym] }, convert_options: { all: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail, :blurhash_transcoder, :type_corrector]
- validates_attachment_content_type :file, content_type: %r{\Aimage/.*\z}
- validates :file, presence: true
- validates :var, presence: true, uniqueness: true
- before_save :set_meta
- after_commit :clear_cache
- def cache_key
- "site_uploads/#{var}"
- end
- private
- def set_meta
- tempfile = file.queued_for_write[:original]
- return if tempfile.nil?
- width, height = FastImage.size(tempfile.path)
- self.meta = { width: width, height: height }
- end
- def clear_cache
- Rails.cache.delete(cache_key)
- end
- end
|