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

[email protected] $ ./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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs