class OctocatalogDiff::Cli::Printer
Wrapper around OctocatalogDiff::CatalogDiff::Display
to set the options and output to a file or the screen depending on selection.
Public Class Methods
new(options, logger)
click to toggle source
Constructor @param options [Hash] Options
from cli/options @param logger [Logger] Logger object
# File lib/octocatalog-diff/cli/printer.rb, line 14 def initialize(options, logger) @options = options @logger = logger end
Public Instance Methods
printer(diffs, from_dir = nil, to_dir = nil)
click to toggle source
The method to call externally, passing in diffs. This takes the appropriate action based on options, which is either to write the result into an output file, or print the result on STDOUT. Does not return anything. @param diffs [Array<Diffs>] Array of differences @param from_dir [String] Directory in which “from” catalog was compiled @param to_dir [String] Directory in which “to” catalog was compiled
# File lib/octocatalog-diff/cli/printer.rb, line 25 def printer(diffs, from_dir = nil, to_dir = nil) unless diffs.is_a?(Array) raise ArgumentError, "printer() expects an array, not #{diffs.class}" end display_opts = @options.merge(compilation_from_dir: from_dir, compilation_to_dir: to_dir) diff_text = OctocatalogDiff::CatalogDiff::Display.output(diffs, display_opts, @logger) if @options[:output_file].nil? puts diff_text unless diff_text.empty? else output_to_file(diff_text) end end
Private Instance Methods
output_to_file(diff_in)
click to toggle source
Output to a file, handling errors related to writing files. @param diff_in [String|Array] Text to write to file
# File lib/octocatalog-diff/cli/printer.rb, line 42 def output_to_file(diff_in) diff_text = diff_in.is_a?(Array) ? diff_in.join("\n") : diff_in File.open(@options[:output_file], 'w') { |f| f.write(diff_text) } @logger.info "Wrote diff to #{@options[:output_file]}" rescue Errno::ENOENT, Errno::EACCES, Errno::EISDIR => exc @logger.error "Cannot write to #{@options[:output_file]}: #{exc}" raise OctocatalogDiff::Errors::PrinterError, "Cannot write to #{@options[:output_file]}: #{exc}" end