Add media dimensions (#2448)

* Fixes #1985

- add migration AddMediaAttachmentMeta, which add meta field to media_attachments
- before saving attachment, set file meta if needed
- add meta in api

* add spec

* align the “size” format for image and video

* fix code climate

* fixes media_attachment_spec.rb
This commit is contained in:
Francis Chong
2017-04-26 09:48:12 +08:00
committed by Eugen Rochko
parent 8fe36654ef
commit 193dddb433
5 changed files with 60 additions and 2 deletions

View File

@ -51,6 +51,7 @@ class MediaAttachment < ApplicationRecord
before_create :set_shortcode
before_post_process :set_type_and_extension
before_save :set_meta
class << self
private
@ -112,6 +113,30 @@ class MediaAttachment < ApplicationRecord
file.instance_write :file_name, [basename, extension].delete_if(&:empty?).join('.')
end
def set_meta
meta = populate_meta
return if meta == {}
file.instance_write :meta, meta
end
def populate_meta
meta = {}
file.queued_for_write.each do |style, file|
begin
geo = Paperclip::Geometry.from_file file
meta[style] = {
width: geo.width.to_i,
height: geo.height.to_i,
size: "#{geo.width.to_i}x#{geo.height.to_i}",
aspect: geo.width.to_f / geo.height.to_f,
}
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
meta[style] = {}
end
end
meta
end
def appropriate_extension
mime_type = MIME::Types[file.content_type]

View File

@ -3,3 +3,4 @@ attributes :id, :remote_url, :type
node(:url) { |media| full_asset_url(media.file.url(:original)) }
node(:preview_url) { |media| full_asset_url(media.file.url(:small)) }
node(:text_url) { |media| media.local? ? medium_url(media) : nil }
node(:meta) { |media| media.file.meta }