RubyOnRails: Con qué se come eso?

33
Ruby on Rails: Ruby on Rails: ¿Con qué se come eso? ¿Con qué se come eso? Gabriel E. Arellano Grupo de Estudios de Software Libre / Grupo de Estudios de UML U.T.N. - F.R. Concepción del Uruguay Sextas Jornadas Regionales de Software Libre Mendoza - Argentina

description

 

Transcript of RubyOnRails: Con qué se come eso?

Page 1: RubyOnRails: Con qué se come eso?

Ruby on Rails:Ruby on Rails:¿Con qué se come eso?¿Con qué se come eso?

Gabriel E. Arellano Grupo de Estudios de Software Libre / Grupo de Estudios de UML

U.T.N. - F.R. Concepción del Uruguay

Sextas Jornadas Regionales de Software LibreMendoza - Argentina

Page 2: RubyOnRails: Con qué se come eso?

¿De qué hablaremos?¿De qué hablaremos?

● Presentación del FrameworkPresentación del Framework● Por qué Ruby?Por qué Ruby?● Filosofía de Ruby on RailsFilosofía de Ruby on Rails● Descripción del FrameworkDescripción del Framework● Qué necesito para usarlo?Qué necesito para usarlo?● Cuándo usarlo y cuándo no...Cuándo usarlo y cuándo no...

Page 3: RubyOnRails: Con qué se come eso?

¿Qué es Ruby on Rails?¿Qué es Ruby on Rails?

Un framework de aplicaciones web que:Un framework de aplicaciones web que:● Está escrito en Ruby.Está escrito en Ruby.● Basado en patrones de diseño:Basado en patrones de diseño:

● MVC (Modelo-Vista-Controlador)MVC (Modelo-Vista-Controlador)● Active Record, Single Table Inheritance.Active Record, Single Table Inheritance.

● Brinda abstracción de objetos persistentes.Brinda abstracción de objetos persistentes.● Pensado para el desarrollo ágil y RUP.Pensado para el desarrollo ágil y RUP.● Fomenta las buenas prácticas de diseño e Fomenta las buenas prácticas de diseño e implementación. implementación.

Page 4: RubyOnRails: Con qué se come eso?

El lenguaje RubyEl lenguaje Ruby

Un lenguaje de programación que:Un lenguaje de programación que:● Es orientado a objetos (puro).Es orientado a objetos (puro).● Soporta reflexión y metaprogramación.Soporta reflexión y metaprogramación.● Tiene gran claridad semántica.Tiene gran claridad semántica.● Es fácilmente extensible y Open Es fácilmente extensible y Open Source.Source.● Es dinámico e interpretado.Es dinámico e interpretado.● Fue creado en Japón en 1995, y en 5 años Fue creado en Japón en 1995, y en 5 años desplazó a desplazó a Python.Python.

Page 5: RubyOnRails: Con qué se come eso?

El lenguaje RubyEl lenguaje Ruby

class Numericclass Numeric def mas(x)def mas(x) self.+(x)self.+(x) endendendend

y = 5.mas(6)y = 5.mas(6)

y = 3 + by = 3 + b

class Numericclass Numeric def mas xdef mas x self + xself + x endendendend

y = 5.mas 6 y = 5.mas 6

Page 6: RubyOnRails: Con qué se come eso?

El lenguaje RubyEl lenguaje Ruby

search_engines = search_engines = %w[Google Yahoo MSN].map do |engine|%w[Google Yahoo MSN].map do |engine| "http://www." + engine.downcase + ".com""http://www." + engine.downcase + ".com" endend

5.times { print "Ruby es Excelente!" }5.times { print "Ruby es Excelente!" }

Page 7: RubyOnRails: Con qué se come eso?

Filosofía del Framework RoRFilosofía del Framework RoR

Fundamentos de Ruby on Rails:Fundamentos de Ruby on Rails:● DRY (Don't Repeat Yourself).DRY (Don't Repeat Yourself).● Convención sobre configuración.Convención sobre configuración.● Uso de patrones de diseño.Uso de patrones de diseño.● Generación de código (helpers).Generación de código (helpers).● Menos código, menos errores.Menos código, menos errores.● Test integrados (unitarios y funcionales).Test integrados (unitarios y funcionales).

