lib/pdk/cli/exec_group.rb in pdk-2.3.0 vs lib/pdk/cli/exec_group.rb in pdk-2.4.0
- old
+ new
@@ -1,104 +1,104 @@
-require 'pdk'
-
-module PDK
- module CLI
- class ExecGroup
- # Execution Group (ExecGroup) factory.
- #
- # @param message [String] A name or message for this group. Provided for backwards compatibility during refactor
- #
- # @param create_options [Hash] A hash options used during creation of the ExecGroup. This are not passed to the new object
- # @option create_options :parallel [Boolean] Whether the group should be executed in Parallel (True) or Serial (False)
- #
- # @param group_opts [Hash] A hash of options used to configure the execution group. Provided for backwards compatibility during refactor
- #
- # @return [ExecGroup]
- def self.create(message, create_options = {}, group_opts = {})
- if create_options[:parallel]
- ParallelExecGroup.new(message, group_opts)
- else
- SerialExecGroup.new(message, group_opts)
- end
- end
-
- # Base class for an Exection Group
- #
- # @param message [String] A name or message for this group. Provided for backwards compatibility during refactor
- #
- # @param opts [Hash] A hash of options used to configure the execution group. Provided for backwards compatibility during refactor
- #
- # @api private
- def initialize(_message, opts = {})
- @options = opts
- end
-
- # Register something to execute as a group
- #
- # @param block [Block] A block of ruby to execute
- #
- # @api private
- def register(&_block)
- raise PDK::CLI::FatalError, _('No block registered') unless block_given?
- end
-
- # The return code of running all registered blocks
- #
- # @return [int] The highest exit code from the blocks
- #
- # @abstract
- def exit_code; end
- end
-
- # Executes registered blocks in serial
- #
- # @see PDK::CLI::ExecGroup
- class SerialExecGroup < ExecGroup
- def initialize(message, opts = {})
- super(message, opts)
- @procs = []
- end
-
- def register(&block)
- super(&block)
-
- @procs << block
- end
-
- def exit_code
- exit_codes = @procs.map(&:call)
- exit_codes.nil? ? 0 : exit_codes.max
- end
- end
-
- # Executes registered blocks in parallel using Ruby threads
- #
- # @see PDK::CLI::ExecGroup
- class ParallelExecGroup < ExecGroup
- def initialize(message, opts = {})
- super(message, opts)
- @threads = []
- @exit_codes = []
- end
-
- def register(&block)
- super(&block)
-
- # TODO: This executes the thread immediately, whereas the SerialExecGroup executes only when exit_code
- # is called. Need to change this so it uses a kind of ThreadPool to limit to number on concurrent jobs
- # and only starts on the call to exit_code
- # e.g. max_threads = No. of CPUs
- @threads << Thread.new do
- GettextSetup.initialize(File.absolute_path('../../../locales', File.dirname(__FILE__)))
- GettextSetup.negotiate_locale!(GettextSetup.candidate_locales)
- @exit_codes << yield
- end
- end
-
- def exit_code
- @threads.each(&:join)
- return 0 if @exit_codes.empty?
- @exit_codes.max
- end
- end
- end
-end
+require 'pdk'
+
+module PDK
+ module CLI
+ class ExecGroup
+ # Execution Group (ExecGroup) factory.
+ #
+ # @param message [String] A name or message for this group. Provided for backwards compatibility during refactor
+ #
+ # @param create_options [Hash] A hash options used during creation of the ExecGroup. This are not passed to the new object
+ # @option create_options :parallel [Boolean] Whether the group should be executed in Parallel (True) or Serial (False)
+ #
+ # @param group_opts [Hash] A hash of options used to configure the execution group. Provided for backwards compatibility during refactor
+ #
+ # @return [ExecGroup]
+ def self.create(message, create_options = {}, group_opts = {})
+ if create_options[:parallel]
+ ParallelExecGroup.new(message, group_opts)
+ else
+ SerialExecGroup.new(message, group_opts)
+ end
+ end
+
+ # Base class for an Exection Group
+ #
+ # @param message [String] A name or message for this group. Provided for backwards compatibility during refactor
+ #
+ # @param opts [Hash] A hash of options used to configure the execution group. Provided for backwards compatibility during refactor
+ #
+ # @api private
+ def initialize(_message, opts = {})
+ @options = opts
+ end
+
+ # Register something to execute as a group
+ #
+ # @param block [Block] A block of ruby to execute
+ #
+ # @api private
+ def register(&_block)
+ raise PDK::CLI::FatalError, _('No block registered') unless block_given?
+ end
+
+ # The return code of running all registered blocks
+ #
+ # @return [int] The highest exit code from the blocks
+ #
+ # @abstract
+ def exit_code; end
+ end
+
+ # Executes registered blocks in serial
+ #
+ # @see PDK::CLI::ExecGroup
+ class SerialExecGroup < ExecGroup
+ def initialize(message, opts = {})
+ super(message, opts)
+ @procs = []
+ end
+
+ def register(&block)
+ super(&block)
+
+ @procs << block
+ end
+
+ def exit_code
+ exit_codes = @procs.map(&:call)
+ exit_codes.nil? ? 0 : exit_codes.max
+ end
+ end
+
+ # Executes registered blocks in parallel using Ruby threads
+ #
+ # @see PDK::CLI::ExecGroup
+ class ParallelExecGroup < ExecGroup
+ def initialize(message, opts = {})
+ super(message, opts)
+ @threads = []
+ @exit_codes = []
+ end
+
+ def register(&block)
+ super(&block)
+
+ # TODO: This executes the thread immediately, whereas the SerialExecGroup executes only when exit_code
+ # is called. Need to change this so it uses a kind of ThreadPool to limit to number on concurrent jobs
+ # and only starts on the call to exit_code
+ # e.g. max_threads = No. of CPUs
+ @threads << Thread.new do
+ GettextSetup.initialize(File.absolute_path('../../../locales', File.dirname(__FILE__)))
+ GettextSetup.negotiate_locale!(GettextSetup.candidate_locales)
+ @exit_codes << yield
+ end
+ end
+
+ def exit_code
+ @threads.each(&:join)
+ return 0 if @exit_codes.empty?
+ @exit_codes.max
+ end
+ end
+ end
+end