Is There Something Like Bpython for Ruby

Is there something like bpython for Ruby?

Use Pry: http://pry.github.com

It is written from scratch and let's you:

  • view method source code
  • view method documentation (not using RI so you dont have to pre-generate it)
  • pop in and out of different contexts
  • invoke at runtime, in any context
  • syntax highlighting
  • gist integration
  • view and replay history
  • open editors to edit method using edit-method obj.my_method syntax

A tonne more great and original features

Are there any iPython-like shells for Ruby or Rails?

There is an irb tool to help autocomplete

require 'irb/completion'

ipython like interpreter for ruby

Even if you try pry it will give errors. Ubuntu does not get along well with ruby, you need few extra libraries. Following is what you can do:

sudo apt-get install libncurses5-dev libreadline5-dev

uninstall your current ruby version.
sudo apt-get install libreadline-dev
rvm install 1.9.3-p194 --with-readline-dir=/usr/include/readline

This shall fix it.

What alternatives to IRB are there?

What a coincidence. Rubyflow just yesterday announced the irbtools gem, which is a meta-gem containing lots of cool irb enhancement gems. It contains:

  • Colorized and output as comment by wirb and fancy_irb
  • Nice IRB prompt and IRB’s auto indention
  • Includes stdlib’s FileUtils: ls, cd, pwd, ln_s, rm, mkdir, touch, cat
  • Many debugging helpers: ap, q, o, c, y, Object#m, Object#d
    • ap – awesome_print
    • q – like p, but on one line
    • Object#m – ordered method list (takes integer parameter: level of nesting)
    • Object#d – puts the object, returns self (using tap)
  • “Magical” information constants: Info, OS, RubyVersion, RubyEngine
    • OS.windows?
    • RubyEngine.jruby?
    • RubyVersion.is.at_least? 1.9
  • Clipboard features: copy and paste
    • also available: copy_input and copy_output for session history
  • Call vim (or another supported editor) to edit a file, close it and it gets loaded into your current irb session, powered by interactive_editor
  • Another way of live loading into irb: sketches
  • Highlight a string with olorize('string') or a file with ray('path'), powered by coderay
  • Displays ActiveRecord database entries as tables with hirb
  • Restart irb with reset! or change the Ruby version with the use method and rvm!
  • Includes the current directory in the load path (was removed in 1.9.2 for security reasons, but is pretty annoying in IRB)
  • Shorter requiring like this: rq:mathn
  • And rerquiring with rrq
  • Try the included Object#ri helper, powered by ori!
  • Access to a lot of more commands with boson – call commands to get started

There are nice screenshots on the irbtools page. One nice thing about it is that each of the utilities can stand on its own, in case you just want to cherry-pick one or two features.

2013 Update

Since I wrote this, Pry has become a popular IRB replacement. It doesn't do as much as irbtools out of the box, but it extensible with plugin gems that add cool features. You can browse source code like it was a unix directory:

pry(main)> cd FileUtils
pry(FileUtils):1> show-method rm

From: /opt/ruby/lib/ruby/1.9.1/fileutils.rb @ line 556:
Number of lines: 10
Owner: FileUtils

def rm(list, options = {})
fu_check_options options, OPT_TABLE['rm']
list = fu_list(list)
fu_output_message "rm#{options[:force] ? ' -f' : ''} #{list.join ' '}" if options[:verbose]
return if options[:noop]

list.each do |path|
remove_file path, options[:force]
end
end
pry(FileUtils):2>

You can also browse Ruby documentation, issue shell commands, and if you're a Rails user, you can use the pry-rails gem to get pry in your Rails console. There's also a way to hook it into Sinatra and use it with Heroku.

There's ample documentation--there are a bunch of screencasts including a Railscast. It's definitely worth looking into.

Is there any expression in python that similar to ruby's ||=

How about?

try:
a = a
except NameError:
a = "new"

It's not very short but does clearly (at least to me) explain the intent of the code.

Is there a Python equivalent to Ruby symbols?

No, python doesn't have a symbol type.

However string literals are interned by default and other strings can be interned using the intern function. So using string literals as keys in dictionaries is not less performant than using symbols in ruby.



Related Topics



Leave a reply



Submit