Page 8: RubyOnRails: Con qué se come eso?

El Patrón MVCEl Patrón MVC

La aplicación se divide en tres partes:La aplicación se divide en tres partes:● ModeloModelo

Responsable de mantener el “estado” de la aplicación.Responsable de mantener el “estado” de la aplicación.● VistaVista

Responsable de presentar la interfaz y la información al Responsable de presentar la interfaz y la información al usuariousuario

● ControladorControladorOrganiza la aplicación. Recibe eventos del exterior, Organiza la aplicación. Recibe eventos del exterior, interactúa con el modelo y actualiza la información de interactúa con el modelo y actualiza la información de las vistas.las vistas.

Page 9: RubyOnRails: Con qué se come eso?

El Patrón MVCEl Patrón MVC

B. D.

Navegador

Vista Modelo

Controlador

Page 10: RubyOnRails: Con qué se come eso?

MVC sobre RielesMVC sobre Rieles

Page 11: RubyOnRails: Con qué se come eso?

Los ModelosLos Modelos

Los modelos en Ruby on Rails:Los modelos en Ruby on Rails:● Emplean el patrón Active Record.Emplean el patrón Active Record.● Representados por clases que heredan de Representados por clases que heredan de la superclase ActiveRecord::Base.la superclase ActiveRecord::Base.● Encapsulan la lógica de persistencia.Encapsulan la lógica de persistencia.● Contienen reglas de negocios.Contienen reglas de negocios.● No incluyen propiedades.No incluyen propiedades.● Contienen relaciones con otros modelos.Contienen relaciones con otros modelos.

Page 12: RubyOnRails: Con qué se come eso?

El Patrón Active RecordEl Patrón Active Record

Reglas muuuuuy simples:Reglas muuuuuy simples:● Una clase -> Una tabla. (Pluralización)Una clase -> Una tabla. (Pluralización)● Un atributo -> Una columna.Un atributo -> Una columna.● Una instancia -> Una tupla (renglón).Una instancia -> Una tupla (renglón).● Relaciones:Relaciones:

“ “tiene un” tiene un” -> clave foránea.-> clave foránea. “ “pertenece a” pertenece a” -> clave foránea.-> clave foránea. “ “tiene muchos” tiene muchos” -> clave en la otra tabla-> clave en la otra tabla “ “muchos a muchos” -> tabla intermedia.muchos a muchos” -> tabla intermedia.

Page 13: RubyOnRails: Con qué se come eso?

Active Record en RoRActive Record en RoR

Nos proporciona:Nos proporciona:● Métodos Métodos find()find() y operaciones CRUD. y operaciones CRUD.● Relaciones.Relaciones.● Agregación, Herencia de Tabla Simple. Agregación, Herencia de Tabla Simple. ● Transacciones.Transacciones.● Validaciones y Callbacks.Validaciones y Callbacks.● Act as.Act as.

Page 14: RubyOnRails: Con qué se come eso?

ValidacionesValidaciones

Permiten agregar restricciones de dominio y Permiten agregar restricciones de dominio y lógica de negocios en el modelo:lógica de negocios en el modelo:

● Métodos Métodos validatevalidate y y validate_on_*validate_on_*● Validation Helpers:Validation Helpers:

Unicidad, presencia, ausencia.Unicidad, presencia, ausencia. Formato (expr. Regulares).Formato (expr. Regulares). Longitud, inclusión, exclusión.Longitud, inclusión, exclusión. Objetos relacionados.Objetos relacionados.

Page 15: RubyOnRails: Con qué se come eso?

CallbacksCallbacks

Permiten disparar lógica antes o después de Permiten disparar lógica antes o después de una modificación del estado del objeto:una modificación del estado del objeto:

● Antes/Después de su creación (.save)Antes/Después de su creación (.save)● Antes/Después de su actualización (.update)Antes/Después de su actualización (.update)● Antes/Después de su eliminación (.destroy)Antes/Después de su eliminación (.destroy)

Page 16: RubyOnRails: Con qué se come eso?

Pero... y SQL?Pero... y SQL?(Larga vida a las Migrations)(Larga vida a las Migrations)

