Ruby on Rails

  • View
    1.494

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Text of Ruby on Rails

  • 1. Ruby on Rails Desarrollo Web gil Javier Espinazo Pagn Convocatoria Febrero 2005/2006Ruby on Rails - Javier Espinazo Pagn - 1Febrero 2005/2006

2. Qu es Ruby?Lenguaje interpretado Orientado a ObjetosTipado dinmicamente y similar a Perl y PhytonSintaxis simple, clara y uniformeBiblioteca de clases extensa e intuitivaUtilizacin de bloques para parametrizarmtodos (iteradores, listeners) y buclesTipos primitivos son tambin clases y permitenejecucin seguraManejo avanzado de expresiones regulares ycadenas de texto Ruby on Rails - Javier Espinazo Pagn - 2Febrero 2005/2006 3. Qu es Ruby? (Ejemplos)def analizar_expresion(texto, expr, entero)if texto =~ expr entero.upto(10) doprint "#{$`}#{$'}yield endelse no coincideendend analizar_expresion(Ruby on Rails, /R+l/, 8) doprint coincideend Ruby on s coincide coincide coincide Ruby on Rails - Javier Espinazo Pagn - 3 Febrero 2005/2006 4. Qu es Ruby? (Ejemplos)class File def File.open_and_process(*args)f = File.open(*args)yield ff.close() endend File.open_and_process("testfile", "r") do |file| while line = file.getsputs line endendLinea uno Linea dos Ruby on Rails - Javier Espinazo Pagn - 4Febrero 2005/2006 5. Qu es Rails? Framework de desarrollo web con RubyManifiesto gil:Individuo e interacciones antes que procesos yherramientasDesarrollar software antes que documentarColaborar con el cliente antes que negociar contratosResponder al cambio antes que seguir un planDont Repeat Yourself (DRY) Ruby on Rails - Javier Espinazo Pagn - 5Febrero 2005/2006 6. Qu es Rails? (2)Individuo e interacciones antes que procesos yherramientas:Es ms conveniente crear primero el equipo de programacin yque ste configure su propio entorno de desarrollo en base asus necesidadesDesarrollar software antes que documentar:No producir documentos a menos que sean necesarios de formainmediata. Documentacin breve y concisaColaborar con el cliente antes que negociar contratos:Interaccin constante entre cliente y equipoResponder al cambio antes que seguir un plan:Planificacin flexible y abiertaRuby on Rails - Javier Espinazo Pagn -6 Febrero 2005/2006 7. Qu es Rails? (3)Arquitectura Modelo-Vista-ControladorModelo: Active Record ORM para Rails Utiliza convenciones para minimizar la configuracin Abstraccin de alto nivelVista: Action View Ficheros RHTML y XML Objetos del Controlador accesibles y variables de entorno Mdulos HelperControlador: Action Controller Resolucin inteligente de dependencias Fcil configuracin de dependencias Manejo sencillo de cookies, sesiones y variables de la conexin Ruby on Rails - Javier Espinazo Pagn - 7Febrero 2005/2006 8. Qu es Rails? (5)Facilidad de configuracinMinimiza los ficheros de configuracin mediante el usoestandarizado y jerrquico de directorios: app/: modelos, vistas y controladores conf/: configuracin general y de conexiones a BBDD db/: esquemas de BBDD doc/: documentacin autogenerada log/: bitcora de la ejecucin script/: scripts de utilidades test/: tests unitarios, funcionales, etc. Diferentes modos de funcionamiento en base al tipode ejecucinRuby on Rails - Javier Espinazo Pagn - 8Febrero 2005/2006 9. El Modelo: Active Record ORM propio de Rails cercano al estndarFacilidad de asociacin clase-tabla:Clase debe heredar de ActiveRecord::BaseRails asume el nombre de la tabla como el plural delnombre de la clase (mtodo pluralize()).Permite asociacin explcitaAtributos de la clase se infieren en tiempo de ejecucinManejo automatizado de claves primarias Ruby on Rails - Javier Espinazo Pagn - 9Febrero 2005/2006 10. El Modelo: Active Record (2) Ejemplo:Creamos una tabla orders de rdenes de compra: create table orders {id int not null auto_increment,name varchar(100)not null,emailvarchar(255)not null,addresstextnot null,pay_type char(10)not null,shipped_at datetimenull,primary key (id) };Ruby on Rails - Javier Espinazo Pagn -10Febrero 2005/2006 11. El Modelo: Active Record (3) Ejemplo (sigue):Ahora queremos acceder a un objeto de la tablaorders, para lo que declaramos: class Order < ActiveRecord::BaseRails resuelve las asociaciones y ya podemosutilizar objetos de la tabla: order = Order.find(123) order.name = Javier Espinazo order.saveRuby on Rails - Javier Espinazo Pagn - 11 Febrero 2005/2006 12. El Modelo: Active Record (4)Conectar con una BBDD es tn fcil como rellenar un hash:ActiveRecord::Base.establish_connection(:adapter => mysql:host => servidorBBDD.com:database => baseDeDatos:username => nombreUsuario:password => claveUsuario)Las operaciones CRUD se realizan con mtodos sencillos: Crear: creamos un objeto con new() y lo guardamos con save(). Leer: poderoso mtodo find() que admite Clave primaria Consulta explcita en SQL con comodines dinmicos (placeholders) Actualizar: utilizando save(), update(), update_attribute() o update_attributes() Borrar: utilizando delete() Railsdelete_all() Ruby on o - Javier Espinazo Pagn - Febrero 2005/200612 13. El Modelo: Active Record (5)Relaciones entre tablas se especifican intuitivamente:Directivas has_one, has_many, belongs_to yhas_and_belongs_to_many en la declaracin de claseLas directivas generan mtodos para manejar lasrelacionesTransacciones implementadas como bloques:Bloques utilizados con el mtodo transaction() deActiveRecord::Base se ejecutan transaccionalmenteSi se aborta la transaccin, los cambios no afectan a la BBDDpero s al programa clienteNecesidad de utilizar clusulas rescue de tratamiento deexcepciones para dejar los datos de programa consistentes Ruby on Rails - Javier Espinazo Pagn - 13 Febrero 2005/2006 14. La vista: Action ViewCreacin programtica de ficheros XML: claseBuilderCdigo HTML + cdigo Ruby = plantillas RHTMLVariables de instancia del controlador ycontrolador disponibles en la vistaVariables de sesin y conexin disponibles en lavista (menos usadas)Cdigo Ruby al estilo de JSP => duplicacin decdigo y poca legibilidadSolucin: mdulos Helper Ruby on Rails - Javier Espinazo Pagn - 14Febrero 2005/2006 15. La vista: Action View (2)Define mtodos que pueden ser llamados por el RHTML =>cdigo ms corto, ms legible y centralizado (principio DRY)Un Helper por defecto para cada controlador y tambinpodemos definir nuevos o compartirlosEjemplo: Controlador StoreController tiene StoreHelper:module StoreHelperdef page_title@page_title = Ttulo generalendendAhora en el fichero store.rhtml podemos usar: Ruby on Rails - Javier Espinazo Pagn - 15Febrero 2005/2006 16. La vista: Action View (3)Creacin programtica de enlaces con link_to()Especificamos mensaje, destino y atributos HTMLTambin mail_to(), button_to(), etcAyuda para la paginacin de listados grandesMtodo paginate() en el controlador y pagination_links()en la vista (RHTML)Helpers especficos paraFormularios (form_tag)Cuadros de texto, botones, etc.Permiten asociar los elementos HTML conacciones en los controladores (hash params)Manejo programtico de plantillas CSS (layouts)Ruby on Rails - Javier Espinazo Pagn - Febrero 2005/200616 17. El Controlador: Action ControllerSistema de routing inteligente basado en la jerarqua dela URL: Ejemplo:http://ejemplo.com/repositorio/obtener_ejemplo/123 ejecutaRepositorioController.obtener_ejemplo(123) Si no se encuentra levanta excepcin method_missingConfiguracin explcita en routes.rb ActionController::Routing::Routes.draw map.connect Definir asociaciones con patrones (expresiones regulares) Asociaciones nombradasCreacin programtica de URLs con url_for() Utiliza las asociaciones definidas anteriormente Asume valores por defecto Espinazo Pagn - Ruby on Rails - Javier17 Febrero 2005/2006 18. El Controlador: Action Controller (2) Variables de contexto:request: ip remota, tipo de peticin, dominioparams: parmetros de la peticin (formularios, URL)cookies y session: manejo de sesin en forma de hashheaders: cabeceras HTTP para la respuestaComunicacin entre acciones: flashHash similar a un Portapapeles, guarda anotaciones,mensajes de advertencia o error, etc.Ruby on Rails - Javier Espinazo Pagn - 18Febrero 2005/2006 19. El Controlador: Action Controller (2) Cookies programticas intuitivasEjemplo: Class CookiesController < ApplicationController def accion_unocookies[:preferencia] = msicaredirect_to :action => accion_dos end def accion_doscookie_value = cookies[:preferencia]render(:text => Parece que quiere hablar de #{cookie_value}) end endCada cookie es tambin un hash (:value, :expires, :path)Manejo similar para sesiones (session) Ruby on Rails - Javier Espinazo Pagn - 19Febrero 2005/2006 20. El Controlador: Action Controller (3) Sesiones ofrecen varias propiedades:database_manager, domain, id, key, path, expiresdatabase_manager => persistencia:PStore: fichero plano en formato PStoreDRb: BBDD distribuida de objetos para RubyMemory: memoria local de la aplicacin ( )File: fichero plano ( )ActiveRecord: BBDD (MySQL, Oracle, etc.). Creacin detablas mediante DDL y serializacin de objetos medianteYAML (similar a Properties de Java) Ruby on Rails - Javier Espinazo Pagn - 20 Febrero 2005/2006 21. El Controlador: Action Controller (4)Soporte de AOP: filterafter_filter, before_filter, around_filterLos declara el mtodo filtrado => acoplamientoVerificacin se consigue con filtrosSe intancia como un hash. Ejemplo: class BlogController < ApplicationController verify :only => :post_comment, :session => :user_id, :add_flash => { :note => You must log in}, :redirect_to => :index end Ruby on Rails - Javier Espinazo Pagn - 21Febrero 2005/2006 22. Otras caractersticas Soporte integrado de AJAX:link_to_remote(), form_remote_tag(), observe_field(),periodically_call_remote()Efectos grficosCallbacksManejo de e-mails con Action MailerWeb Services con Action Web ServiceManejo de escalabilidad basado en persistenciaen BBDD centralizada, comparticin nula entreaplicaciones y sistema de cach centralizada Ruby on Rails - Javier Espinazo Pagn - 22Febrero 2005/2006 23. ConclusionesDesarrollo Web realmente rpido y sencilloIntegracin de la aplica