Add sgid support
This commit is contained in:
parent
986d6a6da4
commit
b79bf62196
|
@ -25,9 +25,10 @@ addEventListener("trix-attachment-add", event => {
|
|||
console.warn("Failed to store file for attachment", attachment, error)
|
||||
} else {
|
||||
console.log("Created blob for attachment", attributes, attachment)
|
||||
const { signed_id } = attributes
|
||||
const url = `${blobsURL}/${signed_id}/${encodeURIComponent(attachment.file.name)}`
|
||||
attachment.setAttributes({ url, signed_id })
|
||||
attachment.setAttributes({
|
||||
url: `${blobsURL}/${attributes.signed_id}/${encodeURIComponent(attachment.file.name)}`,
|
||||
sgid: attributes.attachable_sgid
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
module ActiveText
|
||||
module Attachable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
LOCATOR_NAME = "attachable"
|
||||
|
||||
class << self
|
||||
def from_node(node)
|
||||
if attachable = attachable_from_sgid(node["sgid"])
|
||||
|
@ -13,12 +17,48 @@ module ActiveText
|
|||
end
|
||||
end
|
||||
|
||||
def from_attachable_sgid(sgid, options = {})
|
||||
method = sgid.is_a?(Array) ? :locate_many_signed : :locate_signed
|
||||
record = GlobalID::Locator.public_send(method, sgid, options.merge(for: LOCATOR_NAME))
|
||||
record or raise ActiveRecord::RecordNotFound
|
||||
end
|
||||
|
||||
private
|
||||
def attachable_from_sgid(sgid)
|
||||
::Attachable.from_attachable_sgid(sgid)
|
||||
from_attachable_sgid(sgid)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
class_methods do
|
||||
def from_attachable_sgid(sgid)
|
||||
ActiveText::Attachable.from_attachable_sgid(sgid, only: self)
|
||||
end
|
||||
end
|
||||
|
||||
def attachable_sgid
|
||||
to_sgid(expires_in: nil, for: LOCATOR_NAME).to_s
|
||||
end
|
||||
|
||||
def attachable_content_type
|
||||
try(:content_type) || "application/octet-stream"
|
||||
end
|
||||
|
||||
def previewable_attachable?
|
||||
false
|
||||
end
|
||||
|
||||
def as_json(*)
|
||||
super.merge(attachable_sgid: attachable_sgid)
|
||||
end
|
||||
|
||||
def to_active_text_attributes(attributes = {})
|
||||
attributes.dup.tap do |attributes|
|
||||
attributes[:sgid] = attachable_sgid
|
||||
attributes[:content_type] = attachable_content_type
|
||||
attributes[:previewable] = true if previewable_attachable?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,6 +11,18 @@ module ActiveText
|
|||
end
|
||||
end
|
||||
|
||||
initializer "active_text.active_storage_extension" do
|
||||
require "active_storage/blob"
|
||||
|
||||
class ActiveStorage::Blob
|
||||
include ActiveText::Attachable
|
||||
|
||||
def previewable_attachable?
|
||||
representable?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# FIXME: Aren't helpers supposed to load automatically?
|
||||
# https://github.com/rails/rails/issues/26627 ?
|
||||
initializer "active_text.helper" do
|
||||
|
|
Loading…
Reference in New Issue