From: dc Date: 2008-12-07T23:58:46+09:00 Subject: creating a DSL: adding random methods hi - I'm trying to create a simple DSL, using method missing. i want to be able to add different event logic for different instances, defined in their own files. trivial example: # eg in fred.rb event :say do "hi this is fred!" end # and joe.rb event :say do "joe doesnt say much" end so i have a class to implement/create the DSL methods: def event evt, &block puts "event: #{evt} , #{event}" str = " def #{evt} #{block} end " puts str self.class.class_eval(str) end after loading the individual fred.rb file in class Brain def self.load(filename) dsl = new dsl.instance_eval(File.read(filename)) end then when the event XX do is encountered, i am getting: ArgumentError: ./parser.rb:37:in ‘event’: wrong number of arguments (0 for 1) # this is the method call event :say do puts ".code here.." end # calling this def event evt, &block i was expecting "say" to be passed as the evt (method name) and block to be the code block after do. perhaps i need to yield something back to the caller? appreciate any tips on this! /dc