Sha256: ec30cdbbc07d8ef78cb17fd558148b14bdc519bd78b9e181a4e235148959a86d

Contents?: true

Size: 1.88 KB

Versions: 1

Compression:

Stored size: 1.88 KB

Contents

require 'tty-which'

require 'pdk/util'
require 'pdk/cli/util/spinner'

module PDK
  module CLI
    class ExecGroup
      def initialize(message, opts = {})
        @options = opts.merge(PDK::CLI::Util.spinner_opts_for_platform)

        if PDK::CLI::Util.interactive?
          @spinner = if parallel?
                       TTY::Spinner::Multi.new("[:spinner] #{message}", @options)
                     else
                       TTY::Spinner.new("[:spinner] #{message}", @options)
                     end
          @spinner.auto_spin
        end

        @threads_or_procs = []
        @exit_codes = []
      end

      def parallel?
        @options[:parallel].nil? ? true : @options[:parallel]
      end

      def register(&block)
        raise PDK::CLI::FatalError, _('No block registered') unless block_given?

        @threads_or_procs << if parallel?
                               Thread.new do
                                 GettextSetup.initialize(File.absolute_path('../../../locales', File.dirname(__FILE__)))
                                 GettextSetup.negotiate_locale!(GettextSetup.candidate_locales)
                                 @exit_codes << yield
                               end
                             else
                               block
                             end
      end

      def add_spinner(message, opts = {})
        return unless PDK::CLI::Util.interactive?
        @spinner.register("[:spinner] #{message}", @options.merge(opts).merge(PDK::CLI::Util.spinner_opts_for_platform))
      end

      def exit_code
        if parallel?
          @threads_or_procs.each(&:join)
        else
          @exit_codes = @threads_or_procs.map(&:call)
        end

        exit_code = @exit_codes.max

        if exit_code.zero? && @spinner
          @spinner.success
        elsif @spinner
          @spinner.error
        end

        exit_code
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pdk-1.13.0 lib/pdk/cli/exec_group.rb