Ruby y Ruby on Rails

Introducción a Ruby y a Ruby on Rails

Fernando Blat & Fernando García & Álvaro Ortiz

The Cocktail

¿Qué es Ruby on Rails?

Ruby on Rails

Su creador

Rails en acción

Rails como filosofía

En Resumen: Pragmatismo y Agilidad

Lo que Rails te ofrece

COC - Convention Over Configuration

MVC - Modelo, Vista, Controlador

Esquema MVC

  • Es un patrón de diseño / patrón de arquitectura
  • Destaca el hecho de poder separar la lógica de la presentación sobretodo para el desarrollo web. Todos sabemos que la web está sujeta a cambios constantes en la presentación, el poder realizar dichos cambios sin que la lógica de la aplicación se vea afectada es una gran ventaja para los desarrrolladores.
  • Excepticismo: muchas de los frameworks que presumen de implementar la arquitectura de 3 capas lo hacen con soluciones engorrosas, que casi dificultan más que facilitan la labor.

Introducción a Ruby

Ruby

Comunidad

Libro

Programming Ruby (on-line)

Características

Hello world

 #!/usr/bin/ruby

 puts 'Hello world'
	

Variables dinámicas

a = 3.2
puts a.class 	» Float
puts a.floor 	» 3
puts a.ceil 	» 4

a = a.to_i
puts a 		» 3
puts a.class 	» Fixnum

a = Math::PI 	» 3.14159265358979
a = a.to_s
puts a 		» 3.14159265358979
puts a.class 	» String
puts a.size 	» 16 
puts a.reverse 	» 97985356295141.3
	

Tipos de variables

  • Quitar importancia a las variables de clase y globales
  • Explicar a fondo los símbolos: los símbolos son identificadores únicos que se utilizan para llamar a un objetos con el mismo nombre en distintos contextos. Por ejemplo: en un módulo tenemos una constante que se llama UsuarioID, en otro módulo un método que se llama UsuarioID().

Convención en la nomenclatura

Métodos

def suma(i,j)
  i+j
end

suma(3,2) 	» 5

def suma_si_existe(i,j=nil)
  if j
    "Con j=#{j}: " + (i+j).to_s
  else
    "Sin j (i=#{i}): " + i.to_s
  end
end

suma_si_existe(1) 	» Sin j (i=1): 1
suma_si_existe 3, 5 	» Con j=5: 8
	
	

Expresiones: condiciones

es_cierto = true
puts "Es cierto" if es_cierto 	» Es cierto
puts "Es cierto ¡otra vez!" unless not es_cierto 	
 » Es cierto ¡otra vez!

programas = 3
numero_programas = if programas < 2
              "hay un programa"
            elsif programas >= 2 and programas < 4
              "hay entre dos y tres programas"
            else
              "hay muchos programas"
            end
puts numero_programas 	» hay entre dos y tres programas
	

Iteradores

a = 3
while a > 0
  a -= 1
end

3.times do
  print 'hola' + ' '
end

 	» hola hola hola

for i in ['lunes', 'martes', 'miercoles', 'jueves', 'viernes']
	print i, ' '
end

	» lunes martes miercoles jueves viernes
	

Bloques

FIN_SEMANA = 'viernes'
dias = ['lunes', 'martes', 'miercoles', 'jueves', 'viernes']

dias.each do |dia|
  puts "Hoy es #{dia}" if dia == FIN_SEMANA
end

	» Hoy es viernes

(1..5).each { |i| print i,':',i*i,' ' }

	» 1:1 2:4 3:9 4:16 5:25
	

Arrays

a = ['a', 'b', 'c','e','f','g','h','a','h']

a.size		» 9

a.include?('d') » false

a[2] 		» c

a.index('c') 	» 2

a.join(' - ') 	» a - b - c - e - f - g - h - a - h

a.slice(1,4) 	» ['b','c','e','f']

a.sort 		» ['a','a','b','c','e','f','g','h','h']

a.uniq 		» ['a','b','c','e','f','g','h']
	

Hash

persona = {'nombre' => 'Juan', 
  'apellidos' => 'García Robledo', 
  'telefono' => '915671234' }

persona['nombre'] 		» Juan

persona['edad'] = 26 

persona.each_key {|key| print key,' '} 	
	» nombre telefono apellidos

persona.each {|key,value| print key,' > ',value, ' ' } 	
	» nombre > Juan telefono > 915671234 
 	  apellidos > García Robledo

persona.delete_if {|key,value| key == 'telefono' 
 	and value =~ /^91/ }

	

Manejo de excepciones


f = File.open("testfile")

begin
  puts "Fichero abierto"
rescue
  puts "No se ha podido abrir el fichero"
else
  puts "Congratulations: no errors!"
ensure
  f.close unless f.nil?
end
	

Clases y Herencia

class Persona
  def initialize(nombre, apellidos, edad)
    @nombre,@apellidos,@edad = nombre,apellidos,edad
  end
  def es_mayor_edad?
   @edad >= 18
  end
end

p = Persona.new('Juan','García',18)
p.es_mayor_edad? 		» true
p = Persona.new('Felipe','Andrés',14)
p.es_mayor_edad? 		» false
p.edad 				» undefined method `edad'
	

Clases y Herencia(ii)

class Persona
  attr_reader :nombre,:edad
  attr_writer :edad
  def initialize(nombre, apellidos, edad)
    @nombre,@apellidos,@edad = nombre,apellidos,edad
  end
  def es_mayor_edad?
   @edad >= 18
  end
end

p = Persona.new('Juan','García',18)
p.edad 			» 18
p.edad = 15 		» 15
p.es_mayor_edad? 	» false

	

Clases y Herencia(iii)

class Persona
  ...
  private
  def es_mayor_edad?
   @edad >= 18
  end
end

class Adulto < Persona
  public :es_mayor_edad?
  def initialize(nombre, apellidos,edad) super end
end

a = Adulto.new('Jaime','García',15)
a.es_mayor_edad?	» false
p = Persona.new('Juan','García',18)
p.es_mayor_edad?	» private method `es_mayor_edad?'
	

Ayuda y Referencias rápidas