class DSeL::DSL::Nodes::Direct
Public Instance Methods
extend_env()
click to toggle source
# File lib/dsel/dsl/nodes/direct.rb, line 11 def extend_env [ Environment, Mixins::Environment::IvarExplorer ] end
reset_methods()
click to toggle source
# File lib/dsel/dsl/nodes/direct.rb, line 18 def reset_methods [ :instance_variables, :method_missing ] end
Private Instance Methods
capture_subject()
click to toggle source
# File lib/dsel/dsl/nodes/direct.rb, line 38 def capture_subject @original_methods = reset_methods.map do |m| @subject.instance_eval do method( m ) if respond_to? m end end.compact end
cleanup_environment()
click to toggle source
# File lib/dsel/dsl/nodes/direct.rb, line 34 def cleanup_environment restore_subject end
decorate_subject()
click to toggle source
# File lib/dsel/dsl/nodes/direct.rb, line 46 def decorate_subject # We could use @subject.extend but that only works the first time. extend_env.each do |mod| mod.instance_methods( true ).each do |m| @subject.instance_eval do define_singleton_method m, mod.instance_method( m ) end end end end
prepare_environment()
click to toggle source
# File lib/dsel/dsl/nodes/direct.rb, line 27 def prepare_environment capture_subject decorate_subject @environment = @subject end
restore_subject()
click to toggle source
# File lib/dsel/dsl/nodes/direct.rb, line 57 def restore_subject cmethods = @subject.methods extend_env.each do |mod| mod.instance_methods( true ).each do |m| next if !cmethods.include?( m ) @subject.instance_eval( "undef :'#{m}'" ) end end @original_methods.each do |m| @subject.define_singleton_method m.name, &m end end