Class: UpdateRepo::Logger
- Inherits:
-
Object
- Object
- UpdateRepo::Logger
- Includes:
- Helpers
- Defined in:
- lib/update_repo/logger.rb
Overview
Class : Logger. This class encapsulates printing to screen and logging to file if requried.
Instance Method Summary collapse
-
#close ⇒ void
close the logfile, if it exists.
-
#generate_filename ⇒ string
generate a filename for the log, with or without a timestamp.
-
#initialize(cmd) ⇒ void
constructor
Constructor for the Logger class.
-
#logfile ⇒ string
Return a string containing the logfile name and full path.
-
#output(*string) ⇒ void
this function will simply pass the given string to ‘print’, and also log to file if that is specified.
-
#repo_text? ⇒ boolean
returns non nil if we have been called originally by one of the Repo update output functions.
-
#repostat(status) ⇒ void
function repostat - outputs a coloured char depending on the status hash, but not if we are in quiet or verbose mode.
Methods included from Helpers
Constructor Details
#initialize(cmd) ⇒ void
Constructor for the Logger class.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/update_repo/logger.rb', line 15 def initialize(cmd) @cmd = cmd @legend = { failed: { char: 'x', color: 'red' }, updated: { char: '^', color: 'green' }, unchanged: { char: '.', color: 'white' }, skipped: { char: 's', color: 'yellow' } } # don't prepare a logfile unless it's been requested. return unless @cmd[:log] # generate a filename depending on 'timestamp' setting. filename = generate_filename # open the logfile and set sync mode. @logfile = File.open(filename, 'w') @logfile.sync = true end |
Instance Method Details
#close ⇒ void
This method returns an undefined value.
close the logfile, if it exists
92 93 94 |
# File 'lib/update_repo/logger.rb', line 92 def close @logfile.close if @logfile end |
#generate_filename ⇒ string
generate a filename for the log, with or without a timestamp
33 34 35 36 37 38 39 40 |
# File 'lib/update_repo/logger.rb', line 33 def generate_filename if @cmd[:timestamp] name = 'updaterepo-' + Time.new.strftime('%y%m%d-%H%M%S') + '.log' else name = 'updaterepo.log' end File.(File.join('~/', name)) end |
#logfile ⇒ string
Return a string containing the logfile name and full path.
71 72 73 |
# File 'lib/update_repo/logger.rb', line 71 def logfile @logfile.path end |
#output(*string) ⇒ void
This method returns an undefined value.
this function will simply pass the given string to ‘print’, and also log to file if that is specified.
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/update_repo/logger.rb', line 46 def output(*string) # nothing to screen if we want to be --quiet unless @cmd[:quiet] # log header and footer to screen regardless print(*string) if @cmd[:verbose] || !repo_text? end # log to file if that has been enabled return unless @cmd[:log] @logfile.write(string.join('').gsub(/\e\[(\d+)(;\d+)*m/, '')) end |
#repo_text? ⇒ boolean
returns non nil if we have been called originally by one of the Repo update output functions.
79 80 81 82 83 84 85 86 87 |
# File 'lib/update_repo/logger.rb', line 79 def repo_text? # get calling function - need to skip first 2, also remove 'block in ' # prefix if exists calling_fn = caller_locations[2].label.gsub(/block in /, '') # array with the functions we want to skip repo_output = %w(do_update handle_output skip_repo update) # return TRUE if DOES match, FALSE otherwise. repo_output.include?(calling_fn) ? true : false end |
#repostat(status) ⇒ void
This method returns an undefined value.
function repostat - outputs a coloured char depending on the status hash, but not if we are in quiet or verbose mode.
61 62 63 64 65 66 67 |
# File 'lib/update_repo/logger.rb', line 61 def repostat(status) # only print if not quiet and not verbose! return if @cmd[:quiet] || @cmd[:verbose] @legend.each do |key, value| print value[:char].send(value[:color].to_sym) if status[key] end end |