class SimplyGenius::Atmos::CLI

The command line interface to atmos

Public Class Methods

description() click to toggle source
# File lib/simplygenius/atmos/cli.rb, line 19
      def self.description
        desc = <<-DESC
          Atmos version #{VERSION}
    
          Runs The atmos command line application
    
          e.g.
    
          atmos --help
        DESC
        desc.split("\n").collect(&:strip).join("\n")
      end
run(invocation_path = File.basename($PROGRAM_NAME), arguments = ARGV, context = {}) click to toggle source
Calls superclass method
# File lib/simplygenius/atmos/cli.rb, line 213
def run(invocation_path = File.basename($PROGRAM_NAME), arguments = ARGV, context = {})
  begin
    super
  rescue SystemExit => e
    if ! e.success?
      logger.log_exception(e, "Failure exit", level: :debug)
      logger.error(e.message)
      raise
    end
  rescue Exception => e
    logger.log_exception(e, "Unhandled exception", level: :debug)
    logger.error(e.message)
    exit!
  end
end

Public Instance Methods

default_color?() click to toggle source
# File lib/simplygenius/atmos/cli.rb, line 62
def default_color?
   $stdout.tty?
end
execute() click to toggle source
# File lib/simplygenius/atmos/cli.rb, line 103
def execute
  logger.info "Atmos Version #{VERSION}"
end
fetch_latest_version() click to toggle source
# File lib/simplygenius/atmos/cli.rb, line 141
def fetch_latest_version
  begin
    latest_ver = JSON.parse(URI.open("https://rubygems.org/api/v1/versions/simplygenius-atmos/latest.json").read)['version']
  rescue => e
    latest_ver = "[Version Fetch Failed]"
    logger.log_exception(e, "Couldn't check latest atmos gem version", level: :debug)
  end
  latest_ver
end
parse(arguments) click to toggle source

hook into clamp lifecycle to force logging setup even when we are calling a subcommand

Calls superclass method
# File lib/simplygenius/atmos/cli.rb, line 178
def parse(arguments)
  super
  if Atmos.config.nil?
    Atmos.config = Config.new(atmos_env, atmos_group)
    log = Atmos.config.is_atmos_repo? && log? ? "atmos.log" : nil
    level = :info
    level = :debug if debug?
    level = :error if quiet?

    Logging.setup_logging(level, color?, log)

    override_list.each do |o|
      k, v = o.split("=")
      v = YAML.load(v)
      logger.debug("Overriding config '#{k}' = #{v.inspect}")
      Atmos.config.[]=(k, v, additive: false)
    end

    UI.color_enabled = color?

    Atmos.config.add_user_load_path(*load_path_list)
    Atmos.config.plugin_manager.load_plugins

    # So we can show just the version with the -v flag
    if version?
      logger.info "Atmos Version #{VERSION}"
      exit(0)
    end

    version_check(VERSION)
  end
end
version_check(atmos_version) click to toggle source
# File lib/simplygenius/atmos/cli.rb, line 151
def version_check(atmos_version)

  required_ver = Atmos.config["atmos.version_requirement"]
  if required_ver.present?
    case required_ver

    when "latest"
      latest_ver = fetch_latest_version

      if latest_ver != atmos_version
        raise "The atmos version (#{atmos_version}) does not match the given requirement (latest: #{latest_ver})"
      end

    when /[~<>=]*\s*[\d\.]*/
      if ! Gem::Dependency.new('', required_ver).match?('', atmos_version)
        raise "The atmos version (#{atmos_version}) does not match the given requirement (#{required_ver})"
      end

    else
      raise "Invalid atmos.version_requirement, should be 'latest' or in a gem dependency form"
    end
  end

end