SlideShare una empresa de Scribd logo
Ruby on Rails
   Pedro Visintin
Dale un pescado a un hombre...

...Y LO ALIMENTARÁS POR UN DÍA. Enseñale a pescar, y lo
               alimentarás por una vida.
Desarrollo Web

• HTML algo así como reportes
• con JavaScript algo de código
• con CSS otro lenguaje más para
  complicarle la vida al programador y al
  diseñador gráfico
• deadlines asesinos y cambios constantes
• Una hermosa RDBMS para persistencia
Un framework Web
• Orientado a Objetos
• ORM (ó document oriented database?)
• REST
• Mailer
• Rendering
• Javascript Glue
ex
                           sodero
                            (cajón
                              de
                            soda)



Yukihiro Matsumoto creador de Ruby
Jopo
       web 2.0




David Heinemeier Hansson. Creador de
                Rails
Como nos sentimos
    programando?

• DRY (do not repeat yourself)
• Convention Over Configuration
• Pensado en el programador, no el la
  máquina
las aplicaciones no
 escalan montañas
Rendering
• ActionView
• erb
• haml
• otros
• view.mime-type.rendering-engine =
  index.html.haml
erb rendering
<h1>Product<%= @product.name %></h1>
<ul>
<% @product.comments.each do |comment| %>
<li><%= comment.subject %></li>
<% end %>
</ul>
ActionPack


• ActionView
• ActionController
Hablemos de Recursos
REST

• interfaz polimórfica
• stateless
• un recurso multiples representaciones
Resources on Rails
                               map.resources :products




                          rake routes | grep product
      products GET /products(.:format) {:action=>"index", :controller=>"products"}
             POST /products(.:format) {:action=>"create", :controller=>"products"}
 new_product GET /products/new(.:format) {:action=>"new", :controller=>"products"}
edit_product GET /products/:id/edit(.:format) {:action=>"edit", :controller=>"products"}
       product GET /products/:id(.:format) {:action=>"show", :controller=>"products"}
            PUT /products/:id(.:format) {:action=>"update", :controller=>"products"}
          DELETE /products/:id(.:format) {:action=>"destroy", :controller=>"products"}
Resources on Rails
                      map.resources :products, :has_many                                 => [ :comments]

                                                           rake routes|grep product
                                 products GET /products(.:format)                {:action=>"index", :controller=>"products"}
                                       POST /products(.:format)                {:action=>"create", :controller=>"products"}
                              new_product GET /products/new(.:format)                {:action=>"new", :controller=>"products"}
                              edit_product GET /products/:id/edit(.:format)         {:action=>"edit", :controller=>"products"}
                                  product GET /products/:id(.:format)            {:action=>"show", :controller=>"products"}
                                       PUT /products/:id(.:format)            {:action=>"update", :controller=>"products"}
                                      DELETE /products/:id(.:format)           {:action=>"destroy", :controller=>"products"}



    product_comments GET /products/:product_id/comments(.:format) {:action=>"index", :controller=>"comments"}

                   POST /products/:product_id/comments(.:format) {:action=>"create", :controller=>"comments"}

 new_product_comment GET /products/:product_id/comments/new(.:format) {:action=>"new", :controller=>"comments"}

edit_product_comment GET /products/:product_id/comments/:id/edit(.:format){ :action=>"edit", :controller=>"comments"}

    product_comment GET      /products/:product_id/comments/:id(.:format) {:action=>"show", :controller=>"comments"}

                  PUT    /products/:product_id/comments/:id(.:format) {:action=>"update", :controller=>"comments"}

                DELETE /products/:product_id/comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
ActionController
class ProductsController < ApplicationController
   def index
   end
   def new
   end
   def edit
   end
   def show
   end
   def create
   end
   def update
   end
   def destroy
   end
end
request cycle
   http://localhost:3000/products/123

class ProductsController < ApplicationController
def show
  @product = Product.find(params[:id])
end

RAILS_ROOT/apps/views/products/show.html.erb
Tu vida es
Orientada a
 Objetos?
The Orm: ActiveRecord

•   persiste transparentemente a un RDBMS a través de adapters

•   se escribe muy poco SQL casi nada

•   provee macros para asociaciones

•   provee validaciones

•   provee callbacks en los instantes necesarios

•   (named scopes) provee asociar metodos a queries predefinidos
    y anidarlos indefinidamente

•   soporte de transacciones

•   soporte de observers

•   reflections en asociaciones y agregaciones
complementos y otros
•   Manejo automático de entornos

