Está en la página 1de 24

Programacin IV

Ruby on Rails
Profesores:
Evaldo Kalbermatter
Eduardo Ludi
Que vamos a ver?

Ruby - Lenguaje

Ruby on Rails - Framework

Conceptos Desarrollo Web:


HTML,CSS,JS

Filosofa de Desarrollo gil:


DRY, KIS, C/C

Algunas Mejores Practicas


Importante?
Bibliografa y Recursos

Agile Web Development with Rails (libro)

TryRuby.org (TP1)

RubyMonk.com

RailsForZombies.org (TP2)

RailsCasts.com (400 screencasts)


AsciiCasts.com (121 episodios en espaol)

ruby-doc.com

RailsApi.com
Que es Ruby?

Lenguaje Multipropsito Interpretado

Todo es un objeto en Ruby

Debilmente Tipado

Sintaxis simple e intuitiva

Librerias especializadas (Gemas)


Que es Rails?

Web Framework

Open Source

Arquitectura MVC

Desarrollo Web gil

Listo para usar desde el principio

Muchas librerias disponibles (como


gemas Engines)

Generadores de Cdigo (Scaffold)


Filosofa de Rails

DRY: Dont Repeat Yourself - No te repitas

KIS(S): Keep It Simple - Mantenelo Simple

Convencin sobre conguracin

Desarrollo gil
Filosofa de Rails
SI
al trabajo inteligente
NO
al trabajo duro
(aunque al principio puede costar)
Desarrollo gil

Individuos e interacciones sobre procesos y herramientas

Software funcionando sobre una amplia documentacin

Colaborar con el cliente sobre negociar el contrato

Respuesta al cambio sobre seguir un plan


Ejemplos en Ruby
2 + 3 # => 5 (Fixnum)
5.next # => 6
nombre = 'Juan'
hola = "Hola #{nombre}" # => "Hola Juan"
"A" + "B" # => "AB" (String)
"Hola".reverse # => "aloH"
"Hola".length # => 4
["gato","perro","loro"] # => Array
{ :nombre => 'Juan', :apellido => 'Perez' } # => Hash
Ejemplos en Ruby
items = 1..5 # (Range)
# => [1,2,3,4,5]
items2 = items.map {|item| item*2 }
# => [2,4,6,8,10]
items.map! {|item| item.even? } # bang method (!)
# => [false,true,false,true,false]
numeros = [16,42,8,23,4,15]
numeros.sort! # => [4,8,15,16,23,48]
numeros[2] # => 15
numeros[3] = 17 # => [4,8,15,17,23,48]
Nombres en Ruby
@variable && nombre_de_metodo(parametro)
# todo en minuscula y espacios convertidos en guiones bajos
NombreDeClase && Modulo
# Camelizado: primera letras de cada palabra en mayscula y sin espacios
UNA_CONSTANTE
# todo en mayscula y espacios convertidos en guiones bajos
Los nombres deben ser lo ms descriptivos
posibles, para aprovechar la legibilidad del cdigo.
Bloques en Ruby
animales = ['gato','perro','loro','conejo','pez']
# Bloque multi-linea (do ... end)
animales.map do |a|
a.size if a.size.even? # size es un alias de length
end
# => [4,4,6]
# Bloque en una linea ({ ... })
animales.map { |a| a.size if a.size.even? }
# => [4,4,6]
Condiciones en Ruby
animales = [:gato,:perro,:loro,:conejo,:pez]
unless animales.empty?
if animales.include?(:elefante) # Con parentesis
puts 'Me parece que ests en Africa.'
elsif animales.include? :koala # Sin parentesis
puts 'Casi seguro que ests en Australia.'
else
puts 'Lo ms probable es que estes en tu casa.'
end
end
Clases en Ruby
class Car
end
# metodo especial para nuevas instancias
def initialize(brand,model)
@year = Time.now.year # variable de instancia
@brand, @model = brand, model
@@count += 1
end
# getters y setters
attr_accessor :brand, :model, :year
Herencia de Clases en Ruby
class Vehicle
end
def initialize(brand,model)
# ...
end
attr_accessor :brand, :model, :year
class Car < Vehicle
end
attr_accessor :coupe # boolean attribute
Metodos en Ruby
class Car
@@count = 0 # Variable de clase
# Metodo de clase
def self.count
@@count
end
# Metodo de instancia
def start
print "Bruuumm!"
end
end
IRB
Interactive Ruby
user@ubuntu # irb
irb#> class Car
irb?> # escribir clase aqui...
irb?> end
irb#> => nil
irb#> gol = Car.new 'VW','Gol'
=> #<Car:0x007 @brand='VW', @model='Gol', @year=2013>
irb#> gol.start
"Bruuumm!" => nil
irb#> Car.count
=> 1
tryruby.org
Curso terminado para la prxima clase
Best Practice #1

Fat Model, Skinny Controller


Modelo gordo, Controlador Flaco:
La lgica de negocio debe estar
centralizada en el Modelo, evitando que
este dispersa tanto en el Controlaror y la
Vista
Best Practice #1
class Vehicle
validates :brand, :model, presence: true
def title
"#{brand} #{model} (#{year})" # => VW Gol (2013)
end
end
class VehiclesController < ApplicationController
def create
@vehicle = Vehicle.create(params[:vehicle])
redirect_to @vehicle
end
end
Software
(Recomenbligatorio)

Sistema Operativo: Ubuntu (12.04 o superior)

Terminal/Consola con RVM instalado

Editor de Texto: Sublime Text gEdit


+ +
goo.gl/ikihR
Guia para instalar Ruby y Rails en Ubuntu
Trabajo Final

Sitio de e-commerce:
catlogo con carro de compras

Tecnologas a aplicar:

Ruby y Rails (MVC)

JavaScript, AJAX y CSS (Bootstrap)

También podría gustarte