Module: Extensible
- Extended by:
- ExtensionKernel
- Defined in:
- lib/extensible.rb,
lib/extensible/utils.rb,
lib/extensible/version.rb,
lib/extensible/extension_kernel.rb,
lib/extensible/extension_kernel_template.rb
Overview
Use Extensible on your custom extensions in order to get a set of advantages over traditional extensions that override the Module#extended method directly. When extending Extensible you will be able to define your initialization code (similar to using Module#extended) via the when_extended method.
module MyExtension
extend Extensible
when_extended {|m| puts "#{self} has extended #{m}." }
end
class MyClass
extend MyExtension
end #=> MyExtension has extended MyClass.
Extensible is, itself, extensible. This means that you will be able to extend it further or bundle it together with other extensible modules by including it in your module.
module MyExtensibleExtension
include Extensible
def custom_when_extended(&block)
puts "Defining initialization code..."
when_extended &block
end
end
module MyExtension
extend MyExtensibleExtension
custom_when_extended {|m| puts "#{self} has extended #{m}." }
end #=> Defining initialization code...
class MyClass
extend MyExtension
end #=> MyExtension has extended MyClass.
Defined Under Namespace
Modules: ExtensionKernelTemplate, Utils
Constant Summary collapse
- VERSION =
Current version of Extensible.
"0.1.1".freeze
- ExtensionKernel =
A custom ExtensionKernelTemplate clone that is extended by Extensible to make it, well, extensible.
ExtensionKernelTemplate.clone.module_eval do private def extended(submodule) super unless Utils.own_const_defined?(submodule, :ExtensionKernel) kernel = ExtensionKernelTemplate.clone submodule.const_set(:ExtensionKernel, kernel) submodule.extend kernel end self end self end