Sha256: 4acc5735481ef228114241543e2c02d917e0e3e2bbbeb5e3c66c6cba73623f3a

Contents?: true

Size: 1.77 KB

Versions: 3

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

class Runger::Loaders::Registry
  attr_reader :registry

  def initialize
    @registry = []
  end

  def prepend(id, handler = nil, &block)
    handler ||= block
    insert_at(0, id, handler)
  end

  def append(id, handler = nil, &block)
    handler ||= block
    insert_at(registry.size, id, handler)
  end

  def insert_before(another_id, id, handler = nil, &block)
    ind = registry.find_index { |(hid, _)| hid == another_id }
    raise(ArgumentError, "Loader with ID #{another_id} hasn't been registered") if ind.nil?

    handler ||= block
    insert_at(ind, id, handler)
  end

  def insert_after(another_id, id, handler = nil, &block)
    ind = registry.find_index { |(hid, _)| hid == another_id }
    raise(ArgumentError, "Loader with ID #{another_id} hasn't been registered") if ind.nil?

    handler ||= block
    insert_at(ind + 1, id, handler)
  end

  def override(id, handler)
    find(id).then do |id_to_handler|
      raise(ArgumentError, "Loader with ID #{id} hasn't been registered") if id_to_handler.nil?

      id_to_handler[1] = handler
    end
  end

  def delete(id)
    find(id).then do |id_to_handler|
      raise(ArgumentError, "Loader with ID #{id} hasn't been registered") if id_to_handler.nil?

      registry.delete(id_to_handler)
    end
  end

  def each(&block)
    registry.each(&block)
  end

  def freeze = registry.freeze

  private

  def insert_at(index, id, handler)
    raise(ArgumentError, "Loader with ID #{id} has been already registered") unless find(id).nil?

    registry.insert(index, [id, handler])
  end

  def find(id)
    registry.find { |(hid, _)| hid == id }
  end
end

require 'runger/loaders/base'
require 'runger/loaders/doppler'
require 'runger/loaders/ejson'
require 'runger/loaders/env'
require 'runger/loaders/yaml'

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
runger_config-5.2.0 lib/runger/loaders.rb
runger_config-5.1.0 lib/runger/loaders.rb
runger_config-5.0.0 lib/runger/loaders.rb