Module: Rubyists::Linear::CLI::Caller

Includes:
SemanticLogger::Loggable
Included in:
Console, Team::List, WhoAmI
Defined in:
lib/linear/cli/caller.rb

Overview

This module is prepended to all commands to log their calls

Class Method Summary collapse

Class Method Details

.prepended(mod) ⇒ Object

rubocop:disable Metrics/MethodLength, Metrics/AbcSize



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/linear/cli/caller.rb', line 10

def self.prepended(mod) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
  # Global options for all commands
  mod.instance_eval do
    option :output, type: :string, default: 'text', values: %w[text json], desc: 'Output format'
    option :debug,
           type: :integer,
           aliases: ['-D'],
           default: 0,
           desc: 'Debug level (greater than 0 to see backtraces)'
  end

  Caller.class_eval do
    # Wraps the :call method so the debug option is honored, and we can trace the call
    # as well as handle any exceptions that are raised
    define_method :call do |**method_args| # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
      debug = method_args[:debug].to_i
      Rubyists::Linear.verbosity = debug
      logger.trace "Calling #{self.class} with #{method_args}"
      super(**method_args)
    rescue SmellsBad => e
      TTY::Prompt.new.error e.message
      TTY::Prompt.new.error '** This smells bad! Bailing. **'
      exit 22
    rescue NotFoundError => e
      TTY::Prompt.new.error e.message
      TTY::Prompt.new.error '** Record not found, Cannot Continue **'
      exit 66
    rescue StandardError => e
      TTY::Prompt.new.error "What the heck is this? #{e}"
      TTY::Prompt.new.error '** WTH? Cannot Continue **'
      logger.error e.backtrace.join("\n") if debug.positive?
      exit 88
    end
  end
end