Sha256: 792e2e97137907524dcd91f105d93457ebca5725038da5f6b521c17e8054564d

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

module LiquidDiagrams
  # @abstract Subclass and override {#render} or {#render!} to implement
  class BasicBlock < ::Liquid::Block
    # Return the renderer class matching the block
    #
    # @return [BasicRenderer]
    #
    # @raise [NameError] if renderer class not found
    def self.renderer
      @renderer ||= Renderers.const_get(
        name.split('::').last.gsub(/Block$/, 'Renderer')
      )
    end

    # Render with error rescued
    #
    # @param context [Liquid::Context]
    #
    # @return String
    def render(context)
      @content = super.to_s

      render!(context)
    rescue Errors::BasicError => error
      error
    end

    # Render without error rescued
    #
    # @param context [Liquid::Context]
    #
    # @return String
    #
    # @raise [Errors::BasicError]
    #
    # rubocop:disable Lint/UnusedMethodArgument
    def render!(context)
      self.class.renderer.render(@content, config)
    end
    # rubocop:enable Lint/UnusedMethodArgument

    def config
      config = (parse_context[:config] || {})
      config.fetch(name.split('::').last.chomp('Block').downcase, {})
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
liquid-diagrams-0.1.0 lib/liquid_diagrams/basic_block.rb