From b79bf62196f1032d4a6f95799ced79cbbadad856 Mon Sep 17 00:00:00 2001 From: Javan Makhmali Date: Mon, 12 Feb 2018 18:21:49 -0500 Subject: Add sgid support --- lib/active_text/attachable.rb | 42 +++++++++++++++++++++++++++++++++++++++++- lib/active_text/engine.rb | 12 ++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/active_text/attachable.rb b/lib/active_text/attachable.rb index 445ee30605..3a6648331e 100644 --- a/lib/active_text/attachable.rb +++ b/lib/active_text/attachable.rb @@ -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 diff --git a/lib/active_text/engine.rb b/lib/active_text/engine.rb index 5b16acab04..9a1d08e1ad 100644 --- a/lib/active_text/engine.rb +++ b/lib/active_text/engine.rb @@ -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 -- cgit v1.2.3