[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

using irb

John Maclean

1/5/2006 12:27:00 AM

So far I've created a ~/bin/rb/dev/foo directory as a place to write and test scripts. After reading the "pick axe" book some more it seems as is irb is a better "place" or "way" to try out stuff. This correct?
--
John Maclean
MSc (DIC)
07739 171 531



12 Answers

Tim Hunter

1/5/2006 1:21:00 AM

0

John Maclean wrote:
> So far I've created a ~/bin/rb/dev/foo directory as a place to write
> and test scripts. After reading the "pick axe" book some more it
> seems as is irb is a better "place" or "way" to try out stuff. This
> correct?

Many (perhaps most) Rubyists use irb to try out simple Ruby stuff. I
suspect you would agree. In any case it's easy enough for you to give it
a try and make up your own mind.

Paul Legato

1/5/2006 1:47:00 AM

0

John Maclean wrote:
> it seems as is irb is a better "place" or "way" to try out stuff. This correct?

irb is great for rapidly getting a feel for how things work, since you
get instant feedback on each line. If something doesn't go as expected,
you can instantly start experimenting on the live state of ruby to
figure out what's going on.

That said, it is not necessarily the best tool for every job, and I
certainly wouldn't recommend using it alone. I often keep an irb running
in a shell window while I'm running a script in another shell, which I'm
editing in emacs. (Emacs has all kinds of integrated stuff for running
ruby directly that I haven't looked into yet, too.)

irb know-how also carries over directly into the Ruby debugger ("ruby -r
debug yourscript.rb"), another great way to figure out how things work.

Best,
Paul




Chad Perrin

1/5/2006 3:04:00 AM

0

On Thu, Jan 05, 2006 at 10:47:27AM +0900, Paul Legato wrote:
> John Maclean wrote:
> >it seems as is irb is a better "place" or "way" to try out stuff. This
> >correct?
>
> irb is great for rapidly getting a feel for how things work, since you
> get instant feedback on each line. If something doesn't go as expected,
> you can instantly start experimenting on the live state of ruby to
> figure out what's going on.
>
> That said, it is not necessarily the best tool for every job, and I
> certainly wouldn't recommend using it alone. I often keep an irb running

Assuming you mean that using irb alone shouldn't give you the impression
you all there is to know about Ruby, I agree. If you mean that it
shouldn't be used alone for other purposes than getting a feel for the
language, I disagree: I've found that irb makes a better calculator
application (for my tastes) than any other simple calculator app I've
ever had the (dis)pleasure to encounter. I use it for stuff like
calculating my income tax rate, for instance, and the ability to save
intermediate values in variables while calculating something complex is
great.

--
Chad Perrin [ CCD CopyWrite | http://ccd.ap... ]

"A script is what you give the actors. A program
is what you give the audience." - Larry Wall


Hal E. Fulton

1/5/2006 3:28:00 AM

0

Timothy Hunter wrote:
> John Maclean wrote:
>
>> So far I've created a ~/bin/rb/dev/foo directory as a place to write
>> and test scripts. After reading the "pick axe" book some more it
>> seems as is irb is a better "place" or "way" to try out stuff. This
>> correct?
>
>
> Many (perhaps most) Rubyists use irb to try out simple Ruby stuff. I
> suspect you would agree. In any case it's easy enough for you to give it
> a try and make up your own mind.
>

But beware. You can get strange results 1% of the time... as a result
of how irb works, not actual bugs.

If in any doubt, try the same thing outside irb.


Hal




Gregory Brown

1/5/2006 6:35:00 AM

0

On 1/4/06, James Britt <james_b@neurogami.com> wrote:

> > Many (perhaps most) Rubyists use irb to try out simple Ruby stuff. I
> > suspect you would agree. In any case it's easy enough for you to give it
> > a try and make up your own mind.
>
> I edit in gvim, with the Ruby menu and macro stuff, and it's trivial to
> edit something and press F5 to run the current file.

I use plain old vim and gvim and have both irb and the ruby
interpreter bound to keyboard shortcuts.

This way, I can write out whole programs and run them, or just pop
open an irb session right inside my editor. :)

Combine this with 'ri what's under my cursor' and you've got a rockin'
development environment


NBarnes

1/5/2006 9:30:00 AM

0

After a great deal of annoyance getting started with Ruby, I'm getting
good results from the use of SciTE. SciTE will output directly into
an editor frame at runtime for quick feedback, which I found very
useful in my early Ruby work and continue to enjoy later on.


Dick Davies

1/5/2006 10:43:00 AM

0

On 05/01/06, Gregory Brown <gregory.t.brown@gmail.com> wrote:

> I use plain old vim and gvim and have both irb and the ruby
> interpreter bound to keyboard shortcuts.
>
> This way, I can write out whole programs and run them, or just pop
> open an irb session right inside my editor. :)
>
> Combine this with 'ri what's under my cursor' and you've got a rockin'
> development environment

Nice, have you got any config snippets you wouldn't mind sharing?


--
Rasputin :: Jack of All Trades - Master of Nuns
http://number9.helloope...


Gregory Brown

1/5/2006 5:22:00 PM

0

On 1/5/06, Dick Davies <rasputnik@gmail.com> wrote:
> On 05/01/06, Gregory Brown <gregory.t.brown@gmail.com> wrote:
>
> > I use plain old vim and gvim and have both irb and the ruby
> > interpreter bound to keyboard shortcuts.
> >
> > This way, I can write out whole programs and run them, or just pop
> > open an irb session right inside my editor. :)
> >
> > Combine this with 'ri what's under my cursor' and you've got a rockin'
> > development environment
>
> Nice, have you got any config snippets you wouldn't mind sharing?

I'll paste in my .vimrc and my .irbrc file (the latter was lovingly
lifted from JEG2)

