D
dc
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
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