RubyOnRails: Con qué se come eso?

Post on 19-Jan-2015

494 views 0 download

description

 

Transcript of 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

¿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...

¿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.

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.

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

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!" }

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).

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.

El Patrón MVCEl Patrón MVC

B. D.

Navegador

Vista Modelo

Controlador

MVC sobre RielesMVC sobre Rieles

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.

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.

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.

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.

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)

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.

Las solicitudesLas solicitudes

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]

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.

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>

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.

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

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

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.

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.

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.

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

alumno profesor

*[n] : responder(pregunta)

respuesta

asistente expositor

Preguntas?Preguntas?

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)

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/

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

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/

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/