Sha256: 3f1a982a5b1690d3fc3eb666753e51a4535b48be368953ed7c7ea8ac8e60d467

Contents?: true

Size: 1.03 KB

Versions: 6

Compression:

Stored size: 1.03 KB

Contents

module Mutant
  # Registry for mapping AST types to classes
  class Registry
    include Concord.new(:contents)

    # Initialize object
    #
    # @return [undefined]
    def initialize
      super({})
    end

    # Raised when the type is an invalid type
    RegistryError = Class.new(TypeError)

    # Register class for AST node class
    #
    # @param [Symbol] type
    # @param [Class] class
    #
    # @return [self]
    def register(type, klass)
      fail RegistryError, "Invalid type registration: #{type.inspect}" unless AST::Types::ALL.include?(type)
      fail RegistryError, "Duplicate type registration: #{type.inspect}" if contents.key?(type)
      contents[type] = klass
      self
    end

    # Lookup class for node
    #
    # @param [Symbol] type
    #
    # @return [Class]
    #
    # @raise [ArgumentError]
    #   raises argument error when class cannot be found
    def lookup(type)
      contents.fetch(type) do
        fail RegistryError, "No entry for: #{type.inspect}"
      end
    end

  end # Registry
end # Mutant

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mutant-0.8.16 lib/mutant/registry.rb
mutant-0.8.15 lib/mutant/registry.rb
mutant-0.8.14 lib/mutant/registry.rb
mutant-0.8.13 lib/mutant/registry.rb
mutant-0.8.12 lib/mutant/registry.rb
mutant-0.8.11 lib/mutant/registry.rb