vimrc
---------------
" An example for a vimrc file.
"
set nobackup
set nocompatible
set backspace=indent,eol,start

set history=50 " keep 50 lines of command line history
set ruler " show the cursor position all the time
set showcmd " display incomplete commands
set incsearch " do incremental searching

map Q gq

set autoindent " always set autoindenting on
set shiftwidth=2
set tabstop=2
set expandtab
set tw=80
set nohlsearch
map <silent> <C-N> :se invhlsearch<CR>

filetype on
filetype indent on
filetype plugin on
syntax on
if !exists( "*EndToken" )
function EndToken()
let current_line = getline( '.' )
let braces_at_end = '{\s*\(|\(,\|\s\|\w\)*|\s*\)\?$'
if match( current_line, braces_at_end ) >= 0
return '}'
else
return 'end'
endif
endfunction
endif

noremap <F5> :set invpaste paste?<Enter>
imap <F5> <C-O><F5>
set pastetoggle=<F5>

map <C-R> :!ruby %<CR>
map <C-A> :!rake<CR>
map <C-I> :!ri <cword><CR>

imap <C-L> <ESC>:execute 'normal o' . EndToken()<CR>O
imap <C-B> def test_<C-L><BS><BS><BS><BS><BS><BS>
"{{{ Ruby block delimiter conversion: do end <=> { }
"Copyright (c) 2005 Mauricio Fernandez
"Subject to same licensing terms as Ruby.
" requires matchit and friends
" since it uses the % and = bindings
function! s:String_Strip(str)
let s = substitute(a:str, '\v^\s*', '', '')
return substitute(s, '\v\s*$', '', '')
endfunction
function! s:RubyBlockBraceToDoEnd(lineno)
" { } => do end
let oldz = getreg("z")
call setreg("z", "")
execute 'normal ^f{%l"zd$'
let suffix = s:String_Strip(getreg("z"))
call setreg("z", oldz)
let orig = getline(".")
let repl = substitute(orig, '\v\s*\{\s*(\|[^|]*\|)?.*', ' do \1', '')
call setline(".", repl)
let nextline = substitute(orig, '\v[^{]*\v\s*\{\s*(\|[^|]*\|)?', '', '')
let nextline = substitute(nextline, '\}[^}]*$', '', '')
let numlines = 0


" uncomment one of the following:

" (1) just insert the body without splitting the lines on ;
"call append(a:lineno, nextline)
"call append(a:lineno+1, 'end' . suffix)
"

" (2) try to split on ; ...
call append(a:lineno, 'end' . suffix)
" this is what we would want to do:
"let nextline = substitute(nextline, ';', "\n", 'g')

while stridx(nextline, ";") != -1
let eom = stridx(nextline, ";")
let line = s:String_Strip(strpart(nextline, 0, eom))
call append(a:lineno + numlines, line)
let numlines = numlines + 1
let nextline = strpart(nextline, eom+1, strlen(nextline) - eom - 1)
endwhile
let nextline = s:String_Strip(nextline)
if strlen(nextline) > 0
call append(a:lineno + numlines, nextline)
let numlines = numlines + 1
endif

" this is what it all began with...
"execute 'normal :s/\v\s*\{\s*(\|.*\|)?/ do \1\r/
'
"execute 'normal g_cw
end'
execute 'normal V' . (1 + numlines) . 'j='
"echo "{ } => do end"
endfunction

