Ruby on Rails
Ruby on Rails
El Lenguaje Ruby
El Lenguaje Ruby
Este es un lenguaje pura y
Este es un lenguaje pura y
netamente orientado a objetos.
netamente orientado a objetos.
Tiene una sintaxis muy clara y
Tiene una sintaxis muy clara y
limpia que hace que programar
limpia que hace que programar
sea elegante y entretenido.
sea elegante y entretenido.
Aquí se combinan la facilidad
Aquí se combinan la facilidad
de uso y aprendizaje de Python
de uso y aprendizaje de Python
y el pragmatismo de Perl.
y el pragmatismo de Perl.
Ruby fue creado en Japón a
Ruby fue creado en Japón a
principios de los 90, por
principios de los 90, por
Yukihiro Matzumoto y ha
Yukihiro Matzumoto y ha
empezado a popularizarse en
empezado a popularizarse en
todo el mundo en los últimos
todo el mundo en los últimos
años.
años.
Yukihiro Matzumoto
Que puedo hacer con
Lenguaje Ruby
Front ends usando librerías GTK, QT,
Front ends usando librerías GTK, QT,
wxWindows, tk,Cocoa.
wxWindows, tk,Cocoa.
Aplicaciones cliente servidor
Aplicaciones cliente servidor
Conexiones con BD
Conexiones con BD
Servidores ej. LigHTTPd
Servidores ej. LigHTTPd
Aplicaciones Web
Aplicaciones Web
Generar ejecutables ej. Script2Exe
Generar ejecutables ej. Script2Exe
Scripts
Scripts
A que se parece el código?
A que se parece el código?
# Clase Saludos
# Clase Saludos
class
class
Saludos
Saludos
def
def
initialize()
initialize()
@elnombre = elnombre.capitalize
@elnombre = elnombre.capitalize
end
end
def
def
di_hola
di_hola
puts “Hola #{name}”
puts “Hola #{name}”
end
end
end
end
# Crea el Objeto
# Crea el Objeto
g = Saludos.new(“mundo”)
g = Saludos.new(“mundo”)
# Muestra mensaje Hola Mundo
# Muestra mensaje Hola Mundo
Todo es un objeto
Todo es un objeto
No tiene variables
primitivas como:
int
char
short
float
Todo se
transforma
automáticamente
en un objeto
una_variable = "hola mundo"
una_variable = "hola mundo"
puts una_variable.upcase
puts una_variable.upcase
HOLA MUNDO
HOLA MUNDO
puts una_variable.length
puts una_variable.length
10
10
puts “NO ME GRITEN”.downcase
puts “NO ME GRITEN”.downcase
no me griten
no me griten
puts -3.abs
puts -3.abs
3
3
Otro ejemplo
Otro ejemplo
# repite 5 veces hola
# repite 5 veces hola
5.times{ puts “hola” }
5.times{ puts “hola” }
# si la palabra “restorante” incluye subcadena
# si la palabra “restorante” incluye subcadena
# de caracteres “ante” no hace exit
# de caracteres “ante” no hace exit
exit unless “restorante”.include? “ante”
exit unless “restorante”.include? “ante”
# For's
# For's
For i in ['pera','papaya','piña'] { print i.capitalize }
For i in ['pera','papaya','piña'] { print i.capitalize }
# hace lo mismo
# hace lo mismo
['pera','papaya','piña'].each {|fruta| print fruta.capitalize }
En que tecnólogas y
En que tecnólogas y
plataformas funciona Ruby
plataformas funciona Ruby
Interprete de Ruby (Linux, Windows Mac
Interprete de Ruby (Linux, Windows Mac
OS X, Solaris)
OS X, Solaris)
Sun Java 6, interpretado y compilador a
Sun Java 6, interpretado y compilador a
bytecode.
bytecode.
Interpretes y Máquinas
Virtuales
Ruby 1.8.6
Ruby 1.9.1
Java + Jruby
Rubinius
.Net
Comparativa con Otros
Lenguajes
PHP PHP RUBY 1.8.6 RUBY 1.8.6 PERL PERL PYTHON 2.5 PYTHON 2.5 JRUBY JRUBY RUBY 1.9.1 RUBY 1.9.1 C++ C++ 0 1 2 3 4 5 6 7 Comparativa de interpretes Tiempo L e n g u a jeTIOBE Programming Community Index
TIOBE Programming Community Index
for April 2009
for April 2009
Delta in Position Programming Language
1
1
Java
2
2
C
3
3
C++
4
4
PHP
5
5
(Visual) Basic
6
9
Python
7
7
C#
8
8
JavaScript
9
6
Perl
10
22
Ruby
Position
Apr 2009
Apr 2004
Position
Year
Winner
2008
C
2007
Python
2006
Ruby
2005
J ava
2004
PHP
2003
C++
Métricas del uso de Ruby
Usuarios de Ruby
Que es Ruby on Rails?
Que es Ruby on Rails?
Marco de Desarrollo de aplicaciones web de código
Marco de Desarrollo de aplicaciones web de código
abierto.
abierto.
Escrito en el lenguaje de programación Ruby.
Escrito en el lenguaje de programación Ruby.
De arquitectura Modelo-Vista-Controlador (MVC)
De arquitectura Modelo-Vista-Controlador (MVC)
Ello hace más sencillo y rápido el desarrollo de
Ello hace más sencillo y rápido el desarrollo de
proyectos de gran magnitud.
proyectos de gran magnitud.
Los expertos manifiestan que se puede desarrollar
Los expertos manifiestan que se puede desarrollar
una aplicación web medianamente complicada al
una aplicación web medianamente complicada al
menos diez veces más deprisa que lo que se
menos diez veces más deprisa que lo que se
tardarías con un Marco de Desarrollo de Java, sin
tardarías con un Marco de Desarrollo de Java, sin
sacrificios de calidad.
sacrificios de calidad.
Creada por David Heinemeier Hansson
Creada por David Heinemeier Hansson
La versión 1 fue lanzada en el 13 de diciembre 2005
M
MODELO
MODELO
class Product < ActiveRecord::Base
class Product < ActiveRecord::Base
validates_presence_of :title, :description, :image_url
validates_presence_of :title, :description, :image_url
validates_numericality_of :price
validates_numericality_of :price
validates_uniqueness_of :title
validates_uniqueness_of :title
def validate
def validate
errors.add(:price,"ese precio debe ser positivo")
errors.add(:price,"ese precio debe ser positivo")
unless price.nil? || price > 0.0
unless price.nil? || price > 0.0
end
end
end
end
VISTA
VISTA
< <h1>Listing products</h1>h1>Listing products</h1> <table> <table> <tr><tr> <% for column in Product.content_columns %><% for column in Product.content_columns %> <th><%= column.human_name %></th><th><%= column.human_name %></th> <% end %><% end %> </tr></tr> <% for product in @products %> <% for product in @products %> <tr><tr> <% for column in Product.content_columns %><% for column in Product.content_columns %> <td><%=h product.send(column.name) %></td><td><%=h product.send(column.name) %></td> <% end %><% end %> <td><%= link_to 'Show', :action => 'show', :id => product %></td><td><%= link_to 'Show', :action => 'show', :id => product %></td> <td><%= link_to 'Edit', :action => 'edit', :id => product %></td><td><%= link_to 'Edit', :action => 'edit', :id => product %></td> <td><%= link_to 'Destroy', { :action => 'destroy', :id => product }, <td><%= link_to 'Destroy', { :action => 'destroy', :id => product }, :confirm => 'Are you sure?', :method => :post %></td> :confirm => 'Are you sure?', :method => :post %></td> </tr></tr>CONTROLADOR
CONTROLADOR
class AdminController < ApplicationController class AdminController < ApplicationController def indexdef index listlist render :action => 'list'render :action => 'list' endend def listdef list @product_pages, @products = paginate :products, :per_page => 10@product_pages, @products = paginate :products, :per_page => 10 endend def showdef show @product = Product.find(params[:id])@product = Product.find(params[:id]) endend def newdef new @product = Product.new@product = Product.new endend def createdef create @product = Product.new(params[:product])@product = Product.new(params[:product]) if @product.saveif @product.save flash[:notice] = 'Product was successfully created.'flash[:notice] = 'Product was successfully created.' redirect_to :action => 'list'redirect_to :action => 'list' elseelse render :action => 'new'render :action => 'new' endend endendRelacionando tablas
Relacionando tablas
receta.rbclass Receta < ActiveRecord:Base
class Receta < ActiveRecord:Base
belongs_to :categoriabelongs_to :categoria end
end
en categoría.rb
en categoría.rb
class categoría < ActiveRecord::Base
class categoría < ActiveRecord::Base
has_many :recetas
has_many :recetas
end
end
tabla receta
tabla receta tabla categoria tabla categoria
campo categoria_id
Esfuerzo del aprendizaje
Filosofía del RoR
Filosofía del RoR
1)
1)
Menos dinero
Menos dinero
No necesitas dinero para el hardware. El hardware es barato. No No necesitas dinero para el hardware. El hardware es barato. No necesitas dinero para el software. El software es gratis.necesitas dinero para el software. El software es gratis.
2)
2)
Menos tiempo
Menos tiempo
La mayoría del tiempo que pasas trabajando es tiempo perdido. La mayoría del tiempo que pasas trabajando es tiempo perdido. Demasiadas reuniones, demasiada planificación, demasiado pensar... Cuanto másDemasiadas reuniones, demasiada planificación, demasiado pensar... Cuanto más
tiempo tienes, más tiempo pierdes.
tiempo tienes, más tiempo pierdes.
3)
3)
Menos abstracciones
Menos abstracciones
La mejor manera de aprovechar el tiempo es hacer menos La mejor manera de aprovechar el tiempo es hacer menos trabajo que no sea "real". Menos gráficos, menos documentación, menos especificacionestrabajo que no sea "real". Menos gráficos, menos documentación, menos especificaciones
funcionales. Directo al grano, el producto que tus clientes realmente verán.
funcionales. Directo al grano, el producto que tus clientes realmente verán.
4)
4)
Menos software
Menos software
La clase de software que es satisfactorio de emplear es aquel que La clase de software que es satisfactorio de emplear es aquel que es simple, útil y va directo al grano.Bases de Datos Soportadas
Bases de Datos Soportadas
MySQL
MySQL
PostgreSQL
PostgreSQL
SQLite
SQLite
Oracle
Oracle
Ms SQL Server
Ms SQL Server
DB2
DB2
Firebird
Firebird
WebServers Soportados
WebServers Soportados
Apache /FastCGI
Apache /FastCGI
Apache /CGI
Apache /CGI
Lighttpd
Lighttpd
El Scaffolding
El Scaffolding
http://127.0.0.1:3000/receta/new http://127.0.0.1:3000/receta/new http://207.0.0.1/receta/list http://207.0.0.1/receta/listruby script\generate controller Receta
Que dicen de RoR?
Que dicen de RoR?
Ruby on Rails es el tipo de
Ruby on Rails es el tipo de
Herramienta que te permite
Herramienta que te permite
crear una aplicación como un
crear una aplicación como un
shopping cart en menos de 4
shopping cart en menos de 4
horas.
horas.
Andrew Glover es un consultor de IBM y escritor de artículos sobre Java
Andrew Glover es un consultor de IBM y escritor de artículos sobre Java..
Fuente: http://www-128.ibm.com/developerworks/java/library/j-ruby/
El manejador de paquetes
El manejador de paquetes
Gems
Gems
Repositorio con mas de 10 000
aplicaciones y plugins
Ejemplo. Generadores de PDF, ODT,
Algunos
Algunos
IDE'S Para Desarrollar
IDE'S Para Desarrollar
Aplicaciones con ROR
Aplicaciones con ROR
Gedit + plugins
Quien usa RoR
Quien usa RoR
yubnub
yubnub
Buscador por linea de comandos
Buscador por linea de comandos
La Coctelera
La Coctelera
Servicio de Blog similar al blogger de Google
Para febrero del
2008 ya contaba
con más de