Trouble using Irb as Ruby Console

B

Bryan Richardson

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
#<Antfarm::Framework:0xb7c4c16c>
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!!!
 
B

Bryan Richardson

Oops... the console results should say 'App' instead of 'Antfarm'. This
discrepancy has nothing to do with my problem... :)
 
J

Joel VanderWerf

Bryan said:
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
#<Antfarm::Framework:0xb7c4c16c>
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,077
Latest member
SangMoor21

Latest Threads

Top