Calling Irb from inside an application

Hi,

this may be easy to anwer but it is difficult to google for.

While developping I would like to play around with objects from
time to time. Just like this:

irb(main):001:0> class C ; def f ; "F" ; end ; end
=> nil
irb(main):002:0> irb C.new
irb#1(#<C:0xb7910d40>):001:0> f
=> "F"
irb#1(#<C:0xb7910d40>):002:0>

In common my classes are not so easy to type in. So, I would like
to call Irb from somewhere inside the application as I do here:

---->-call_irb.rb---------------
#!/usr/bin/ruby

class C
  def f
    "F"
  end
end

if $0 == __FILE__ then
  require "irb"
  $c = C.new
  IRB.start
end
----<---------------------------

and then

user@host $ ./call_irb.rb
irb(main):001:0> irb $c
irb#1(#<C:0xb7be4ee0>):001:0> f
=> "F"
irb#1(#<C:0xb7be4ee0>):002:0>

Is there a way how I can call C.new’s Irb directly without doing
the long-winded definition of a global variable first? I already
examined the irb sources but this seems to be well-hidden to me.

Thanks in advance and Merry Christmas,

Bertram

Alle martedì 25 dicembre 2007, Bertram S. ha scritto:

irb(main):002:0> irb C.new
class C
----<---------------------------

the long-winded definition of a global variable first? I already
examined the irb sources but this seems to be well-hidden to me.

Thanks in advance and Merry Christmas,

Bertram

Not a direct answer to your question, but can’t you load the file with
the
definition of the class in irb?

Stefano

Merry christmas!

This was mercilessly stolen and adapted from a post on Errs blog (only
google has the answer ;):

require ‘irb’

module IRB
def self.start_session(binding)
IRB.setup(nil)

 workspace = WorkSpace.new(binding)

 if @CONF[:SCRIPT]
   irb = Irb.new(workspace, @CONF[:SCRIPT])
 else
   irb = Irb.new(workspace)
 end

 @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
 @CONF[:MAIN_CONTEXT] = irb.context

 trap("SIGINT") do
   irb.signal_handle
 end

 catch(:IRB_EXIT) do
   irb.eval_input
 end

end
end

def meths(o); puts (o.methods - Class.new.methods).join("\n"); end

def dROP! b
old_args = ARGV
ARGV.size.times { ARGV.shift }

if defined? IRBHelper
foo = Class.new
foo.instance_eval do
include IRBHelper
end
puts “Helper Methods: #{(foo.new.methods -
Class.new.methods).sort.join(’, ')}”
include IRBHelper
end

IRB.start_session b
old_args.each { |a| ARGV << a }
end

Hi James,

Am Dienstag, 25. Dez 2007, 23:01:54 +0900 schrieb James T.:

This was mercilessly stolen and adapted from a post on Errs blog (only
google has the answer ;):

  [...]

old_args = ARGV
ARGV.size.times { ARGV.shift }
[…]
old_args.each { |a| ARGV << a }
[…]

The code is not actually mature. The clearing could be done by an
ARGV.clear; this part won’t work either because old_args will be
cleared as well.

Besides that the solution works perfectly. Thank you very much!

Bertram

On Dec 25, 2007, at 05:08 , Bertram S. wrote:

In common my classes are not so easy to type in. So, I would like
to call Irb from somewhere inside the application as I do here:

if $0 == FILE then
require “irb”
$c = C.new
IRB.start
end

I’m a bit confused. Your subject line IS handled by this code. Indeed,
this is what I grabbed from some of my code when I read the subject
line:

def explore
Object.const_set :“G”, self
require ‘irb’
puts “Your grammar is in the constant G”
IRB.start(FILE)
end

So, what is the actual subject of this question? It doesn’t seem to be
“long-windedness” (below) either.

examined the irb sources but this seems to be well-hidden to me.
I’m confused and havet o assume the question is a bit vague. How is
"$c = " long winded? What do you actually want to know?

Hi,

Am Mittwoch, 26. Dez 2007, 05:16:03 +0900 schrieb Ryan D.:

On Dec 25, 2007, at 05:08 , Bertram S. wrote:

Is there a way how I can call C.new’s Irb directly without doing
the long-winded definition of a global variable first? I already
examined the irb sources but this seems to be well-hidden to me.

I’m confused and havet o assume the question is a bit vague. How is "$c = "
long winded? What do you actually want to know?

I wanted to know how to do it without having to type in the same
constant or global variable name every time.

Bertram