Trouble using Irb as Ruby Console

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
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
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!!!

···

from :0
  from :0

--
Thanks!
Bryan
--
Posted via http://www.ruby-forum.com/.

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

···

--
Thanks!
Bryan
--
Posted via http://www.ruby-forum.com/.

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
#<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.

···

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407