Class: MetaMethods::DslBuilder

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/meta_methods/dsl_builder.rb

Instance Method Summary collapse

Instance Method Details

#context_parent(block) ⇒ Object



27
28
29
30
31
# File 'lib/meta_methods/dsl_builder.rb', line 27

def context_parent block
  block_binding = block.binding

  block_binding.eval 'self'
end

#evaluate_dsl(create_block, destroy_block, execute_block, parent_name = "parent") ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/meta_methods/dsl_builder.rb', line 7

def evaluate_dsl(create_block, destroy_block, execute_block, parent_name="parent")
  begin
    created_object = create_block.kind_of?(Proc) ? create_block.call : create_block

    created_object.instance_variable_set("@#{parent_name}".to_sym, context_parent(execute_block))

    def created_object.method_missing(sym, *args, &block)
      @parent.send sym, *args, &block
    end

    def created_object.respond_to?(sym, include_private = false)
      @parent.respond_to? sym, include_private
    end

    created_object.instance_eval(&execute_block)
  ensure
    destroy_block.call(created_object) if destroy_block && created_object
  end
end