lib/liquid_diagrams/basic_block.rb in liquid-diagrams-0.1.0 vs lib/liquid_diagrams/basic_block.rb in liquid-diagrams-0.2.0
- old
+ new
@@ -1,9 +1,10 @@
# frozen_string_literal: true
module LiquidDiagrams
- # @abstract Subclass and override {#render} or {#render!} to implement
+ # @abstract Subclass and override {#render_with_rescue} or
+ # {#render_without_rescue} to implement
class BasicBlock < ::Liquid::Block
# Return the renderer class matching the block
#
# @return [BasicRenderer]
#
@@ -12,38 +13,49 @@
@renderer ||= Renderers.const_get(
name.split('::').last.gsub(/Block$/, 'Renderer')
)
end
- # Render with error rescued
- #
- # @param context [Liquid::Context]
- #
- # @return String
+ # @note Do not overwite this method, overwrite {#render_with_rescue} or
+ # {#render_without_recue} instead
def render(context)
@content = super.to_s
+ @context = context
- render!(context)
+ render_with_rescue
+ end
+
+ # Render diagram with error rescued
+ #
+ # @return [String]
+ def render_with_rescue
+ render_without_rescue
rescue Errors::BasicError => error
- error
+ handle_error(error)
end
- # Render without error rescued
+ # Render diagram without error rescued
#
- # @param context [Liquid::Context]
+ # @return [String]
#
- # @return String
- #
- # @raise [Errors::BasicError]
- #
- # rubocop:disable Lint/UnusedMethodArgument
- def render!(context)
+ # @raise [NameError] @see {.renderer}
+ # @raise [Errors::BasicError] if rendering failed
+ def render_without_rescue
self.class.renderer.render(@content, config)
end
- # rubocop:enable Lint/UnusedMethodArgument
+ def handle_error(error)
+ error
+ end
+
+ # Read block config from parse context
+ #
+ # @return [Hash]
def config
- config = (parse_context[:config] || {})
- config.fetch(name.split('::').last.chomp('Block').downcase, {})
+ opts = options[:liquid_diagrams] || options['liquid_diagrams'] || {}
+
+ opts.fetch block_name.to_sym do
+ opts.fetch(block_name.to_s, {})
+ end
end
end
end