Sha256: 379cb0332536a58f2b09b57599a48631cc4ba88f1d3df9cf91211d497ae4131e

Contents?: true

Size: 1.3 KB

Versions: 13

Compression:

Stored size: 1.3 KB

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_method :[], :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")
      new_key_error(message, key_error).tap do |error|
        error.set_backtrace(key_error.backtrace)
      end
    end

    # detailed_message introduced in Ruby 3.2 for cleaner integration with
    # did_you_mean. See https://bugs.ruby-lang.org/issues/18564
    if KeyError.method_defined?(:detailed_message)
      def new_key_error(message, key_error)
        KeyError.new(message, key: key_error.key, receiver: key_error.receiver)
      end
    else
      def new_key_error(message, _)
        KeyError.new(message)
      end
    end
  end
end

Version data entries

13 entries across 12 versions & 3 rubygems

Version Path
factory_bot-6.5.1 lib/factory_bot/registry.rb
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.1.0/gems/factory_bot-6.5.0/lib/factory_bot/registry.rb
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.0/lib/factory_bot/registry.rb
factory_bot-6.5.0 lib/factory_bot/registry.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/factory_bot-6.4.6/lib/factory_bot/registry.rb
factory_bot-6.4.6 lib/factory_bot/registry.rb
factory_bot-6.4.5 lib/factory_bot/registry.rb
factory_bot-6.4.4 lib/factory_bot/registry.rb
factory_bot-6.4.3 lib/factory_bot/registry.rb
factory_bot-6.4.2 lib/factory_bot/registry.rb
factory_bot-6.4.1 lib/factory_bot/registry.rb
factory_bot-6.4.0 lib/factory_bot/registry.rb
factory_bot-6.3.0 lib/factory_bot/registry.rb