Sha256: 9e1830beffc1617812d3eb8ad72a181d60093ff95354ef7cd4f8ea713412b1e5

Contents?: true

Size: 527 Bytes

Versions: 3

Compression:

Stored size: 527 Bytes

Contents

# frozen_string_literal: true

module CobraCommander
  module Registry
    def [](key)
      Class.new(self) do
        define_singleton_method(:key) { key }
        define_method(:key) { key }

        def self.inherited(base)
          super
          superclass.all[key] = base
        end
      end
    end

    def all
      @all ||= {}
    end

    def select(**selector)
      return all.values unless selector.values.any?

      all.filter_map do |key, klass|
        klass if selector[key]
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
cobra_commander-1.1.0 lib/cobra_commander/registry.rb
cobra_commander-1.0.1 lib/cobra_commander/registry.rb
cobra_commander-1.0.0 lib/cobra_commander/registry.rb