function! s:RubyBlockDoEndToBrace(_firstline, _lastline)
" do end => { }
let linenum = a:_firstline + 1
let orig = getline(".")
while linenum < a:_lastline - 1
let addline = getline(linenum)
if '\v^\s*$' !~ addline
let addline = substitute(addline, '\v^\s*', '', '')
let addline = substitute(addline, '\s*$', '; ', '')
let orig = orig . addline
endif
let linenum = linenum + 1
endwhile
let l = substitute(getline(a:_lastline-1), '\v^\s*', '', '')
let l = substitute(l, '\s*$', '', '')
let orig = orig . l
let l = substitute(getline(a:_lastline), '\v^\s*end(\.|\s|$)@=', ' }', '')
let l = substitute(l, '\s*$', '', '')
let orig = orig . l

"echo orig
"input(orig)
let repl = substitute(orig, '\v\s*do\s*(\|[^|]*\|)?', '{\1 ', '')
"execute 'normal d' . (a:_lastline - a:_firstline) . 'j'
execute ':' . a:_firstline . ',' . a:_lastline . 'd'
call append(a:_firstline - 1, repl)
execute ':' . a:_firstline
"echo "do end => { }"
endfunction

map <SID>xx <SID>xx
let s:sid = maparg("<SID>xx")
unmap <SID>xx
let s:sid = substitute(s:sid, 'xx', '', '')

function! <SID>RubyBlockSwitchDelimiters() range
set nofoldenable
if a:firstline == a:lastline
let braceidx = match(getline("."), '{')
let doidx = match(getline("."), '\<do\>')
if braceidx != -1 && (doidx == -1 || braceidx < doidx)
call s:RubyBlockBraceToDoEnd(a:firstline)
elseif doidx != -1
execute 'normal /\<do\>' . "\n" . 'V%:call ' .
\ s:sid . 'RubyBlockSwitchDelimiters()' . "\n"
else
echo "No block found"
end
else
call s:RubyBlockDoEndToBrace(a:firstline, a:lastline)
endif
"execute 'normal V2k='
"execute 'normal v5j'
endfunction

command! -range B <line1>,<line2>call <SID>RubyBlockSwitchDelimiters()
vmap <Leader>B :call <SID>RubyBlockSwitchDelimiters()<cr>

------
and .irbrc
------

require 'irb/completion'
ARGV.concat [ "--readline" ]

if $0 == "irb"
IRB.conf[:PROMPT][:XMP][:RETURN] = "\# => %s\n"

IRB.conf[:EVAL_HISTORY] = 1000
IRB.conf[:SAVE_HISTORY] = 100

HISTFILE = "~/.irb.hist"
MAXHISTSIZE = 100

begin
if defined? Readline::HISTORY
histfile = File::expand_path( HISTFILE )
if File::exists?( histfile )
lines = IO::readlines( histfile ).collect {|line| line.chomp}
puts "Read %d saved history commands from %s." %
[ lines.nitems, histfile ] if $DEBUG || $VERBOSE
Readline::HISTORY.push( *lines )
else
puts "History file '%s' was empty or non-existant." %
histfile if $DEBUG || $VERBOSE
end

Kernel::at_exit {
lines = Readline::HISTORY.to_a.reverse.uniq.reverse
lines = lines[ -MAXHISTSIZE, MAXHISTSIZE ] if
lines.nitems > MAXHISTSIZE
$stderr.puts "Saving %d history lines to %s." %
[ lines.length, histfile ] if $VERBOSE || $DEBUG
File::open( histfile,
File::WRONLY|File::CREAT|File::TRUNC ) {|ofh|
lines.each {|line| ofh.puts line }
}
}
end
end

def ri(*names)
system(%{ri #{names.map {|name| name.to_s}.join(" ")}})
end
end


Gregory Brown

1/5/2006 5:28:00 PM

0

On 1/5/06, Dick Davies <rasputnik@gmail.com> wrote:
> On 05/01/06, Gregory Brown <gregory.t.brown@gmail.com> wrote:
>
> > I use plain old vim and gvim and have both irb and the ruby
> > interpreter bound to keyboard shortcuts.
> >
> > This way, I can write out whole programs and run them, or just pop
> > open an irb session right inside my editor. :)
> >
> > Combine this with 'ri what's under my cursor' and you've got a rockin'
> > development environment
>
> Nice, have you got any config snippets you wouldn't mind sharing?

You probably just wanted this though: ;) (slap in .vimrc)

map <C-R> :!ruby %<CR>
map <C-A> :!rake<CR>
map <C-I> :!ri <cword><CR>


J. Ryan Sobol

1/5/2006 5:29:00 PM

0

Why is this line necessary in .irbrc?

~ ryan ~


On Jan 5, 2006, at 12:22 PM, Gregory Brown wrote:

> if $0 == "irb"