View
27
Download
0
Category
Preview:
DESCRIPTION
Introducción a Ruby on Rails
Citation preview
Programacin IVRuby on Rails
Profesores:
Evaldo KalbermatterEduardo 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 configuracin
Desarrollo gil
Filosofa de Rails
SIal trabajo inteligente
NOal 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 Ruby2 + 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 Rubyitems = 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] # => 15numeros[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 Rubyanimales = ['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 Rubyanimales = [: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.' endend
Clases en Rubyclass Car
end
# metodo especial para nuevas instanciasdef initialize(brand,model)@year = Time.now.year # variable de instancia@brand, @model = brand, model@@count += 1
end
# getters y settersattr_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
endattr_accessor :coupe # boolean attribute
Metodos en Rubyclass Car@@count = 0 # Variable de clase# Metodo de clasedef self.count@@count
end# Metodo de instanciadef startprint "Bruuumm!"
endend
IRBInteractive Ruby
user@ubuntu # irbirb#> class Carirb?> # escribir clase aqui...irb?> endirb#> => nilirb#> gol = Car.new 'VW','Gol'=> # irb#> gol.start"Bruuumm!" => nilirb#> Car.count=> 1
tryruby.orgCurso terminado para la prxima clase
Best Practice #1
Fat Model, Skinny ControllerModelo 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 #1class Vehicle
validates :brand, :model, presence: truedef title
"#{brand} #{model} (#{year})" # => VW Gol (2013)end
end
class VehiclesController < ApplicationController def create
@vehicle = Vehicle.create(params[:vehicle])redirect_to @vehicle
endend
Software (Recomenbligatorio)
Sistema Operativo: Ubuntu (12.04 o superior)
Terminal/Consola con RVM instalado
Editor de Texto: Sublime Text gEdit
+ +
goo.gl/ikihRGuia 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)
Recommended