From: Joel VanderWerf Date: 2008-12-13T06:51:51+09:00 Subject: Re: Trouble using Irb as Ruby Console Bryan Richardson wrote: > Hello all, > > I'm attempting to convert a command-line driven application into a > console application using Irb. However, I'm having some trouble right > out of the gate. Here's what I have so far: > > module App > class Framework > def use(plugin) > path = "plugins/#{plugin}" > tree = plugin.split('/') > tree.collect! { |x| x.capitalize } > @plugin = Object.const_get("App::#{tree.join('::')}").new > end > > def show_options > @plugin.show_options > end > > def run > @plugin.run > end > end > end > > binding = App::Framework.new > > load 'irb.rb' > IRB.setup(nil) > IRB.conf[:PROMPT][:APP] = IRB.conf[:PROMPT][:SIMPLE] > IRB.conf[:PROMPT][:APP][:PROMPT_I] = 'app > ' > IRB.conf[:PROMPT_MODE] = :APP > > irb = IRB::Irb.new(IRB::WorkSpace.new(binding)) > > IRB.conf[:MAIN_CONTEXT] = irb.context > > trap('SIGINT') do > irb.signal_handle > end > > catch(:IRB_EXIT) do > irb.eval_input > end > > Essentially, I'm setting the App::Framework class to be my Irb context. > When I run this program and try to load a plugin named 'test' using the > 'use' method, I get the following: > > antfarm > use test > ArgumentError: wrong number of arguments > from (irb):1:in `test' > from (irb):1 > from :0 > antfarm > > >>From this, it looks like 'test' might be a keyword in Irb, because when > I use a different plugin name I get the following: > > antfarm > use hello > NameError: undefined local variable or method `hello' for > # > from (irb):1 > from :0 > antfarm > > >>From this, it looks like 'use' might be a keyword as well. I'm having > trouble finding good documentation on Irb Contexts, so if there are any > Irb experts out there please help!!! The string "test" (and also "hello") is getting evaluated. Try putting it in quotes, so that it evals to a string and the #use method is passed the string. -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407