descubriendo ruby on rails (desarrollo agil de aplicaciones web)
DESCRIPTION
Una breve presentación del framework Ruby on Rails para desarrollo de aplicaciones web.TRANSCRIPT
(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)
Muchas gracias!