Las migrations son archivos que permiten Las migrations son archivos que permiten alterar y versionar el esquema de la base de alterar y versionar el esquema de la base de datos del proyecto.datos del proyecto.

● Están escritas en Ruby.Están escritas en Ruby.● Se generan automágicamente.Se generan automágicamente.● Brindan independencia total del DBMS.Brindan independencia total del DBMS.● Permiten avanzar o retroceder en versiones.Permiten avanzar o retroceder en versiones.

Page 17: RubyOnRails: Con qué se come eso?

Las solicitudesLas solicitudes

Page 18: RubyOnRails: Con qué se come eso?

Las solicitudesLas solicitudes

Ejemplo de solicitudEjemplo de solicitud

http://localhost:3000/blog/display/5http://localhost:3000/blog/display/5

● blogblog se traduce a la clase BlogController se traduce a la clase BlogController● showshow se traduce al método show se traduce al método show● 55 se traduce al valor de se traduce al valor de params[:id]params[:id]

Page 19: RubyOnRails: Con qué se come eso?

TemplatesTemplatesPara qué otro lenguaje de templates?Para qué otro lenguaje de templates?

Enfoque extremadamente pragmático:Enfoque extremadamente pragmático:● Archivos (X)HTML con trozos (snippets) Archivos (X)HTML con trozos (snippets) de código Ruby embebidode código Ruby embebido● Las vistas comparten el espacio de Las vistas comparten el espacio de variables de su controlador.variables de su controlador.● Helpers HTML, XML y AJAX.Helpers HTML, XML y AJAX.● Funcionalidades de Layout y Partials.Funcionalidades de Layout y Partials.

Page 20: RubyOnRails: Con qué se come eso?

HelpersHelpersxhtml, xml, javascript... sin escribir ni una xhtml, xml, javascript... sin escribir ni una

línea de xhtml, xml o javascript.línea de xhtml, xml o javascript.

Permiten la generación de código xhtml, xml Permiten la generación de código xhtml, xml y javascript a partir de código Ruby: y javascript a partir de código Ruby:

<p> <%= link_to “Eliminar”,

{ :action => “delete”, :id => @actual }, :confirm => “Está seguro?”

%> </p>

Page 21: RubyOnRails: Con qué se come eso?

Colgados del AndamioColgados del AndamioScaffolds y el desarrollo de prototiposScaffolds y el desarrollo de prototipos

Los scaffolds son archivos generados auto-Los scaffolds son archivos generados auto-mágicamente por Rails para un modelo en mágicamente por Rails para un modelo en particular y que brindan:particular y que brindan:

● Controladores, vistas y helpers necesarios Controladores, vistas y helpers necesarios para el ABM y listado del mismo.para el ABM y listado del mismo.

Lo que NO brindan:Lo que NO brindan:

● Soporte a Relaciones.Soporte a Relaciones.● Actualización ante cambios en el modelo.Actualización ante cambios en el modelo.

Page 22: RubyOnRails: Con qué se come eso?

Quiero Rails funcionando ya!Quiero Rails funcionando ya!

● Instalación TradicionalInstalación Tradicional● Ruby on Rails en 2'Ruby on Rails en 2'

● XAMPP + AxleGrease (ex ROROX)XAMPP + AxleGrease (ex ROROX)● InstantRailsInstantRails

Page 23: RubyOnRails: Con qué se come eso?

Entornos de DesarrolloEntornos de Desarrollo(No tengo una Mac ni presupuesto para comprar el TextMate!)(No tengo una Mac ni presupuesto para comprar el TextMate!)

● RADRailsRADRails● Ride - Me Ride - Me ● Emacs + Rails Mode + mil y un agregados Emacs + Rails Mode + mil y un agregados (a.k.a. The Hacker's Way)(a.k.a. The Hacker's Way)

● Vim + snippetsEmuVim + snippetsEmu

Page 24: RubyOnRails: Con qué se come eso?

Entornos de EjecuciónEntornos de Ejecución

● WebBrickWebBrick● LighttpdLighttpd, Apache CGI/FastCGI, Apache CGI/FastCGI● MongrelMongrel

Escalando Rails?Escalando Rails?Clusters Mongrel.Clusters Mongrel.Capistrano.Capistrano.

