Aprendiendo Ruby

//Obteniendo la versión
ruby -v

//Interactive Ruby Console
irb

exit

//Imprimir por consola, put string
puts 'Hello World'

//Objeto que equivale a null
nil

//Saber el tipo de un objeto
nil.class => NilClass

//Ejecutar un archivo
ruby file.rb

//https://github.com/bbatsov/ruby-style-guide
//Utilizar ; solo cuando se desea ejecutar comandos en una sola línea
//Solo utilizar paréntesis para comandos nativos
//Pensar en el hombre y no en la máquina... Código más amigable
//Variables

name = 'Nicholls' //Ruby le importa el comportamiento y no el tipo

//Id del puntador de un objeto en memoria 
('abc' + 'def').object_id

//Simbolo de un objeto
:abd.object_id //Siempre retornará el mismo apuntador

//Hash
{ 'abc' => 123, :xyz => 456 }

//Interpolación de strings con comilla doble
puts "Hello #{name}!" //Solo usar comillas dobles en este caso o con caracteres especiales

//Obtener por consola
print "Please enter your name"
name = gets

//print para probar  => incova el método inspect
//puts usuario final => invoca el método to_string e inserta un salto de línea
//Comillas simples
//'' => %q 

print %q(Hello #{name})  //Hello #{name}


//Comillas dobles
//"" => %Q

print %Q(Hello #{name})  //Hello Nicholls

//Números como objetos
1.+(2)
1.class   //Fixnum

//Cambiar la clase o.O
class Fixnum
def +(num)
   8
end
end

puts 1 + 3  //8
def suma_multiplos (limite)
 suma = 0
 for i in 0..limite -1
  if (i % 3).==(0) || (i % 5).==(0)   
   suma += i
  end
 end 
 suma
end

puts suma_multiplos (10)
0.== (true) // == es una función del objeto number

10_000 => 10000

Hash

{ :name => "Nicholls" }

//Es lo mismo que
{ name: "Nicholls" }

gets.chomp    //almacena strings que provienen del teclado y remueve el carácter '\n'

loop do
    print 'Do you want to continue? (y/n)'
    answer = gets.chomp.downcase           //Convirtiendo a minúsculas
    if answer == 'n'
        break
    end
end

a = 'hola'
a.upcase!  //Modifica el objeto en cuestión
print a    //HOLA


random = Random.new.rand(5) //Rango hasta 5, muy amigable el lenguaje

gets.chomp.to_i //Convertir a número
name.index(/\d/) //Encontrar el índice con una expresión regular
class MyClass
    def initialize(name = 'Ruby')
        puts "Hello #{name}"
    end
end


//Instancia la clase
MyClass.new

puts MyClass.ancestors

//Hereda de Object
puts MyClass.methods - Object.methods


string.respond_to?("upcase")
class Name
    attr_reader :title
    attr_writer :first_name
    attr_accessor: last_name  //reader and writer

    def initialize(title, first_name, middle_name, last_name)
        @title = title
        @first_name = first_name
        @middle_name = middle_name
        @last_name = last_name
    end
end


c = [1, 2, 3, nil, 5]
c.compact //[1, 2, 3, 5]
class Contact
	attr_accessor :first_name
	attr_accessor :middle_name
	attr_accessor :last_name
	attr_reader   :full_name
	
	def initialize(first_name, middle_name, last_name)
		@first_name = first_name
		@middle_name = middle_name
		@last_name = last_name
	end
	
	def full_name
		[first_name, middle_name, last_name].join(' ').squeeze(' ')
	end
	
	def to_s(format = 'full_name')
		if respond_to? format.to_sym
			send(format.to_sym)
		else
			'Unsupported Format'
		end
	end
end

nicholls = Contact.new('Juan', 'David', 'Nicholls')
puts nicholls.to_s

andrea = Contact.new('Andrea', nil, 'Urrego')
puts andrea.full_name
//Crear una aplicación

rails new todo-list
cd todo-list
bundle install

//Si sale un error modificar el archivo Gemfile
source 'https://rubygems.org' a source 'http://rubygems.org'