2014 04 padrino

27

Transcript of 2014 04 padrino

Page 1: 2014 04 padrino
Page 2: 2014 04 padrino

Andrés Villagrán @avillagran

¿Que hago?Desarrollador:

Web, Móvil, Juegos, Aplicaciones, Flash/FMS Algunos clientes:

París, Ripley, Easy, Canal 13, Claro, Entel, Johnnie Walker, Land Rover, IDEAL, Cristal, Nike, Brooks, entre otros.

Director de Desarrollo Ricardo Velasco HR Strategic Partners

Pot.cl Tienda Online

Barros Arana 514 #27

Page 3: 2014 04 padrino

RUBYIntro rápida

Page 4: 2014 04 padrino

RUBYEscribiendo código

$ irb 1.9.3-p448 :001 > p “Hola mundo”

Directamente en el interprete

$ ruby nombre_archivo.rbUtilizando archivos

Page 5: 2014 04 padrino

RUBYVariables

variable_local = "valor"!@variable_global = 1!CONSTANTE = 2!!!@variable_global = "reutilizando"!

Page 6: 2014 04 padrino

RUBYarr = [200, 30, "Uno", "Dos"]!!# Primer valor!arr.first!# Segundo valor!arr.second!# Último valor!arr.last!!# Recorrer e imprimir!arr.each{|x| p x}!# resultado:!# 200!# 30!# "Uno"!# "Dos"!!!

# Utilizando bloques!arr.each do |x|! # Los paréntesis no son obligatorios! if x.class == String ! p(x) # Podría ser p x! end!end!# resultado:!# "Uno"!# "Dos"!!# One-liner!# Recorrer e imprimir sólo Strings!arr.each{|x| p(x) if x.class == String}!# resultado:!# "Uno"!# "Dos"!

Arreglos

Page 7: 2014 04 padrino

RUBYejemplo = {prueba: 'de', !! ! ! hash: true}!ejemplo.length!# resultado:!# 2!!arr = [{uno: 1, dos: 2}, ! {uno: 2, dos: 3},! {:uno => 3, :dos => 4} !! ! # Formato 'tradicional'! ]!

Hash# Ejemplos de one-liner!!# Imprimir atributos!arr.each{|x| p x[:uno]}!# resultado:!# 1!# 2!# 3"# Imprimir con índices!arr.each_with_index{|v, k| p "idx: #{k} valor: #{v}"}!# resultado:!# "idx: 0 valor: {:uno=>1, :dos=>2}"!# "idx: 1 valor: {:uno=>2, :dos=>3}"!# "idx: 2 valor: {:uno=>3, :dos=>4}"!!# Buscar con un valor en los atributos!arr.select{|x| x[:uno] == 2}!# resultado:!# [{:uno=>2, :dos=>3}]

Page 8: 2014 04 padrino

