lib/yard/cli/display.rb in yard-0.8.6 vs lib/yard/cli/display.rb in yard-0.8.6.1

- old
+ new

@@ -6,24 +6,42 @@ def description; 'Displays a formatted object' end def initialize(*args) super options.format = :text # default for this command + @layout = nil + @objects = [] end # Runs the commandline utility, parsing arguments and displaying an object # from the {Registry}. # # @param [Array<String>] args the list of arguments. # @return [void] def run(*args) return unless parse_arguments(*args) - @objects.each do |obj| - log.puts obj.format(options) - end + log.puts wrap_layout(format_objects) end + # @return [String] the output data for all formatted objects + def format_objects + @objects.inject([]) do |arr, obj| + arr.push obj.format(options) + end.join("\n") + end + + def wrap_layout(contents) + return contents unless @layout + opts = options.merge( + :contents => contents, + :object => @objects.first, + :objects => @objects + ) + args = [options.template, @layout, options.format] + Templates::Engine.template(*args).run(opts) + end + # Parses commandline options. # @param [Array<String>] args each tokenized argument def parse_arguments(*args) opts = OptionParser.new opts.banner = "Usage: yard display [options] OBJECT [OTHER OBJECTS]" @@ -35,9 +53,16 @@ @objects = args.map {|o| Registry.at(o) } # validation return false if @objects.any? {|o| o.nil? } verify_markup_options + end + + def output_options(opts) + super(opts) + opts.on('-l', '--layout [LAYOUT]', 'Wraps output in layout template (good for HTML)') do |layout| + @layout = layout || 'layout' + end end end end end