class Contentful::RichTextCoercion

Coercion for RichText Types

Public Instance Methods

coerce(configuration) click to toggle source

Resolves includes and removes unresolvable nodes

# File lib/contentful/coercions.rb, line 105
def coerce(configuration)
  coerce_block(value, configuration)
end

Private Instance Methods

coerce_block(block, configuration) click to toggle source
# File lib/contentful/coercions.rb, line 121
def coerce_block(block, configuration)
  return block unless block.is_a?(Hash) && block.key?('content')

  invalid_nodes = []
  coerced_nodes = {}
  block['content'].each_with_index do |node, index|
    if link?(node)
      link = coerce_link(node, configuration)

      if !link.nil?
        node['data']['target'] = link
      else
        invalid_nodes << index
      end
    elsif content_block?(node)
      coerced_nodes[index] = coerce_block(node, configuration)
    end
  end

  coerced_nodes.each do |index, coerced_node|
    block['content'][index] = coerced_node
  end

  invalid_nodes.each do |index|
    block['content'].delete_at(index)
  end

  block
end
content_block?(node) click to toggle source
# File lib/contentful/coercions.rb, line 117
def content_block?(node)
  !node.fetch('content', []).empty?
end