39 lines
781 B
Ruby
39 lines
781 B
Ruby
# ©AngelaMos | 2026
|
|
# chains.rb
|
|
# frozen_string_literal: true
|
|
|
|
module Marshalsea
|
|
module Chains
|
|
class UnknownChainError < StandardError; end
|
|
|
|
@registry = []
|
|
|
|
class << self
|
|
def registry
|
|
@registry.dup.freeze
|
|
end
|
|
|
|
def register(chain)
|
|
@registry << chain unless @registry.include?(chain)
|
|
end
|
|
|
|
def all
|
|
registry
|
|
end
|
|
|
|
def find(name)
|
|
all.find { |chain| chain.chain_name == name } ||
|
|
raise(UnknownChainError, name.to_s)
|
|
end
|
|
|
|
def for_version(gem_name, version)
|
|
all.select { |chain| chain.target_gem == gem_name && chain.affects?(version) }
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
require_relative "chains/base"
|
|
|
|
Dir[File.join(__dir__, "chains", "*.rb")].each { |chain| require chain }
|