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)
|
console.warn("Failed to store file for attachment", attachment, error)
|
||||||
} else {
|
} else {
|
||||||
console.log("Created blob for attachment", attributes, attachment)
|
console.log("Created blob for attachment", attributes, attachment)
|
||||||
const { signed_id } = attributes
|
attachment.setAttributes({
|
||||||
const url = `${blobsURL}/${signed_id}/${encodeURIComponent(attachment.file.name)}`
|
url: `${blobsURL}/${attributes.signed_id}/${encodeURIComponent(attachment.file.name)}`,
|
||||||
attachment.setAttributes({ url, signed_id })
|
sgid: attributes.attachable_sgid
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
module ActiveText
|
module ActiveText
|
||||||
module Attachable
|
module Attachable
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
LOCATOR_NAME = "attachable"
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def from_node(node)
|
def from_node(node)
|
||||||
if attachable = attachable_from_sgid(node["sgid"])
|
if attachable = attachable_from_sgid(node["sgid"])
|
||||||
|
@ -13,12 +17,48 @@ module ActiveText
|
||||||
end
|
end
|
||||||
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
|
private
|
||||||
def attachable_from_sgid(sgid)
|
def attachable_from_sgid(sgid)
|
||||||
::Attachable.from_attachable_sgid(sgid)
|
from_attachable_sgid(sgid)
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,6 +11,18 @@ module ActiveText
|
||||||
end
|
end
|
||||||
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?
|
# FIXME: Aren't helpers supposed to load automatically?
|
||||||
# https://github.com/rails/rails/issues/26627 ?
|
# https://github.com/rails/rails/issues/26627 ?
|
||||||
initializer "active_text.helper" do
|
initializer "active_text.helper" do
|
||||||
|
|
Loading…
Reference in New Issue