On the official website, Rubi is described as “A dynamic, open-source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write”, which is true.

Ruby has been losing popularity to Python for pretty much the same characteristics but still very much adopted by the Linux and Hacking community (many exploits were written in Ruby).

Working with strings:

varName = "!"
intName = 5
print ("String" + varName)
puts ("String" + intName.to_s)

Booleans and Numbers:

booleanName = true
intName = -99
intName += 9
puts intName.abs()

Float (decimals):

floatName = 0.00001
puts floatName.round()

Absence of a value:

notAssignedValue = nil

Scaping characters, changing cases, getting information, and indexes:

varName = "Test print \"."
puts varName.upcase()
varName = "New line.\n"
puts varName.downcase()
varName = "     Extra spaces.     "
puts varName.strip()
puts varName.length()
puts varName.include? "Extra"
puts varName.index("E")
puts varName[5]
puts varName[5,5]

Math operations:

puts Math.sqrt(64)
puts Math.log(10)

Prompting for information and converting it to numbers:

strName = gets()
strName = gets.chomp()
puts strName.to_i
puts strName.to_f

Working with arrays:

arrayName = ["A","B","C"]
puts arrayName
arrayName = Array.new
arrayName[0] = "a"
puts arrayName.length()
puts arrayName.include? "a"
puts arrayName.sort()
puts arrayName.reverse()

Dictionary / Hash:

hashName = {
  "A" => "X",
  "B" => "Y",
  "C" => "Z"
}
puts hashName["B"]

Creating and calling functions and IF statement cases:

def methodName(message, print=false)
  if print and message
    puts message
  elsif !message
    puts "no message"
  else
    puts "not set to print"
  end
  return "first", "second"
end
puts methodName("Hi!")
puts methodName("Hi!",1)
puts methodName(false,1)

While looping:

while true
  puts "Executed!"
  break
end

Looping through a list:

listName = ["M","N","O"]
for line in listName
  puts line
end
listName.each do |line|
  puts line
end

For looping:

for i in 1..3
  puts i
end
3.times do |i|
  puts i
end

Handling errors:

begin
  x = 1 / 0
rescue ZeroDivisionError
  puts "Impossible to devide by Zero"
rescue TypeError => e
  puts e
end

Classes and objects:

class ClassName
  attr_accessor :attr1, :attr2, :attr3
end
objName = ClassName.new()
objName.attr1 = "Text"
objName.attr2 = 10
objName.attr3 = 0.5
puts (objName.attr1 + objName.attr2.to_s + objName.attr3.to_s)

Classes, attributes, and constructors:

class ClassName2
  attr_accessor :attr1, :attr2, :attr3
  def initialize(attr1, attr2, attr3)
    @attr1 = attr1
    @attr2 = attr2.to_i
    @attr3 = attr3.to_f
  end
  def print
    puts (@attr1 + @attr2.to_s + @attr3.to_s)
  end
end
objName2 = ClassName2.new("Text",10,0.5)
objName2.print

Parent and child classes:

class ClassName3 < ClassName
  def print
    puts (@attr1 + @attr2.to_s + @attr3.to_s)
  end
end
objName3 = ClassName3.new()
objName3.attr1 = "Text"
objName3.attr2 = 10
objName3.attr3 = 0.5
objName3.print

Creating modules (libraries) of functions:

module ModuleName
  def functionName
    puts "Executed!"
  end
end
include ModuleName
ModuleName.functionName()

Importing/requiring functions from a module:

require "/home/user/file.rb"
require_relative "file.rb"
include ModuleName
ModuleName.functionName()

Interactive Ruby

irb -v
irb