Module: Kernel

Defined in:
lib/dyna_mo/environment.rb

Instance Method Summary collapse

Instance Method Details

#dynamo_context(context_name, &block) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/dyna_mo/environment.rb', line 41

def dynamo_context(context_name, &block)
  raise "block is not given for dynamo_context" unless block_given?
  # get context, apply context and yield block
  ::DynaMo::Environment.synchronize do
    ::DynaMo::Environment.apply_environment
  end
  Thread.current[:dynamo_contexts] ||= {}
  Thread.current[:dynamo_contexts][context_name] = true
  begin
    yield
  ensure
    Thread.current[:dynamo_contexts].delete(context_name)
  end
end

#dynamo_define(target_name_or_instance, default_context_name, &block) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/dyna_mo/environment.rb', line 30

def dynamo_define(target_name_or_instance, default_context_name, &block)
  raise "block is not given for dynamo_define" unless block_given?
  # target_name_or_instance accepts module instance, to help programmer to avoid typo
  target = target_name_or_instance.is_a?(Module) ? target_name_or_instance.name : target_name_or_instance.to_s
  ::DynaMo::Environment.synchronize do
    # get/create context object and evaluate block with it
    context = ::DynaMo::Environment.contexts(target, default_context_name)
    context.instance_exec(&block)
  end
end

#dynamo_super(*args) ⇒ Object



56
57
58
# File 'lib/dyna_mo/environment.rb', line 56

def dynamo_super(*args)
  Thread.current[:dynamo_stack].last.call(*args)
end