Sha256: 52471d7ecec0396d7224cb0a0364450df075d39e08f69a56ca3d86d39c132ec3
Contents?: true
Size: 1.37 KB
Versions: 3
Compression:
Stored size: 1.37 KB
Contents
# frozen_string_literal: true module RenderEditorjs class Document attr_reader :renderer, :content, :errors def initialize(content, renderer = RenderEditorjs::DefaultRenderer.new) @renderer = renderer @content = content.is_a?(Hash) ? content : parse_json(content) @errors = [] end def valid? return false unless valid_renderer? validate_blocks @errors.empty? end 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 private def valid_renderer? renderer.validator(content).validate! rescue JSON::Schema::ValidationError => e @errors << e.message false end 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 def block_renderers(block_type) @block_renderers ||= {} @block_renderers[block_type] ||= renderer.mapping[block_type] end def parse_json(content) JSON.parse(content) rescue JSON::ParserError nil end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
render_editorjs-0.1.4 | lib/render_editorjs/document.rb |
render_editorjs-0.1.3 | lib/render_editorjs/document.rb |
render_editorjs-0.1.2 | lib/render_editorjs/document.rb |