app/models/coupdoeil/popover/registry.rb
# frozen_string_literal: true module Coupdoeil class Popover class Registry attr_reader :registry, :semaphore def initialize @semaphore = Mutex.new @registry = {} end def register(type, klass) = @semaphore.synchronize { @registry[type] = klass } def lookup(type) = @semaphore.synchronize { @registry.fetch(type) } def safe_lookup(type) = @semaphore.synchronize { @registry[type] } def lookup_or_register(type) safe_lookup(type) || begin register(type, (type.classify + "Popover").constantize) end end end end end