Module: Trax::Core::Mixable::ClassMethods

Defined in:
lib/trax/core/mixable.rb

Instance Method Summary collapse

Instance Method Details

#mixin(key, options = {}) ⇒ Object



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

#mixins(*args) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/trax/core/mixable.rb', line 43

def mixins(*args)
  options = args.extract_options!

  if(!options.blank?)
    options.each_pair do |key, val|
      self.mixin(key, val)
    end
  else
    args.map{ |key| mixin(key) }
  end
end