lib/vedeu/output/renderers/all.rb in vedeu-0.6.13 vs lib/vedeu/output/renderers/all.rb in vedeu-0.6.14

- old
+ new

@@ -1,9 +1,104 @@ module Vedeu + # Provides a single interface to all registered renderers. + # module Renderers + extend Enumerable + extend self + + # Instructs each renderer registered with Vedeu to clear their + # content. + # + # @example + # Vedeu.renderers.clear + # + # @return [Array<void>] + def clear + threads = storage.map do |renderer| + Thread.new(renderer) do + mutex.synchronize do + renderer.clear + end + end + end + threads.each(&:join) + + '' + end + + # Provides access to the list of renderers. + # + # @example + # Vedeu.renderers + # + # @return [Module] + def renderers + self + end + + # Instructs each renderer registered with Vedeu to render the + # output as content. + # + # @example + # Vedeu.renderers.render(output) + # + # @param output [void] + # @return [Array<void>] + def render(output) + threads = storage.map do |renderer| + Thread.new(renderer) do + mutex.synchronize do + Vedeu.log(type: :output, + message: "Renderer: '#{renderer.class.name}'") + + renderer.render(output) + end + end + end + threads.each(&:join) + + output + end + + # Adds the given renderer class(es) to the list of renderers. + # + # @example + # Vedeu.renderer SomeRenderer + # + # @note + # A renderer class must respond to the '.render' class method. + # + # @param renderers [Class] + # @return [Set] + def renderer(*renderers) + renderers.each { |renderer| storage.add(renderer) unless renderer.nil? } + + storage + end + + # @example + # Vedeu.renderers.reset + # + # @return [Set] + def reset + @storage = Set.new + end + + private + + # @return [Set] + def storage + @storage ||= reset + end + + # @return [Mutex] + def mutex + @mutex ||= Mutex.new + end + end # Renderers end # Vedeu require 'vedeu/output/renderers/renderer_options' @@ -12,6 +107,5 @@ require 'vedeu/output/renderers/html' require 'vedeu/output/renderers/json' require 'vedeu/output/renderers/null' require 'vedeu/output/renderers/terminal' require 'vedeu/output/renderers/text' -require 'vedeu/output/renderers'