2014 04 padrino
-
Upload
andres-placencia -
Category
Documents
-
view
153 -
download
0
Transcript of 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
RUBYIntro rápida
RUBYEscribiendo código
$ irb 1.9.3-p448 :001 > p “Hola mundo”
Directamente en el interprete
$ ruby nombre_archivo.rbUtilizando archivos
RUBYVariables
variable_local = "valor"!@variable_global = 1!CONSTANTE = 2!!!@variable_global = "reutilizando"!
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
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}]
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
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
PADRINOCapisci?
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
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
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)
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
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
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
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’
PADRINOPrimeros pasos
app/views/layouts/application.hamlCrear y editar layout
¿HTML? Nah… más simple y fácil de mantener HAML
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
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
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)
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!
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
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
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!
PADRINO
Como se aplica al proyecto
PADRINOPresentación:
http://google.cl
Código proyecto:https://github.com/avillagran/padrino-codecamp
Andrés Villagrán@avillagran
http://github.com/avillagran