123456789_123456789_123456789_123456789_123456789_

Module: ActionText::Attachable

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: actiontext/lib/action_text/attachable.rb

Overview

Include this module to make a record attachable to an Content.

class Person < ApplicationRecord
  include ActionText::Attachable
end

person = Person.create! name: "Javan"
html = %Q(<action-text-attachment sgid="#{person.attachable_sgid}"></action-text-attachment>)
content = ActionText::Content.new(html)
content.attachables # => [person]

Constant Summary

Class Method Summary

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

Instance Attribute Summary

Instance Method Summary

Class Method Details

.from_attachable_sgid(sgid, options = {})

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 41

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 || raise(ActiveRecord::RecordNotFound)
end

.from_node(node)

Extracts the Attachable from the attachment HTML node:

person = Person.create! name: "Javan"
html = %Q(<action-text-attachment sgid="#{person.attachable_sgid}"></action-text-attachment>)
fragment = ActionText::Fragment.wrap(html)
attachment_node = fragment.find_all(ActionText::Attachment.tag_name).first
ActionText::Attachable.from_node(attachment_node) # => person
[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 29

def from_node(node)
  if attachable = attachable_from_sgid(node["sgid"])
    attachable
  elsif attachable = ActionText::Attachables::ContentAttachment.from_node(node)
    attachable
  elsif attachable = ActionText::Attachables::RemoteImage.from_node(node)
    attachable
  else
    ActionText::Attachables::MissingAttachable.new(node["sgid"])
  end
end

Instance Attribute Details

#previewable_attachable?Boolean (readonly)

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 97

def previewable_attachable?
  false
end

Instance Method Details

#attachable_content_type

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 81

def attachable_content_type
  try(:content_type) || "application/octet-stream"
end

#attachable_filename

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 85

def attachable_filename
  filename.to_s if respond_to?(:filename)
end

#attachable_filesize

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 89

def attachable_filesize
  try(:byte_size) || try(:filesize)
end

#attachable_metadata

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 93

def 
  try(:) || {}
end

#attachable_sgid

Returns the Signed Global ID for the attachable. The purpose of the ID is set to ‘attachable’ so it can’t be reused for other purposes.

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 77

def attachable_sgid
  to_sgid(expires_in: nil, for: LOCATOR_NAME).to_s
end

#to_attachable_partial_path

Returns the path to the partial that is used for rendering the attachable. Defaults to to_partial_path.

Override to render a different partial:

class User < ApplicationRecord
  def to_attachable_partial_path
    "users/attachable"
  end
end
[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 125

def to_attachable_partial_path
  to_partial_path
end

#to_rich_text_attributes(attributes = {})

[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 129

def to_rich_text_attributes(attributes = {})
  attributes.dup.tap do |attrs|
    attrs[:sgid] = attachable_sgid
    attrs[:content_type] = attachable_content_type
    attrs[:previewable] = true if previewable_attachable?
    attrs[:filename] = attachable_filename
    attrs[:filesize] = attachable_filesize
    attrs[:width] = [:width]
    attrs[:height] = [:height]
  end.compact
end

#to_trix_content_attachment_partial_path

Returns the path to the partial that is used for rendering the attachable in Trix. Defaults to to_partial_path.

Override to render a different partial:

class User < ApplicationRecord
  def to_trix_content_attachment_partial_path
    "users/trix_content_attachment"
  end
end
[ GitHub ]

  
# File 'actiontext/lib/action_text/attachable.rb', line 111

def to_trix_content_attachment_partial_path
  to_partial_path
end