Sha256: f367b3589c81a4b949a9029a1464b2e56d7ca8df7640c7d0ad54fe1bdf6fcacd

Contents?: true

Size: 1.37 KB

Versions: 56

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

require 'ruby-progressbar'
require 'avm/launcher/instances/base'

module EacLauncher
  class Context
    class InstanceDiscovery
      attr_reader :instances

      def initialize(context)
        @context = context
        @progress = ::ProgressBar.create(title: 'Instance discovery', total: 1)
        @instances = path_instances(@context.root, nil)
      ensure
        @progress&.finish
      end

      private

      def path_instances(path, parent_instance)
        update_progress_format(path)
        on_rescued_path_instances(path) do |r|
          if path.project?
            parent_instance = ::Avm::Launcher::Instances::Base.instanciate(path, parent_instance)
            r << path
          end
          children = path.children
          update_progress_count(children)
          r.concat(children.flat_map { |c| path_instances(c, parent_instance) })
        end
      end

      def on_rescued_path_instances(path)
        r = []
        begin
          yield(r) if path.included?
        rescue StandardError => e
          warn("#{path}: #{e}")
        end
        r
      end

      def update_progress_format(path)
        @progress.format = "%t (Paths: %c/%C, Current: #{path.logical}) |%B| %a"
      end

      def update_progress_count(children)
        @progress.total += children.count
        @progress.increment
      end
    end
  end
end

Version data entries

56 entries across 56 versions & 1 rubygems

Version Path
avm-tools-0.99.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.98.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.97.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.96.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.95.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.94.3 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.94.2 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.94.1 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.94.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.93.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.92.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.91.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.90.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.89.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.88.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.87.1 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.87.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.86.0 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.85.1 lib/eac_launcher/context/instance_discovery.rb
avm-tools-0.85.0 lib/eac_launcher/context/instance_discovery.rb