lib/macros4cuke/formatting-service.rb in macros4cuke-0.4.08 vs lib/macros4cuke/formatting-service.rb in macros4cuke-0.4.09

- old
+ new

@@ -1,74 +1,74 @@ -# File: formatting-service.rb -# Purpose: Implementation of the WalkEventPublisher class. - -require_relative 'exceptions' -require_relative 'coll-walker-factory' -require_relative './formatter/all-notifications' - - -module Macros4Cuke # Module used as a namespace - -# A worker class that drives the rendering of macro-steps in -# any registered format. -class FormattingService - # The list of registered formatters - attr_reader(:formatters) - - # Link to a factory of walker objects that visit macro collections - attr_reader(:walker_factory) - - - # Constructor. - def initialize() - @formatters = [] - @walker_factory = CollWalkerFactory.new - end - - - # Register a formatter. - # Raises an exception when the formatter implements - # an unknown formatting event. - def register(aFormatter) - # Get the list of formatted events supported by the formatter - supported_events = aFormatter.implements - - # Complain if list is empty or nil - if supported_events.nil? || supported_events.empty? - fail(NoFormattingEventForFormatter.new(aFormatter)) - end - - # Check that each event from the event list the formatter is known. - supported_events.each do |event| - unless Formatter::AllNotifications.include? event - fail(UnknownFormattingEvent.new(aFormatter, event)) - end - end - - formatters << aFormatter - end - - # Launch the rendering(s) of the given macro collection. - def start!(aMacroCollection) - # Create a walker (that will visit the collection) - walker = walker_factory.build_walker(aMacroCollection) - - walker.each do |visit_event| - (msg, nesting_level) = visit_event[0..1] - - # Notify each formatter of the visit event. - formatters.each do |fmt| - accepted_notifications = fmt.implements - if accepted_notifications.include? msg - # Assumption: all nil argument(s) are at the end - arg_vector = visit_event[2..-1].reject { |an_arg| an_arg.nil? } - fmt.send(msg, nesting_level, *arg_vector) - end - end - end - end - -end # class - -end # module - -# End of file +# File: formatting-service.rb +# Purpose: Implementation of the WalkEventPublisher class. + +require_relative 'exceptions' +require_relative 'coll-walker-factory' +require_relative './formatter/all-notifications' + + +module Macros4Cuke # Module used as a namespace + +# A worker class that drives the rendering of macro-steps in +# any registered format. +class FormattingService + # The list of registered formatters + attr_reader(:formatters) + + # Link to a factory of walker objects that visit macro collections + attr_reader(:walker_factory) + + + # Constructor. + def initialize() + @formatters = [] + @walker_factory = CollWalkerFactory.new + end + + + # Register a formatter. + # Raises an exception when the formatter implements + # an unknown formatting event. + def register(aFormatter) + # Get the list of formatted events supported by the formatter + supported_events = aFormatter.implements + + # Complain if list is empty or nil + if supported_events.nil? || supported_events.empty? + fail(NoFormattingEventForFormatter.new(aFormatter)) + end + + # Check that each event from the event list the formatter is known. + supported_events.each do |event| + unless Formatter::AllNotifications.include? event + fail(UnknownFormattingEvent.new(aFormatter, event)) + end + end + + formatters << aFormatter + end + + # Launch the rendering(s) of the given macro collection. + def start!(aMacroCollection) + # Create a walker (that will visit the collection) + walker = walker_factory.build_walker(aMacroCollection) + + walker.each do |visit_event| + (msg, nesting_level) = visit_event[0..1] + + # Notify each formatter of the visit event. + formatters.each do |fmt| + accepted_notifications = fmt.implements + if accepted_notifications.include? msg + # Assumption: all nil argument(s) are at the end + arg_vector = visit_event[2..-1].reject { |an_arg| an_arg.nil? } + fmt.send(msg, nesting_level, *arg_vector) + end + end + end + end + +end # class + +end # module + +# End of file