•   Generators

•   Consola

•   Log

•   Rake

•   Migrations

•   Testing
Una Clase ActiveRecord


 Class Product < ActiveRecord::Base
 end
El soporte en la BD
class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.string :name, :limit => 100
      t.timestamps
    end
  end

  def self.down
    drop_table :products
  end
end
Una Clase ActiveRecord
 Class Product < ActiveRecord::Base
  has_many :comments
  validates_presence_of :name
  validates_uniqueness_of :name
  before_save :generate_code
 end
Migrations

• es donde se definen las tablas para
  persistencia
• versionado del diseño de tablas del RDBMS
• permite ir hacia adelante o hacia atrás
• nos desliga del SQL
Qué es Rake?
•   es un make hecho en ruby para ruby

•   rails usa rake para automatizar tareas

    •   crear bases de datos

    •   actualizar scripts

    •   migraciones

    •   etc

•   rake tiene dependencias de tareas a ejecutar
Metodologías?

• BDD
• TDD
• HLQSMC (hago lo que se me canta)
• FDD (faso driven development)
• Otras
BDD con Rspec
describe Project do
  describe “creating” do
    it “should validate uniqueness of name” do
       Project.create!(:name=>‘proj’)
       Project.new(:name=>‘proj’).should_not be_valid
    end
  end
end
Entornos de Desarrollo

• Emacs
• Vi
• Textmate (mac os)
• Notepad++
• Netbeans (para los que le gustan las IDE)
bolario?
Preguntas? (si hay tiempo)
Referencias
• http://guides.rubyonrails.org/
• http://www.javapassion.com/rubyonrails/
  #Ruby_On_Rails_Basics
• http://www.rubyonrails.org/
• http://lista.rubyargentina.com.ar/
• http://blogs.onrails.com.ar
hola@pedrovisintin.com
http://www.pedrovisintin.com

Más contenido relacionado

Similar a Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires

Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
Nelson Rojas Núñez
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
INSIGNIA4U
 
Rails intro
Rails introRails intro
Rails intro
Miguel Fernández
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
ThirdWay
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
Rodolfo Finochietti
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
Freelancer
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
Alberto Diaz Martin
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
Alberto Diaz Martin
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
Rodolfo Finochietti
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelosdokeosla
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2
ferdinand13
 
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScriptFull-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Diego López-de-Ipiña González-de-Artaza
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
Ignacio Muñoz Vicente
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
Andy Dawson
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
Daryl Moreno
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
Acquia
 
#Cappacitate2015 Bogota
#Cappacitate2015 Bogota#Cappacitate2015 Bogota
#Cappacitate2015 Bogota
Julián R. Figueroa
 

Similar a Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires (20)

Todomir
TodomirTodomir
Todomir
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Rails intro
Rails introRails intro
Rails intro
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2
 
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScriptFull-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
 
#Cappacitate2015 Bogota
#Cappacitate2015 Bogota#Cappacitate2015 Bogota
#Cappacitate2015 Bogota
 

Último

Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
durangense277
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
espinozaernesto427
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
Ing. Julio Iván Mera Casas
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 

