From 16e74650e8dcdbeb2da63710cc13974626c07dee Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 16 Oct 2022 17:16:28 -0500 Subject: [PATCH] media assets: include file URLs in /media_assets.json API. Include information about the asset's variants (sample images) in the /media_assets.json API: { "id": 6410907, "created_at": "2022-07-31T15:44:34.522-04:00", "updated_at": "2022-07-31T15:44:38.002-04:00", "md5": "19a2be6a1a8582bb349de9734b7a649a", "file_ext": "jpg", "file_size": 369029, "image_width": 600, "image_height": 900, "duration": null, "status": "active", "file_key": "R4DBCxBID", "is_public": true, "variants": [ { "variant": "preview", "url": "https://cdn.donmai.us/preview/19/a2/19a2be6a1a8582bb349de9734b7a649a.jpg", "width": 100, "height": 150, "file_ext": "jpg" }, { "variant": "180x180", "url": "https://cdn.donmai.us/180x180/19/a2/19a2be6a1a8582bb349de9734b7a649a.jpg", "width": 120, "height": 180, "file_ext": "jpg" }, { "variant": "360x360", "url": "https://cdn.donmai.us/360x360/19/a2/19a2be6a1a8582bb349de9734b7a649a.jpg", "width": 240, "height": 360, "file_ext": "jpg" }, { "variant": "720x720", "url": "https://cdn.donmai.us/720x720/19/a2/19a2be6a1a8582bb349de9734b7a649a.webp", "width": 480, "height": 720, "file_ext": "webp" }, { "variant": "original", "url": "https://cdn.donmai.us/original/19/a2/19a2be6a1a8582bb349de9734b7a649a.jpg", "width": 600, "height": 900, "file_ext": "jpg" } ] } --- app/models/media_asset.rb | 6 ++++++ app/policies/media_asset_policy.rb | 8 +++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/models/media_asset.rb b/app/models/media_asset.rb index 0ce712053..fb093632a 100644 --- a/app/models/media_asset.rb +++ b/app/models/media_asset.rb @@ -51,6 +51,8 @@ class MediaAsset < ApplicationRecord class Variant extend Memoist + include ActiveModel::Serializers::JSON + include ActiveModel::Serializers::Xml attr_reader :media_asset, :variant delegate :md5, :storage_service, :backup_storage_service, to: :media_asset @@ -164,6 +166,10 @@ class MediaAsset < ApplicationRecord dimensions[1] end + def serializable_hash(*options) + { variant: variant, url: file_url, width: width, height: height, file_ext: file_ext } + end + memoize :file_name, :file_ext, :max_dimensions, :dimensions end diff --git a/app/policies/media_asset_policy.rb b/app/policies/media_asset_policy.rb index 9d6f45887..05e57eefd 100644 --- a/app/policies/media_asset_policy.rb +++ b/app/policies/media_asset_policy.rb @@ -10,10 +10,8 @@ class MediaAssetPolicy < ApplicationPolicy end def api_attributes - if can_see_image? - super - else - super.excluding(:md5, :file_key) - end + attributes = super + [:variants] + attributes -= [:md5, :file_key, :variants] if !can_see_image? + attributes end end