QAPrototype (#91)


module QAPrototype
def method_missing(method_name)
puts “#{method_name} is undefined”
puts “Please define what I should do (end with a newline):”

 (code ||= "") << (line = gets) until line and line.chomp.empty?

 self.class.module_eval do
   define_method(method_name){eval code}
 end

 at_exit do
   puts ""
   puts "class #{self.class}"
   puts "  def #{method_name}"
   code.gsub(/[\r\n]+$/, "").split(/\r*\n/).each{|s| puts " "*4+s}
   puts "  end"
   puts "end"
 end

end
end


class Foo
include QAPrototype
end

3.times do
foo = Foo.new

foo.bar
foo.baz
end


$ ruby test.rb
bar is undefined
Please define what I should do (end with a newline):
@x = 7
@y = 8
@z = self.object_id

baz is undefined
Please define what I should do (end with a newline):
p inspect

"#<Foo:0xb7d7ebfc @x=7, @z=-605293058, @y=8> "
"#<Foo:0xb7d7e954 @x=7, @z=-605293398, @y=8> "

class Foo
def baz
p inspect
end
end

class Foo
def bar
@x = 7
@y = 8
@z = self.object_id
end
end


gegroet,
Erik V. - http://www.erikveen.dds.nl/