Class: Module

Inherits:
Object show all
Defined in:
lib/contextr/core_ext/module.rb

Instance Method Summary collapse

Instance Method Details

#in_layer(layer_symbol, &block) ⇒ Object

Adds context-dependent behaviour to instances.

class Klass
 def name
   "Klass"
 end

 in_layer :hello do
   def name
     "Hello from #{super}.\n"
   end
 end
end

k = Klass.new
k.name                    #=> "Klass.\n"
ContextR::with_layer :hello do
 k.name                  #=> "Hello from Klass.\n"
end
k.name                    #=> "Klass.\n"

Note: in_layer automatically generates the inner module and attaches it to the given layer. It is guaranteed, that the inner module used for method definitons will always be the same for any layer x class combination.



27
28
29
30
31
32
33
34
35
36
# File 'lib/contextr/core_ext/module.rb', line 27

def in_layer(layer_symbol, &block)
  extension = ContextR::stored_module_definitions[layer_symbol][self]

  return_value = extension.module_eval(&block) if block_given?

  ContextR::layer_by_symbol(layer_symbol).add_method_collection(self, 
                                                                extension) 

  block_given? ? return_value : extension
end