class RichTextRenderer::AssetHyperlinkRenderer

Asset hyperlink renderer

Constants

ANCHOR_HTML

Anchor HTML Tag

Public Instance Methods

render(node) click to toggle source

Renders asset nodes

# File lib/rich_text_renderer/block_renderers/asset_hyperlink_renderer.rb, line 10
def render(node)
  asset = nil
  begin
    asset = node['data']['target']
  rescue
    fail "Node target is not an asset - Node: #{node}"
  end

  # Check by class name instead of instance type to
  # avoid dependending on the Contentful SDK.
  return render_asset(asset, node) if asset.class.ancestors.map(&:to_s).any? { |name| name.include?('Asset') }

  if asset.is_a?(::Hash)
    unless asset.key?('fields') && asset['fields'].key?('file')
      fail "Node target is not an asset - Node: #{node}"
    end

    return render_hash(asset, node)
  end

  fail "Node target is not an asset - Node: #{node}"
end

Protected Instance Methods

render!(markup, url, text, formatted = false) click to toggle source
# File lib/rich_text_renderer/block_renderers/asset_hyperlink_renderer.rb, line 59
def render!(markup, url, text, formatted = false)
  text = render_content(text) if formatted
  markup[url, text]
end
render_asset(asset, node = nil) click to toggle source
# File lib/rich_text_renderer/block_renderers/asset_hyperlink_renderer.rb, line 35
def render_asset(asset, node = nil)
  render!(
    ANCHOR_HTML,
    asset.url,
    renders_node?(node) ? node : asset.title,
    renders_node?(node)
  )
end
render_hash(asset, node = nil) click to toggle source
# File lib/rich_text_renderer/block_renderers/asset_hyperlink_renderer.rb, line 44
def render_hash(asset, node = nil)
  render!(
    ANCHOR_HTML,
    asset['fields']['file']['url'],
    renders_node?(node) ? node : asset['fields']['title'],
    renders_node?(node)
  )
end
renders_node?(node) click to toggle source
# File lib/rich_text_renderer/block_renderers/asset_hyperlink_renderer.rb, line 53
def renders_node?(node)
  !(node.nil? || node.empty?) && (
    node.is_a?(::Hash) ? renders_node?(node['content']) : true
  )
end