Último (20)

Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 

Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires

  • 1. Ruby on Rails Pedro Visintin
  • 2. Dale un pescado a un hombre... ...Y LO ALIMENTARÁS POR UN DÍA. Enseñale a pescar, y lo alimentarás por una vida.
  • 3. Desarrollo Web • HTML algo así como reportes • con JavaScript algo de código • con CSS otro lenguaje más para complicarle la vida al programador y al diseñador gráfico • deadlines asesinos y cambios constantes • Una hermosa RDBMS para persistencia
  • 4. Un framework Web • Orientado a Objetos • ORM (ó document oriented database?) • REST • Mailer • Rendering • Javascript Glue
  • 5. ex sodero (cajón de soda) Yukihiro Matsumoto creador de Ruby
  • 6. Jopo web 2.0 David Heinemeier Hansson. Creador de Rails
  • 7. Como nos sentimos programando? • DRY (do not repeat yourself) • Convention Over Configuration • Pensado en el programador, no el la máquina
  • 8. las aplicaciones no escalan montañas
  • 9. Rendering • ActionView • erb • haml • otros • view.mime-type.rendering-engine = index.html.haml
  • 10. erb rendering <h1>Product<%= @product.name %></h1> <ul> <% @product.comments.each do |comment| %> <li><%= comment.subject %></li> <% end %> </ul>
  • 13. REST • interfaz polimórfica • stateless • un recurso multiples representaciones
  • 14. Resources on Rails map.resources :products rake routes | grep product products GET /products(.:format) {:action=>"index", :controller=>"products"} POST /products(.:format) {:action=>"create", :controller=>"products"} new_product GET /products/new(.:format) {:action=>"new", :controller=>"products"} edit_product GET /products/:id/edit(.:format) {:action=>"edit", :controller=>"products"} product GET /products/:id(.:format) {:action=>"show", :controller=>"products"} PUT /products/:id(.:format) {:action=>"update", :controller=>"products"} DELETE /products/:id(.:format) {:action=>"destroy", :controller=>"products"}
  • 15. Resources on Rails map.resources :products, :has_many => [ :comments] rake routes|grep product products GET /products(.:format) {:action=>"index", :controller=>"products"} POST /products(.:format) {:action=>"create", :controller=>"products"} new_product GET /products/new(.:format) {:action=>"new", :controller=>"products"} edit_product GET /products/:id/edit(.:format) {:action=>"edit", :controller=>"products"} product GET /products/:id(.:format) {:action=>"show", :controller=>"products"} PUT /products/:id(.:format) {:action=>"update", :controller=>"products"} DELETE /products/:id(.:format) {:action=>"destroy", :controller=>"products"} product_comments GET /products/:product_id/comments(.:format) {:action=>"index", :controller=>"comments"} POST /products/:product_id/comments(.:format) {:action=>"create", :controller=>"comments"} new_product_comment GET /products/:product_id/comments/new(.:format) {:action=>"new", :controller=>"comments"} edit_product_comment GET /products/:product_id/comments/:id/edit(.:format){ :action=>"edit", :controller=>"comments"} product_comment GET /products/:product_id/comments/:id(.:format) {:action=>"show", :controller=>"comments"} PUT /products/:product_id/comments/:id(.:format) {:action=>"update", :controller=>"comments"} DELETE /products/:product_id/comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
  • 16. ActionController class ProductsController < ApplicationController def index end def new end def edit end def show end def create end def update end def destroy end end
  • 17. request cycle http://localhost:3000/products/123 class ProductsController < ApplicationController def show @product = Product.find(params[:id]) end RAILS_ROOT/apps/views/products/show.html.erb
  • 18. Tu vida es Orientada a Objetos?
  • 19. The Orm: ActiveRecord • persiste transparentemente a un RDBMS a través de adapters • se escribe muy poco SQL casi nada • provee macros para asociaciones • provee validaciones • provee callbacks en los instantes necesarios • (named scopes) provee asociar metodos a queries predefinidos y anidarlos indefinidamente • soporte de transacciones • soporte de observers • reflections en asociaciones y agregaciones
  • 20. complementos y otros • Manejo automático de entornos • Generators • Consola • Log • Rake • Migrations • Testing
  • 21. Una Clase ActiveRecord Class Product < ActiveRecord::Base end
  • 22. El soporte en la BD class CreateProducts < ActiveRecord::Migration def self.up create_table :products do |t| t.string :name, :limit => 100 t.timestamps end end def self.down drop_table :products end end
  • 23. Una Clase ActiveRecord Class Product < ActiveRecord::Base has_many :comments validates_presence_of :name validates_uniqueness_of :name before_save :generate_code end
  • 24. Migrations • es donde se definen las tablas para persistencia • versionado del diseño de tablas del RDBMS • permite ir hacia adelante o hacia atrás • nos desliga del SQL
  • 25. Qué es Rake? • es un make hecho en ruby para ruby • rails usa rake para automatizar tareas • crear bases de datos • actualizar scripts • migraciones • etc • rake tiene dependencias de tareas a ejecutar
  • 26. Metodologías? • BDD • TDD • HLQSMC (hago lo que se me canta) • FDD (faso driven development) • Otras
  • 27. BDD con Rspec describe Project do describe “creating” do it “should validate uniqueness of name” do Project.create!(:name=>‘proj’) Project.new(:name=>‘proj’).should_not be_valid end end end
  • 28. Entornos de Desarrollo • Emacs • Vi • Textmate (mac os) • Notepad++ • Netbeans (para los que le gustan las IDE)
  • 31. Referencias • http://guides.rubyonrails.org/ • http://www.javapassion.com/rubyonrails/ #Ruby_On_Rails_Basics • http://www.rubyonrails.org/ • http://lista.rubyargentina.com.ar/ • http://blogs.onrails.com.ar