Sha256: 6eec2b24c00c3c295a17f4ab8300339789718c5bb82e9582f1f82051172c9384

Contents?: true

Size: 917 Bytes

Versions: 2

Compression:

Stored size: 917 Bytes

Contents

require "extensible/extension_kernel_template".freeze
require "extensible/utils".freeze

module Extensible
  ##
  # A custom ExtensionKernelTemplate clone that is extended by Extensible to make it, well, extensible.
  ExtensionKernel = ExtensionKernelTemplate.clone.module_eval do
    private

    def extended(submodule)
      raise_type_error_if_submodule_is_not_a_module(submodule)

      super

      unless Utils.own_const_defined?(submodule, :ExtensionKernel)
        kernel = ExtensionKernelTemplate.clone
        submodule.const_set(:ExtensionKernel, kernel)
        submodule.extend kernel
      end

      self
    end

    def raise_type_error_if_submodule_is_not_a_module(submodule)
      return if submodule.class == Module
      raise TypeError, "expected to extend object of type `Module` with module `#{name}`, got `#{submodule.class}` " \
                       "instead"
    end

    self
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
extensible-0.1.3 lib/extensible/extension_kernel.rb
extensible-0.1.2 lib/extensible/extension_kernel.rb