• No se han encontrado resultados

Ruby on Rails. Gary Castillo Gorbunov

N/A
N/A
Protected

Academic year: 2021

Share "Ruby on Rails. Gary Castillo Gorbunov"

Copied!
34
0
0

Texto completo

(1)

Ruby on Rails

Ruby on Rails

(2)

El Lenguaje Ruby

El Lenguaje Ruby

Este es un lenguaje pura y

Este es un lenguaje pura y

netamente orientado a objetos.

netamente orientado a objetos.

Tiene una sintaxis muy clara y

Tiene una sintaxis muy clara y

limpia que hace que programar

limpia que hace que programar

sea elegante y entretenido.

sea elegante y entretenido.

Aquí se combinan la facilidad

Aquí se combinan la facilidad

de uso y aprendizaje de Python

de uso y aprendizaje de Python

y el pragmatismo de Perl.

y el pragmatismo de Perl.

Ruby fue creado en Japón a

Ruby fue creado en Japón a

principios de los 90, por

principios de los 90, por

Yukihiro Matzumoto y ha

Yukihiro Matzumoto y ha

empezado a popularizarse en

empezado a popularizarse en

todo el mundo en los últimos

todo el mundo en los últimos

años.

años.

Yukihiro Matzumoto

(3)

Que puedo hacer con

Lenguaje Ruby

Front ends usando librerías GTK, QT,

Front ends usando librerías GTK, QT,

wxWindows, tk,Cocoa.

wxWindows, tk,Cocoa.

Aplicaciones cliente servidor

Aplicaciones cliente servidor

Conexiones con BD

Conexiones con BD

Servidores ej. LigHTTPd

Servidores ej. LigHTTPd

Aplicaciones Web

Aplicaciones Web

Generar ejecutables ej. Script2Exe

Generar ejecutables ej. Script2Exe

Scripts

Scripts

(4)

A que se parece el código?

A que se parece el código?

# Clase Saludos

# Clase Saludos

class

class

 Saludos

 Saludos

def

def

 initialize()

 initialize()

@elnombre = elnombre.capitalize

@elnombre = elnombre.capitalize

end

end

def

def

  di_hola

  di_hola

puts “Hola #{name}”

puts “Hola #{name}”

end

end

end

end

# Crea el Objeto

# Crea el Objeto

g = Saludos.new(“mundo”)

g = Saludos.new(“mundo”)

# Muestra mensaje Hola Mundo

# Muestra mensaje Hola Mundo

(5)

Todo es un objeto

Todo es un objeto

No tiene variables

primitivas como:

int

char

short

float

Todo se

transforma

automáticamente

en un objeto

(6)

una_variable = "hola mundo"

una_variable = "hola mundo"

puts una_variable.upcase

puts una_variable.upcase

HOLA MUNDO

HOLA MUNDO

puts una_variable.length

puts una_variable.length

10

10

puts “NO ME GRITEN”.downcase

puts “NO ME GRITEN”.downcase

no me griten

no me griten

puts -3.abs

puts -3.abs

3

3

(7)

Otro ejemplo

Otro ejemplo

# repite 5 veces hola

# repite 5 veces hola

5.times{ puts “hola” }

5.times{ puts “hola” }

# si la palabra “restorante” incluye subcadena

# si la palabra “restorante” incluye subcadena

# de caracteres “ante” no hace exit

# de caracteres “ante” no hace exit

exit unless “restorante”.include? “ante”

exit unless “restorante”.include? “ante”

# For's

# For's

For i in ['pera','papaya','piña'] { print i.capitalize }

For i in ['pera','papaya','piña'] { print i.capitalize }

# hace lo mismo

# hace lo mismo

['pera','papaya','piña'].each {|fruta| print fruta.capitalize }

(8)

En que tecnólogas y

En que tecnólogas y

plataformas funciona Ruby

plataformas funciona Ruby

Interprete de Ruby (Linux, Windows Mac

Interprete de Ruby (Linux, Windows Mac

OS X, Solaris)

OS X, Solaris)

Sun Java 6, interpretado y compilador a

Sun Java 6, interpretado y compilador a

bytecode.

bytecode.

(9)

Interpretes y Máquinas

Virtuales

Ruby 1.8.6

Ruby 1.9.1

Java + Jruby

Rubinius

.Net

(10)
(11)

Comparativa con Otros

Lenguajes

PHP PHP RUBY 1.8.6 RUBY 1.8.6 PERL PERL PYTHON 2.5 PYTHON 2.5 JRUBY JRUBY RUBY 1.9.1 RUBY 1.9.1 C++ C++ 0 1 2 3 4 5 6 7 Comparativa de interpretes Tiempo L e n g u a je

(12)

TIOBE Programming Community Index

TIOBE Programming Community Index

for April 2009

for April 2009

Delta in Position Programming Language

