2026-03-06 10:56:20 -05:00
|
|
|
module IdCard
|
|
|
|
|
class EmployerLogo < ApplicationRecord
|
2026-05-06 13:28:16 -04:00
|
|
|
belongs_to :setup, optional: true
|
|
|
|
|
validates :filename, :image_data, :content_type, :aspect_ratio, presence: true
|
|
|
|
|
validates :filename, uniqueness: true
|
|
|
|
|
|
2026-04-15 08:12:47 -04:00
|
|
|
before_validation :process_image, if: :image_data_changed?
|
2026-03-05 11:30:24 -05:00
|
|
|
|
2026-03-06 10:56:20 -05:00
|
|
|
private
|
2026-03-05 11:30:24 -05:00
|
|
|
|
2026-04-15 08:12:47 -04:00
|
|
|
def process_image
|
|
|
|
|
image = Vips::Image.new_from_buffer(self.image_data, "")
|
|
|
|
|
|
|
|
|
|
resized_image = ImageProcessing::Vips
|
|
|
|
|
.source(image)
|
|
|
|
|
.resize_to_limit(nil, 400)
|
|
|
|
|
|
|
|
|
|
processed_image = resized_image.convert("png").call
|
|
|
|
|
new_image_data = processed_image.read
|
|
|
|
|
if new_image_data
|
|
|
|
|
self.image_data = new_image_data
|
|
|
|
|
self.filename = File.basename(self.filename, File.extname(self.filename)) + ".png"
|
|
|
|
|
self.content_type = "image/png"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
image_ratio = image.width.to_f / image.height
|
2026-03-06 10:56:20 -05:00
|
|
|
if image_ratio
|
2026-03-19 00:42:27 -04:00
|
|
|
self.aspect_ratio = image_ratio.round(2)
|
2026-03-06 10:56:20 -05:00
|
|
|
end
|
2026-03-05 11:30:24 -05:00
|
|
|
end
|
2026-04-15 08:12:47 -04:00
|
|
|
|
2026-03-05 11:30:24 -05:00
|
|
|
end
|
|
|
|
|
end
|