Sha256: a8b1e664b5f89713d8bce2a15e1086178fffad75786d0d6ed3579d63c7c1a140

Contents?: true

Size: 1.24 KB

Versions: 7

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true

# @api private
# @since 0.5.0
class SmartCore::Initializer::ExtensionDefiner
  # @param processed_klass [Class]
  # @return [void]
  #
  # @api private
  # @since 0.5.0
  def initialize(processed_klass)
    @processed_klass = processed_klass
    @definition_lock = Mutex.new
  end

  # @param raw_extension [Proc]
  # @return [void]
  #
  # @api private
  # @since 0.5.0
  def append_extension(raw_extension)
    thread_safe do
      extension = build_extension(raw_extension)
      extend_initialization_flow(extension)
    end
  end

  private

  # @return [Class]
  #
  # @api private
  # @since 0.5.0
  attr_reader :processed_klass

  # @param raw_extension [Proc]
  # @return [SmartCore::Initializar::Extension]
  #
  # @api private
  # @since 0.5.0
  def build_extension(raw_extension)
    SmartCore::Initializer::Extension.new(raw_extension)
  end

  # @param extension [SmartCore::Initializer::Extension]
  # @return [void]
  #
  # @api private
  # @since 0.5.0
  def extend_initialization_flow(extension)
    processed_klass.__initialization_extensions__ << extension
  end

  # @param block [Proc]
  # @return [void]
  #
  # @api private
  # @since 0.5.0
  def thread_safe(&block)
    @definition_lock.synchronize(&block)
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
smart_core-0.8.1 lib/smart_core/initializer/extension_definer.rb
smart_core-0.8.0 lib/smart_core/initializer/extension_definer.rb
smart_core-0.7.0 lib/smart_core/initializer/extension_definer.rb
smart_core-0.6.0 lib/smart_core/initializer/extension_definer.rb
smart_core-0.5.2 lib/smart_core/initializer/extension_definer.rb
smart_core-0.5.1 lib/smart_core/initializer/extension_definer.rb
smart_core-0.5.0 lib/smart_core/initializer/extension_definer.rb