Page 25: RubyOnRails: Con qué se come eso?

Cuándo usar Rails?Cuándo usar Rails?

● Cuando esté cómodo con el Framework.Cuando esté cómodo con el Framework.● Con equipos ágiles y dinámicos.Con equipos ágiles y dinámicos.● Cuando tengo pocos desarrolladores.Cuando tengo pocos desarrolladores.● Con proyectos de pequeños o medianos.Con proyectos de pequeños o medianos.

Page 26: RubyOnRails: Con qué se come eso?

Cuándo NO usar Rails?Cuándo NO usar Rails?

● Aplicaciones muy grandes.Aplicaciones muy grandes.● Con bases de datos legadas.Con bases de datos legadas.● Con desarrolladores “mediocres” o poco Con desarrolladores “mediocres” o poco habituados a los cambios.habituados a los cambios.● Con equipos de desarrollo muy grandes.Con equipos de desarrollo muy grandes.

Page 27: RubyOnRails: Con qué se come eso?

Y??? Y??? Con qué se come esto?Con qué se come esto?

Page 28: RubyOnRails: Con qué se come eso?

alumno profesor

*[n] : responder(pregunta)

respuesta

asistente expositor

Preguntas?Preguntas?

Page 29: RubyOnRails: Con qué se come eso?

Lecturas RecomendadasLecturas Recomendadas

““Cuatro días con Rails”Cuatro días con Rails” http://rails.homelinux.org/http://rails.homelinux.org/

““Ruby for Rails: Ruby techniques for rails developers”Ruby for Rails: Ruby techniques for rails developers” David A. Black. - Ed. Manning (2006)David A. Black. - Ed. Manning (2006)

““Agile Web Development with Rails”Agile Web Development with Rails” Dave Thomas / David Heinemeier Hansson - Ed. The Pragmatic Programmers (2005)Dave Thomas / David Heinemeier Hansson - Ed. The Pragmatic Programmers (2005)

Page 30: RubyOnRails: Con qué se come eso?

Lecturas RecomendadasLecturas Recomendadas

““Rails Recipes”Rails Recipes” Chad Fowler - Ed. The Pragmatic Programmers (2006)Chad Fowler - Ed. The Pragmatic Programmers (2006)

““Programming Ruby” (2da. Programming Ruby” (2da. EdiciónEdición)) Dave Thomas - Ed. The Pragmatic Programmers (2005)Dave Thomas - Ed. The Pragmatic Programmers (2005) http://www.rubycentral.com/book/http://www.rubycentral.com/book/ http://pickaxe.ruby.org.es/http://pickaxe.ruby.org.es/

Page 31: RubyOnRails: Con qué se come eso?

Recursos On-LineRecursos On-Line

Sitios fundamentalesSitios fundamentaleshttp://www.rubyonrails.org.es/http://www.rubyonrails.org.es/

http://api.rubyonrails.org/http://api.rubyonrails.org/

Foros y Listas de correoForos y Listas de correoRails-ES: Rails-ES:

http://www.ruby-forum.com/forum/22http://www.ruby-forum.com/forum/22

Ruby Argentina: Ruby Argentina: http://rubyargentina.soveran.com/signuphttp://rubyargentina.soveran.com/signup

Page 32: RubyOnRails: Con qué se come eso?

Recursos On-LineRecursos On-Line

DivulgaciónDivulgaciónhttp://www.rubycorner.com/http://www.rubycorner.com/ http://www.rubycorner.com/blogs/lang/eshttp://www.rubycorner.com/blogs/lang/es (Sólo en español) (Sólo en español)http://www.sobrerailes.com/http://www.sobrerailes.com/ http://onrails.com.ar/http://onrails.com.ar/ http://rubyargentina.soveran.com/http://rubyargentina.soveran.com/ http://www.planetarails.es/http://www.planetarails.es/

Page 33: RubyOnRails: Con qué se come eso?

Gracias!Gracias!

(2006) Gabriel E. ArellanoPermission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. The GNU Free Documentation License as applicable to this document can be found at: http://www.gnu.org/copyleft/fdl.html

http://www.gabriel-arellano.com.ar/charlas/