Ruby anatomy

From wikinotes
Revision as of 20:47, 21 May 2021 by Will (talk | contribs) (→‎Stacktraces)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Example

#!/usr/bin/env ruby
# mymodule.rb


class MyClass
  def print_hello
    puts "hello world"
  end
end

if __FILE__ == $0
  myclass = MyClass.new()
  myclass.print_hello()
end
ruby mymodule.rb

basics

RUBY_VERSION()       # ruby version
RUBY_PATCHLEVEL()    # ruby patch revision
RUBY_DESCRIPTION()   # ruby version
3.times {puts "hi"}  # loop 3 times

reflection

myclass = MyClass.new()

myclass.methods                   # print all methods
myclass.methods - Object.methods  # print non-object methods
myclass.class                     # type

myclass.__FILE__                               # file class belongs to
instance.method(:method_name).source_location  # file method is defined in (nil means compiled)

MyModule.constants.select {|c| MyModule.const_get(c).is_a? Class}  # list all classes within a namespace

# files module is defined in
$LOADED_FEATURES.select { |file| File.read(file).include?('module Foo') rescue false }

builtins

Keywords/functions/types built in to ruby are defined within the Kernel module.

Find common types/functions like:

  • at_exit
  • open
  • Integer
  • ...

How to read API Docs

Ruby documentation can be difficult to browse.
In order to determine the scope you must browse:

  • class inheritance hierarchy
  • includes/extends
  • parent-hierarchy's includes/extends
  • includes/extends parent hierarchy


Try using ruby pry instead:

  • ls (show methods/attrs by namespace/class)
  • show-source -ld <method> (show docs/sourcecode)