Sha256: 02da5f92adb324aab88e61f2957d0b20320b76d3b6390838d76780ef7c9b6e4e

Contents?: true

Size: 886 Bytes

Versions: 4

Compression:

Stored size: 886 Bytes

Contents

require "active_support/core_ext/hash/indifferent_access"

module FactoryBot
  class Registry
    include Enumerable

    attr_reader :name

    def initialize(name)
      @name = name
      @items = ActiveSupport::HashWithIndifferentAccess.new
    end

    def clear
      @items.clear
    end

    def each(&block)
      @items.values.uniq.each(&block)
    end

    def find(name)
      @items.fetch(name)
    rescue KeyError => e
      raise key_error_with_custom_message(e)
    end

    alias [] find

    def register(name, item)
      @items[name] = item
    end

    def registered?(name)
      @items.key?(name)
    end

    private

    def key_error_with_custom_message(key_error)
      message = key_error.message.sub("key not found", "#{@name} not registered")
      error = KeyError.new(message)
      error.set_backtrace(key_error.backtrace)
      error
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
factory_bot-6.1.0 lib/factory_bot/registry.rb
factory_bot-6.0.2 lib/factory_bot/registry.rb
factory_bot-6.0.1 lib/factory_bot/registry.rb
factory_bot-6.0.0 lib/factory_bot/registry.rb