Sha256: f829ce186a70cb9bfec513386ad3e00f457a6c65f3858bdab55eaaead01e8747

Contents?: true

Size: 916 Bytes

Versions: 1

Compression:

Stored size: 916 Bytes

Contents

class ProconBypassMan::Procon::ModeRegistry2
  class Mode
    attr_accessor :name, :binaries, :source_binaries

    def initialize(name: , binaries: )
      self.name = name
      self.binaries = binaries
      self.source_binaries = binaries.dup
    end

    def next_binary
      binary = binaries.shift
      unless binary
        self.binaries = source_binaries.dup
        return binaries.shift
      end
      return binary
    end
  end

  attr_accessor :plugins

  PRESETS = {
    manual: [],
  }

  def initialize
    self.plugins = {}
  end

  def install_plugin(klass)
    if plugins[klass.to_s.to_sym]
      raise "#{klass} mode is already registered"
    end
    plugins[klass.to_s.to_sym] = ->{ klass.binaries }
  end

  def load(name)
    b = PRESETS[name] || plugins[name]&.call || raise("#{name} is unknown mode")
    Mode.new(name: name, binaries: b.dup)
  end

  def presets
    PRESETS
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
procon_bypass_man-0.3.12 lib/procon_bypass_man/procon/mode_registry2.rb