module DSLCompanion::MetaHelper
Public Class Methods
inject_variable(target, name, value)
click to toggle source
# File lib/dsl_companion/meta_helper.rb, line 28 def self.inject_variable(target, name, value) # Inject instance variable in the target context injected_accessor = name.to_s.to_sym injected_instance_variable = "@#{injected_accessor}" already_defined = target.instance_variable_defined? injected_instance_variable logger("DSL Interpreter overriding existing variable '#{injected_instance_variable}'", :warn) if already_defined target.extend MetaHelper target.instance_variable_set injected_instance_variable, value # Defines the method that returns the instance variable and inject into the interpreter's context target.meta_def "#{injected_accessor}" do target.instance_variable_get injected_instance_variable end end
Public Instance Methods
class_def( name, &block )
click to toggle source
Defines an instance method within a class
# File lib/dsl_companion/meta_helper.rb, line 20 def class_def( name, &block ) class_eval { define_method name, &block } end
inject_variable(name, value)
click to toggle source
# File lib/dsl_companion/meta_helper.rb, line 24 def inject_variable(name, value) MetaHelper.inject_variable self, name, value end
meta_def( name, &block )
click to toggle source
Adds method to metaclass
# File lib/dsl_companion/meta_helper.rb, line 15 def meta_def( name, &block ) meta_eval { define_method name, &block } end
meta_eval(&block)
click to toggle source
# File lib/dsl_companion/meta_helper.rb, line 10 def meta_eval(&block) metaclass.instance_eval &block end
metaclass()
click to toggle source
# File lib/dsl_companion/meta_helper.rb, line 4 def metaclass class << self self end end