class RenderEditorjs::Document

Attributes

content[R]
errors[R]
renderer[R]

Public Class Methods

new(content, renderer = RenderEditorjs::DefaultRenderer.new) click to toggle source
# File lib/render_editorjs/document.rb, line 7
def initialize(content, renderer = RenderEditorjs::DefaultRenderer.new)
  @renderer = renderer
  @content = content.is_a?(Hash) ? content : parse_json(content)
  @errors = []
end

Public Instance Methods

render() click to toggle source
# File lib/render_editorjs/document.rb, line 21
def render
  return "" unless valid_renderer?

  content["blocks"].map do |block|
    block_renderer = block_renderers(block["type"])
    next unless block_renderer

    block_renderer.render(block["data"])
  end.join
end
valid?() click to toggle source
# File lib/render_editorjs/document.rb, line 13
def valid?
  return false unless valid_renderer?

  validate_blocks

  @errors.empty?
end

Private Instance Methods

block_renderers(block_type) click to toggle source
# File lib/render_editorjs/document.rb, line 52
def block_renderers(block_type)
  @block_renderers ||= {}
  @block_renderers[block_type] ||= renderer.mapping[block_type]
end
parse_json(content) click to toggle source
# File lib/render_editorjs/document.rb, line 57
def parse_json(content)
  JSON.parse(content)
rescue JSON::ParserError
  nil
end
valid_renderer?() click to toggle source
# File lib/render_editorjs/document.rb, line 34
def valid_renderer?
  renderer.validator(content).validate!
rescue JSON::Schema::ValidationError => e
  @errors << e.message

  false
end
validate_blocks() click to toggle source
# File lib/render_editorjs/document.rb, line 42
def validate_blocks
  content["blocks"].each do |block|
    block_renderer = block_renderers(block["type"])
    next unless block_renderer

    validator = block_renderer.validator(block["data"])
    @errors << validator.errors unless validator.valid?
  end
end