lib/sym/app.rb
require 'sym'
require 'active_support/inflector'
require 'colored2'
module Sym
# The {Sym::App} Module is responsible for handing user input and executing commands.
# Central class in this module is the {Sym::App::CLI} class. However, it is
# recommended that ruby integration with the {Sym::App} module functionality
# is done via the {Sym::Application} class.
#
# Methods in this module are responsible for reporting errors and
# maintaining the future exit code class-global variable.
#
# It also contains several helpers that enable some additional functionality
# on Mac OS-X (such as using KeyChain for storing encryption keys).
#
module App
class << self
attr_accessor :exit_code, :stdin, :stdout, :stderr
end
self.exit_code = 0
self.stdin = $stdin
self.stdout = $stdout
self.stderr = $stderr
def self.out
self.stderr
end
def self.log(level, *args, **opts)
Sym::Constants::Log::LOG.send(level, *args) if opts[:debug]
end
def self.error(config: {},
exception: nil,
type: nil,
details: nil,
reason: nil,
comments: nil,
command: nil)
lines = []
error_type = "#{type || exception.class.name}"
error_details = (details || exception.message)
operation = command ? "to #{command.class.short_name.to_s.humanize.downcase}" : ''
reason = exception.message if exception
if exception && ((config && config[:trace]) || reason == 'Unknown Error')
lines << ("#{error_type.bold.red}:\n#{error_details.red.italic}\n" + ''.normal)
lines << exception.backtrace.join("\n").red.bold if config[:trace]
lines << "\n"
else
lines << "#{" ✖ Sym Error #{operation}:".bold.red}#{(reason ? " #{reason} ".red.italic: " #{error_details}")[0..70]}#{' '.normal}\n"
lines << "#{comments}" if comments
end
error_report = lines.compact.join("\n") || 'Undefined error'
self.out.puts(error_report) if error_report.present?
self.exit_code = 1
end
def self.osx?
Gem::Platform.local.os.eql?('darwin')
end
def self.this_os
Gem::Platform.local.os
end
end
end
require 'sym/app/short_name'
require 'sym/app/args'
require 'sym/app/cli'
require 'sym/app/commands'
require 'sym/app/keychain'
require 'sym/app/output'