RUBYverdad = true!!p(verdad ? 'Es verdad' : 'Es mentira’)!!p "Verdad" if verdad # One-liner!!unless verdad! p "Mentira"!else! p "Verdad"!end!!if verdad.eql? true! p "Verdad"!elsif verdad.class == Fixnum! p "Es un número..."!else! p "Mentira"!end!

Condicionales

Page 9: 2014 04 padrino

RUBYarreglo = [2, 4, 6, 8, 10]!!for v in arreglo! p "valor: #{v}"!end!!i = 0!while i < arreglo.length do! p i! i += 1!end!

Loops

Page 10: 2014 04 padrino

PADRINOCapisci?

Page 11: 2014 04 padrino

PADRINO• Padrino utiliza como base Sinatra

require 'rubygems'!require 'sinatra'!!get '/' do! "HOLA MUNDO<br /><strong>ES SIMPLE</strong>"!end!

• Para instalar sinatra:$ gem install sinatra

• Ejecutar servidor:$ ruby archivo.rb!== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from Thin!>> Thin web server (v1.5.1 codename Straight Razor)!>> Maximum connections set to 1024!>> Listening on localhost:4567, CTRL+C to stop

Page 12: 2014 04 padrino

PADRINO

• Un Framework Web en Ruby • Construido sobre Sinatra • Bastante completo, parecido a Rails • Agnóstico • Rápido • Liviano • Interfaz de administración (parecido a Django) • Modular

Page 13: 2014 04 padrino

PADRINO

• MVC para Sinatra

• Generadores para crear proyectos con elección de componentes (ORM, Javascript, Testing, CSS, etc)

• Compatible con Rack • Simplicidad en declaración de rutas (va en los

controladores)

Page 14: 2014 04 padrino

PADRINO• Adaptadores: mysql, postgres, sqlite

• ORM: mongoid, activerecord, minirecord, datamapper, couchrest, mongomatic, mongomapper, ohm, ripple, sequel, dynamoid

• Renderers: erb, erubis, haml, slim, liquid

• Scripts: prototype, rightjs, jquery, mootools, extcore, dojo

• Hojas de estilo: Less, Sass

• Testing: bacon, shoulda, cucumber, riot, rspec, minitest, steak

Lista completa: http://www.padrinorb.com/guides/generators

Agnóstico

Page 15: 2014 04 padrino

PADRINOInstalación

$ sudo gem install padrino $ padrino g project proyecto -d datamapper -e haml -a mysql -b $ cd proyecto $ padrino start

En OS X da un error, se corrige:gem install do_mysql -- \ --with-mysql-dir=/usr/local/mysql --with-mysql-

lib=/usr/local/mysql/lib --with-mysql-include=/usr/local/mysql/includeLuego

$ bundle install

Page 16: 2014 04 padrino

PADRINOInstalación

Para no tener problemas con UTF8

I18n.default_locale = :es!Padrino.after_load do! Encoding.default_internal = nil! DataMapper.finalize!end!

config/boot.rb

Page 17: 2014 04 padrino

PADRINOPrimeros pasos

$ padrino g controller Users get:index get:new post:createCrear controlador

Crear vistas en app/views/users

• index.haml • new.haml

Agregar en app/controllers/users.rb en cada método:

• render ‘users/index’ • render ‘users/new’

Page 18: 2014 04 padrino

PADRINOPrimeros pasos

app/views/layouts/application.hamlCrear y editar layout

¿HTML? Nah… más simple y fácil de mantener HAML

Page 19: 2014 04 padrino

PADRINOPrimeros pasos

!!!!%html{lang: "es"}! %head! %meta{charset: "utf-8"}/! %title Padrino! %link{href: "http://getbootstrap.com/dist/css/bootstrap.min.css", rel: "stylesheet", type: "text/css"}/! %body! .container! .row! .col-md-12! = yield!

app/views/layouts/application.haml

Page 20: 2014 04 padrino

PADRINOModelos y DataMapper

Los modelos para tu sub-aplicación se definen enapp/models/

Y si lo necesitas para todas tus sub-aplicacionesmodels/

Los modelos representan: • Una o varias tablas en una o más bases de datos

en uno o distintos motores de bases de datos • Servicios web • Datos estáticos

Page 21: 2014 04 padrino

PADRINOModelos y DataMapper

Definir modelo ¿en una línea?

$ padrino g model User name:String age:Integer!# apply orms/datamapper!# create models/user.rb!# create db/migrate/001_create_users.rb!

El generador crea: Modelo (models/user.rb) Migración (db/migrate/001_create_users.rb)

Page 22: 2014 04 padrino

PADRINOModelos y DataMapper

Modeloclass User! include DataMapper::Resource! # No incluye timestamps por defecto! include DataMapper::Timestamp !! ! property :id, Serial! property :name, String! property :age, Integer! ! # Utilizaremos created_at y updated_at! timestamps :at!!end!

Page 23: 2014 04 padrino

PADRINOModelos y DataMapper

Configurar conexión a bases de datos enconfig/database.rb

case Padrino.env! when :development then DataMapper.setup(:default, "mysql://root@localhost/proyecto_dev")! when :production then DataMapper.setup(:default, "mysql://root@localhost/proyecto_prod")! when :test then DataMapper.setup(:default, "mysql://root@localhost/proyecto_test")!end!

Permite configurar bases de datos según el entorno

Page 24: 2014 04 padrino

PADRINOModelos y DataMapper

2 Opciones:

$ rake dm:auto:migrate

Generar tablas según modelos

Destruye existentes, crea tablas y relaciones

$ rake dm:auto:upgrade

Crea o actualiza tablas (no crea relaciones ni elimina columnas)

$ rake dm:migrate

Generar tablas a partir de las migraciones

Page 25: 2014 04 padrino

PADRINOModelos y DataMapper

Obtener todos@user = User.all!

Consultas varias al modelo# Obtener según ID!User.get 1 !# El primero según una condición!User.first name: 'Andrés'!# Los que cumplan las condiciones!# gt = Mayor que !# gte = Mayor o igual a!# lt = Menor que!# lte = Menor o igual a!User.all :age.gt => 10, :age.lte => 20!# Likes y orden?!# asc = Ascendente!# desc = Descendente!User.all :name.like => '%nd%', order: :name.asc!

Page 26: 2014 04 padrino

PADRINO

Como se aplica al proyecto

Page 27: 2014 04 padrino

PADRINOPresentación:

http://google.cl

Código proyecto:https://github.com/avillagran/padrino-codecamp

Andrés Villagrán@avillagran

http://github.com/avillagran