1

1

Java

2

2

C

3

3

C++

4

4

PHP

5

5

(Visual) Basic

6

9

Python

7

7

C#

8

8

JavaScript

9

6

Perl

10

22

Ruby

Position

Apr 2009

Apr 2004

Position

Year

Winner

2008

C

2007

Python

2006

Ruby

2005

J ava

2004

PHP

2003

C++

(13)

Métricas del uso de Ruby

(14)

Usuarios de Ruby

(15)

Que es Ruby on Rails?

Que es Ruby on Rails?

Marco de Desarrollo de aplicaciones web de código

Marco de Desarrollo de aplicaciones web de código

abierto.

abierto.

Escrito en el lenguaje de programación Ruby.

Escrito en el lenguaje de programación Ruby.

De arquitectura Modelo-Vista-Controlador (MVC)

De arquitectura Modelo-Vista-Controlador (MVC)

Ello hace más sencillo y rápido el desarrollo de

Ello hace más sencillo y rápido el desarrollo de

proyectos de gran magnitud.

proyectos de gran magnitud.

Los expertos manifiestan que se puede desarrollar

Los expertos manifiestan que se puede desarrollar

una aplicación web medianamente complicada al

una aplicación web medianamente complicada al

menos diez veces más deprisa que lo que se

menos diez veces más deprisa que lo que se

tardarías con un Marco de Desarrollo de Java, sin

tardarías con un Marco de Desarrollo de Java, sin

sacrificios de calidad.

sacrificios de calidad.

Creada por David Heinemeier Hansson

Creada por David Heinemeier Hansson

La versión 1 fue lanzada en el 13 de diciembre 2005

(16)

M

(17)

MODELO

MODELO

class Product < ActiveRecord::Base

class Product < ActiveRecord::Base

 

 

validates_presence_of :title, :description, :image_url

validates_presence_of :title, :description, :image_url

 

 

validates_numericality_of :price

validates_numericality_of :price

 

 

validates_uniqueness_of :title

validates_uniqueness_of :title

def validate

def validate

errors.add(:price,"ese precio debe ser positivo") 

errors.add(:price,"ese precio debe ser positivo") 

unless price.nil? || price > 0.0

unless price.nil? || price > 0.0

end

end

end

end

(18)

VISTA

VISTA

< <h1>Listing products</h1>h1>Listing products</h1> <table> <table>      <tr><tr>      <% for column in Product.content_columns %><% for column in Product.content_columns %>          <th><%= column.human_name %></th><th><%= column.human_name %></th>      <% end %><% end %>      </tr></tr>       <% for product in @products %> <% for product in @products %>      <tr><tr>      <% for column in Product.content_columns %><% for column in Product.content_columns %>          <td><%=h product.send(column.name) %></td><td><%=h product.send(column.name) %></td>      <% end %><% end %>          <td><%= link_to 'Show', :action => 'show', :id => product %></td><td><%= link_to 'Show', :action => 'show', :id => product %></td>          <td><%= link_to 'Edit', :action => 'edit', :id => product %></td><td><%= link_to 'Edit', :action => 'edit', :id => product %></td>          <td><%= link_to 'Destroy', { :action => 'destroy', :id => product }, <td><%= link_to 'Destroy', { :action => 'destroy', :id => product },  :confirm => 'Are you sure?', :method => :post %></td> :confirm => 'Are you sure?', :method => :post %></td>      </tr></tr>

(19)

CONTROLADOR

CONTROLADOR

class AdminController < ApplicationController class AdminController < ApplicationController      def indexdef index          listlist          render :action => 'list'render :action => 'list'      endend      def listdef list          @product_pages, @products = paginate :products, :per_page => 10@product_pages, @products = paginate :products, :per_page => 10      endend      def showdef show          @product = Product.find(params[:id])@product = Product.find(params[:id])      endend      def newdef new          @product = Product.new@product = Product.new      endend      def createdef create          @product = Product.new(params[:product])@product = Product.new(params[:product])          if @product.saveif @product.save              flash[:notice] = 'Product was successfully created.'flash[:notice] = 'Product was successfully created.'              redirect_to :action => 'list'redirect_to :action => 'list'          elseelse              render :action => 'new'render :action => 'new'          endend      endend

(20)

Relacionando tablas

Relacionando tablas

receta.rb

class Receta < ActiveRecord:Base

class Receta < ActiveRecord:Base

belongs_to :categoriabelongs_to :categoria end

end

en categoría.rb

en categoría.rb

class categoría < ActiveRecord::Base

class categoría < ActiveRecord::Base

has_many :recetas

has_many :recetas

end

end

tabla receta

tabla receta tabla categoria tabla categoria

campo categoria_id

(21)

Esfuerzo del aprendizaje

(22)

Filosofía del RoR

Filosofía del RoR

1)

1)

