Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Calling Irb from inside an application

Reply
Thread Tools

Calling Irb from inside an application

 
 
Bertram Scharpf
Guest
Posts: n/a
 
      12-25-2007

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


--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de

 
Reply With Quote
 
 
 
 
Stefano Crocco
Guest
Posts: n/a
 
      12-25-2007
Alle marted=EC 25 dicembre 2007, Bertram Scharpf ha scritto:
> 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
> =3D> nil
> irb(main):002:0> irb C.new
> irb#1(#<C:0xb7910d40>):001:0> f
> =3D> "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 =3D=3D __FILE__ then
> require "irb"
> $c =3D 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
> =3D> "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


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

Stefano

 
Reply With Quote
 
 
 
 
James Tucker
Guest
Posts: n/a
 
      12-25-2007
Merry christmas!

This was mercilessly stolen and adapted from a post on Errs blog (only =20=

google has the answer :

require 'irb'

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

workspace =3D WorkSpace.new(binding)

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

@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
@CONF[:MAIN_CONTEXT] =3D 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 =3D ARGV
ARGV.size.times { ARGV.shift }

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

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





On 25 Dec 2007, at 13:26, Stefano Crocco wrote:

> Alle marted=EC 25 dicembre 2007, Bertram Scharpf ha scritto:
>> 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
>> =3D> nil
>> irb(main):002:0> irb C.new
>> irb#1(#<C:0xb7910d40>):001:0> f
>> =3D> "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 =3D=3D __FILE__ then
>> require "irb"
>> $c =3D 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
>> =3D> "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

>
> Not a direct answer to your question, but can't you load the file =20
> with the
> definition of the class in irb?
>
> Stefano
>



 
Reply With Quote
 
Ryan Davis
Guest
Posts: n/a
 
      12-25-2007

On Dec 25, 2007, at 05:08 , Bertram Scharpf 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.

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


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?



 
Reply With Quote
 
Bertram Scharpf
Guest
Posts: n/a
 
      12-25-2007
Hi James,

Am Dienstag, 25. Dez 2007, 23:01:54 +0900 schrieb James Tucker:
> 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


--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de

 
Reply With Quote
 
Bertram Scharpf
Guest
Posts: n/a
 
      12-25-2007
Hi,

Am Mittwoch, 26. Dez 2007, 05:16:03 +0900 schrieb Ryan Davis:
> On Dec 25, 2007, at 05:08 , Bertram Scharpf 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


--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
IRB BVI0 interface, no ping possible from the router to inside hosts Steven V.A. Cisco 0 09-17-2008 05:53 PM
irb require ... where does irb look? what path? anne001 Ruby 1 06-27-2006 12:07 PM
Using ri inside irb -- error in Pickaxe? Donkey Agony Ruby 2 01-07-2006 02:29 AM
irb question - variable definitions when calling irb from a script problem Nuralanur@aol.com Ruby 1 10-26-2005 09:13 PM
[ANN] irb-history 1.0.0: Persistent, shared Readline history for IRB Sam Stephenson Ruby 1 06-18-2005 08:56 AM



Advertisments