13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/trax/core/mixable.rb', line 13
def mixin(key, options = {})
raise ::Trax::Core::Errors::MixinNotRegistered.new(
source: self.name,
mixin: key,
mixin_namespace: mixin_namespace
) unless mixin_namespace.mixin_registry.key?(key)
mixin_module = mixin_namespace.mixin_registry[key]
self.registered_mixins[key] = mixin_module
self.class_eval do
include(mixin_module) unless self.ancestors.include?(mixin_module)
options = {} if options.is_a?(TrueClass)
options = { options => true } if options.is_a?(Symbol)
if mixin_module.instance_variable_defined?(:@_before_mixed_in_block)
_before_mixed_in_block = mixin_module.instance_variable_get(:@_before_mixed_in_block)
instance_exec(&_before_mixed_in_block)
end
if mixin_module.instance_variable_defined?(:@_on_mixed_in_block)
_on_mixed_in_block = mixin_module.instance_variable_get(:@_on_mixed_in_block)
instance_exec(options, &_on_mixed_in_block)
end
end
end
|