Sha256: 8ca7da6598cc016f962451fa417f4d33d74381eae35a27ba1c4f604b946554e2

Contents?: true

Size: 604 Bytes

Versions: 3

Compression:

Stored size: 604 Bytes

Contents

# frozen_string_literal: true

require 'singleton'
require 'peddler/errors/error'

module Peddler
  module Errors
    # @api private
    class ClassGenerator
      include Singleton

      def self.call(name)
        instance.generate(name)
      end

      def initialize
        @mutex = Mutex.new
      end

      def generate(name)
        with_mutex do
          return Errors.const_get(name) if Errors.const_defined?(name)
          Errors.const_set(name, Class.new(Error))
        end
      end

      private

      def with_mutex
        @mutex.synchronize { yield }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
peddler-2.0.4 lib/peddler/errors/class_generator.rb
peddler-2.0.3 lib/peddler/errors/class_generator.rb
peddler-2.0.0 lib/peddler/errors/class_generator.rb