Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)

Preview:

DESCRIPTION

Esta es la presentación correspondiente a la charla "Descubriendo Ruby on Rails: Desarrollo Agil de Aplicaciones Web" dictada el 5 de Junio de 2007 por Juan Maria Martinez Arce y Carlos Kozuszko, ambos miembros de INSIGNIA (www.insignia4u.com); en el marco de la "Semana de la Ingenieria 2007".

Citation preview

(in)signiapresenta

Juan María Martinez Arce

Carlos Kozuszko

Descubriendo Ruby on RailsDesarrollo Agil de Aplicaciones Web

> tiempo > productividad

¡Tiempo!

¿Desarrollo Web?

Aplicación Web = Aplicación accedida por Browser

Internet

+ Cobertura Global

+ Bajos requerimientos de Hardware

+ Fácil de Usar

+ Mantenimiento

- Seguridad

Desktop vs Web

Mejores Prácticas

DRYDon’t Repeat Yourself!

MVCModel View Controller

ORMObject Relational Mapping

ORM – Active Record

Control de Versiones

Convention over ConfigurationConvención sobre configuración

Frameworks

Frameworks & Libraries

Frameworks tradicionales

• Struts - Java

• Springs - Java

• PHP + templates + ORM

• Catalyst - Perl

Frameworks ágiles

• Ruby on Rails – Ruby

• CakePHP – PHP

• Django – Python

Conociendo (in)signia

• 4 Desarrolladores

• 2 Diseñadores

• 7 proyectos en curso:– Portal de Noticias– Extranet de Clientes– Campus Virtual– Catálogo de Productos

¿Cómo hacemos?

(in)signia elige

(in)signia elige

(in)signia elige

(in)signia elige

¿Por qué Ruby on Rails?

class Empresa < ActiveRecord::Base belongs_to :vendedor has_many :usuarios validates_presence_of :razon_social validates_uniqueness_of :codigoend

Empresa.find(:all)Empresa.find(params[:id])Empresa.find_by_codigo(params[:codigo])Empresa.find_or_create_by_codigo(params[:codigo])

@empresa = Empresa.find(params[:id])@empresa.razon_social = ’(in)signia’@empresa.codigo = ’000999100’@empresa.save!

class EmpresasController < ApplicationController administrate_me :search => [‘razon_social’], :accepted => [:show],

:secured => true end

cap deploy

¡Nos gusta mucho!

Puntos fuertes de Rails

Open Source

Plataformas soportadas

• Servidores y entornos de desarrollo

– Linux/Unix– Windows– Mac OS X

• Servidores Web

– Apache– Lighttpd– IIS

• Bases de datos

– MySql– SQLite– Postgres– Oracle– MS SQL Server– DB2

Convención sobre Configuración

Ventajas

• ORM• Migraciones• Mapeo de peticiones

HTTP

• Soporte para AJAX• Plugins

class Empresa < ActiveRecord::Base belongs_to :vendedor, :class => “Persona” has_many :usuariosend

class Usuario < ActiveRecord::Base belongs_to :empresaend

class Persona < ActiveRecord::Base has_many :empresasend

vendedores = Persona.find(:all)vendedores.each do |vendedor| vendedor.empresas.each do |empresa| empresa.activar! puts “Empresa #{empresa} activada.” endend

class CreatePersonas < ActiveRecord::Migration def self.up create_table :personas do |t| t.column :nombre, :string t.column :apellido, :string t.column :domicilio, :string end end

def self.down drop_table :personas endend

class CreateEmpresas < ActiveRecord::Migration def self.up create_table :empresas do |t| t.column :razon_social, :string t.column :cuit, :string t.column :vendedor_id, :integer end end

def self.down drop_table :empresas endend

ActionController::Routing::Routes.draw do |map| map.connect “”, :controller => “login”, :action => “index” map.connect “:controller/:action/:id”end

http://www.demo.com -> LoginController.indexhttp://www.demo.com/empresas/show/1 -> EmpresasController.showhttp://www.demo.com/empresas/edit/1 -> EmpresasController.edithttp://www.demo.com/personas/show/5 -> PersonasController.showhttp://www.demo.com/personas/edit/5 -> PersonasController.edit

class PersonasController < ApplicationController

def show @persona = Persona.find(params[:id]) end

end

<html> <body> <p>Hola <%= @persona.nombre %></p> </body></html>

<html> <body> <% form_for :persona, @persona do |f| %> <label> Nombre: <%= f.text_field :nombre %> </label> <% end %> </body></html>

<html> <body> <p id=“hora”> Hora: <%= Time.now %></p> <%= link_to_remote “Actualizar!”, :url => {:action => “actualizar”}, :update => “hora” %> </body></html>

Plugins

• acts_as_authenticated• file_column• annotate_models• exception_notification• permalink_fu

• textile_editor_helper• liquid• asset_packager• acts_as_ferret

Menos conversación… Más acción(elvis)

¿dudas, consultas, opiniones?(trataremos de responder)

(in)signiahttp://www.insignia4u.com

Juan Maria Martinez Arcejuan@insignia4u.com

Carlos Kozuszkocarlos@insignia4u.com

Muchas gracias!

Recommended