Menos dinero

Menos dinero

No necesitas dinero para el hardware. El hardware es barato. No No necesitas dinero para el hardware. El hardware es barato. No necesitas dinero para el software. El software es gratis.

necesitas dinero para el software. El software es gratis.

2)

2)

Menos tiempo

Menos tiempo

La mayoría del tiempo que pasas trabajando es tiempo perdido. La mayoría del tiempo que pasas trabajando es tiempo perdido. Demasiadas reuniones, demasiada planificación, demasiado pensar... Cuanto más

Demasiadas reuniones, demasiada planificación, demasiado pensar... Cuanto más

tiempo tienes, más tiempo pierdes.

tiempo tienes, más tiempo pierdes.

3)

3)

Menos abstracciones

Menos abstracciones

La mejor manera de aprovechar el tiempo es hacer menos La mejor manera de aprovechar el tiempo es hacer menos trabajo que no sea "real". Menos gráficos, menos documentación, menos especificaciones

trabajo que no sea "real". Menos gráficos, menos documentación, menos especificaciones

funcionales. Directo al grano, el producto que tus clientes realmente verán.

funcionales. Directo al grano, el producto que tus clientes realmente verán.

4)

4)

Menos software

Menos software

La clase de software que es satisfactorio de emplear es aquel que La clase de software que es satisfactorio de emplear es aquel que es simple, útil y va directo al grano.

(23)

Bases de Datos Soportadas

Bases de Datos Soportadas

MySQL

MySQL

PostgreSQL

PostgreSQL

SQLite

SQLite

Oracle

Oracle

Ms SQL Server

Ms SQL Server

DB2

DB2

Firebird

Firebird

(24)

WebServers Soportados

WebServers Soportados

Apache /FastCGI

Apache /FastCGI

Apache /CGI

Apache /CGI

Lighttpd

Lighttpd

(25)

El Scaffolding

El Scaffolding

http://127.0.0.1:3000/receta/new http://127.0.0.1:3000/receta/new http://207.0.0.1/receta/list http://207.0.0.1/receta/list

ruby script\generate controller Receta

(26)

Que dicen de RoR?

Que dicen de RoR?

Ruby on Rails es el tipo de

Ruby on Rails es el tipo de

Herramienta que te permite

Herramienta que te permite

crear una aplicación como un

crear una aplicación como un

shopping cart en menos de 4

shopping cart en menos de 4

horas.

horas.

Andrew Glover es un consultor de IBM y escritor de artículos sobre Java

Andrew Glover es un consultor de IBM y escritor de artículos sobre Java..

Fuente: http://www-128.ibm.com/developerworks/java/library/j-ruby/

(27)

El manejador de paquetes

El manejador de paquetes

Gems

Gems

Repositorio con mas de 10 000

aplicaciones y plugins

Ejemplo. Generadores de PDF, ODT,

(28)

Algunos

Algunos

IDE'S Para Desarrollar

IDE'S Para Desarrollar

Aplicaciones con ROR

Aplicaciones con ROR

(29)

Gedit + plugins

(30)
(31)
(32)

Quien usa RoR

Quien usa RoR

yubnub

yubnub

Buscador por linea de comandos

Buscador por linea de comandos

La Coctelera

La Coctelera

Servicio de Blog similar al blogger de Google

(33)

Para febrero del

2008 ya contaba

con más de

1 000 000

de

(34)

fin..

Referencias

Documento similar

A continuación, el médico evaluará su capacidad para ver letras o símbolos a distancia y examinará el interior de los ojos para detectar derrames de los vasos sanguíneos..

En este tiempo de cuarentena, es muy importante que organices tus actividades escolares para administrar de mejor manera tu tiempo.. Haz un horario en tu cuaderno de

Prerrequisitos Al menos 6 créditos de escuela secundaria, incluido 1 crédito de ciencias: 'B' o mejor, 1 crédito de inglés: 'C' o mejor, 1 crédito de álgebra: 'C' o mejor,

Los pacientes más jóvenes presentan con mayor frecuencia características de malabsorción y niveles más altos de TTG (anti transglutaminasa), pero normalizan TTG más

Reserve tiempo todos los días para dedicar a sus estudios para que pueda hacer su trabajo y aún tener tiempo para disfrutar?. Siempre es mejor estudiar un poco cada día que

Habrá baches en el camino, pero esto sugiere que los rendimientos reales de los bonos en EE.UU. seguirán siendo negativos durante algún tiempo para apuntalar la

Criterios sobre los alimentos como tener mejor sabor, ser más variados, estar mejor controlados, tener más o menos grasa, el tiempo dedi- cado para cocinarlos, la libertad de

La cartelización de los partidos políticos expresada por Katz y Mair (1995), así como el proceso de parlamentarismo racionalizado (Vergottini de, 1983) (que ha ido dando de