CREA TU PRIMERA
APLICACIÓN WEB
CON VOLT!!
/José Añasco @merongivian
DESARROLLO BACK END
SOLUCIÓN: RAILS
POR QUE?
Convenciones sobre configuraciones
Desarrollo interactivo
Scaffolding
Active Record
MVC
DESARROLLO FRONT END
SOLUCIÓN: ...
etc...
Volt taller
POR QUE?
Single Page Applications
PROBLEMA: (FRONT-END +
BACK-END)
Duplicación de lógica
Distintos Lenguajes
Complejidad
SOLUCIÓN:
Único lenguaje: necesariamente javascript
Único framework
?
CONOCE A VOLT
VOLT
Ruby web framework (servidor y cliente)
Compila ruby a javascript (Opal)
Actualización de datos en DOM (programación reactiva)
CONCEPTOS VOLT
MVC VS MVVM
MVC VS MVVM
COLECCIONES
store, page, params,
Operaciones en DB
Variables underscore
...
# Rails
rails > User.new name: "juan"
# Volt
volt > store.users.create name: "jose"
volt > juan = store.users.create(name: "juan", estado_civil: "soltero").value
volt > juan._estado_civil
= > "soltero"
Manejo de Éxito/Error con promises
volt > juan = store.users.first
=> Promise..
volt > juan.value
=> User...
store.users.where(name: 'juan').first.then do
# exito
end.fail do
# fallo
end
BINDINGS
Binding Each
Bindings de Atributos
Bindings de Eventos
{{ _items.each do |item| }}
<p>{{ item }}</p>
{{ end }}
<input type="text" value="{{ _name }}">
<button e-click="alert">Alert Me</button>
WORKSHOP
Vamos a crear un Chat
...Pero primero copiemos el repositorio
Volt taller
LEVANTAR APLICACIÓN
Comandos consola
Instalar gemas
$ bundle install
Crear usuario en consola
$ bundle exec volt console
volt > jose = { name: "jose", email: "jose@mail.com", password: "password" }
=> {:name=>"jose", :email=>"jose@mail.com", :password=>"password"}
volt > store.users << jose
=> Promise ...
volt > store.users.all
Correr Aplicación e ingresar al url localhost:3000
$ bundle exec volt server
....Si la app tarda en arrancar usar flag NO_FORKING
$ NO_FORKING=true bundle exec volt server
Volt incluye autenticación y boostrap por defecto
yDocumentación usuarios componentes
CHAT
FEATURES:
Mensajes entre múltiples usuarios
Validar longitud mínima de mensajes
Múltiples Chats
FEATURE 0: MENSAJES
MODELO MESSAGE
Crear modelo con generador
$ bundle exec volt generate model message
Añadir campo body y atar mensajes a usuarios por medio de
permisos
class Message < Volt::Model
own_by_user
field :body, String
end
VISTA CHAT
Crear ruta en archivo route.rb
client '/chat', action: 'chat'
Crear vista chat.html dentro la carpeta main de vistas (cargados
por medio de )tags
<:Title>
Chat
<:Body>
<h1>Chat</h1>
Añadir link en main.html
<:Body>
<div class="container">
<div class="header">
<ul class="nav nav-pills pull-right">
.
<:nav href="/chat">Chat<!--:nav-->
</ul>
</div>
</div>
Añadir acción chat en controlador main
module Main
class MainController < Volt::ModelController
..
def chat
# codigo
end
..
end
end
Link para página nueva activada en menú de navegador
FORMULARIO DE MENSAJES
Crear formulario con en chat.htmlbindings de eventos
<:Body>
...
<form e-submit="send_message">
<label>Message</label>
<input type="text" class="form-control" value="{{ page._message_body }}">
</form>
A continuación mostrar todos los mensajes guardados con sus
respectivos usuarios
<:Body>
form...
.
.
{{ store.messages.reverse.each do |message| }}
<div>
<strong>{{ message.user.name }} :</strong>
<span>{{ message.body }}</span>
</div>
{{ end }}
MÉTODOS DE CONTROLADOR
Implementar reset_message y usarlo al ejecutar la acción chat
module Main
class MainController < Volt::ModelController
.
def chat
reset_message
end
private
def reset_message
page._message_body = ''
end
.
end
end
A continuación implementar send_message
def send_message
store.messages.create(body: page._message_body)
reset_message
end
PERMISO DE ACCESO
Anadir para permitir acceso al chat solo a usuarios
logeados
before_action
module Main
class MainController < Volt::ModelController
before_action :require_login, only: :chat
.
.
CHECKPOINT 0
mensajes se actualizan automáticamente
Mensajes entre múltiples Usuarios
MESSAGE TAG
Crear tag message con el código que contiene el nombre del
usuario y el mensaje
<:Body>
...
<:Message>
<div>
<strong>{{ attrs.user }} :</strong>
<span>{{ attrs.message }}</span>
</div>
Usar tag en el bloque each
<:Body>
...
{{ current_chat.messages.reverse.each do |message| }}
<:message user="{{ message.user.name }}" message="{{ message.body }}" />
{{ end }}
<:Message>
...
Correr tests
FEATURE 1: VALIDAR MENSAJES
CAPTURA DE ERRORES
Añadir validación de longitud para el campo body
class Message < Volt::Model
.
.
validate :body, length: 2
end
Crear bloques de éxito y fallo al momento de crear el mensaje
private
def send_message
current_chat.messages.create(body: page._message_body)
.then { reset_message }
.fail do |errors|
# manejo de error
end
end
MENSAJES DE ERROR
Enviar todos los errores a la colección flash
private
def send_message
current_chat...
...
.fail do |errors|
errors.each { |k, v| flash._errors << "#{k}: #{v}" }
end
end
CHECKPOINT 1
errores por medio de notificaciones bootstrap
FEATURE 2: MÚLTIPLES CHATS
MODELO CHAT CON MÚLTIPLES MENSAJES
Crear modelo chat
$ bundle exec volt generate model chat
Relacionar con message
class Chat < Volt::Model
has_many :messages
end
Relacionar modelo message con chat
class Message < Volt::Model
...
belongs_to :chat
...
field :chat_id
...
end
LISTA DE CHATS
Listar chats con links que guarden el indice actual en params
<:Body>
{{ store.chats.each_with_index do |chat, index| }}
<div>
{{ chat._name }} |
<a e-click="params._index = index">Join chat</a>
</div>
{{ end }}
Cambiar store por el chat a escoger: current_chat
{{ current_chat.messages.reverse.each do |message| }}
<:message user="{{ message.user.name }}" message="{{ message.body }}" />
{{ end }}
CURRENT CHAT
Escoger el chat por medio de params._index
module Main
class MainController < Volt::ModelController
...
private
...
def current_chat
current_index = (params._index || 0).to_i
store.chats[current_index]
end
Guardar el mensaje en el chat escogido
...
private
...
def send_message
current_chat.messages.create(body: page._message_body)
...
...
Crear nuevos chats en consola
volt > store.chats.create(name: 'funny chat')
... store.chats.create(name: 'cool chat')
mensajes filtrados por chat
LINKS PARA CHATS
Remover links de chat.html
Crear links con en indexurl_with
<:Title>
Home
<:Body>
<h1>Home</h1>
{{ store.chats.each_with_index do |chat, index| }}
<div class="chat-link">
{{ chat._name }} |
<a href="{{ url_with(action: 'chat', index: index) }}">Join chat</a>
</div>
{{ end }}
CHECKPOINT 2
QUE FALTA?
Soporte para bases de datos SQL
has_many through & polymorphic queries
GRACIAS :)

Más contenido relacionado

PPTX
Building Ria Applications With Silverlight 2
PPTX
Javascript para principiantes -Introducción
PPTX
Lenguaje JavaScript parte 1
PDF
Manual Tutorial Javascript Con Ejemplos
PDF
Creando un servicio SOAP en Java con NetBeans
PPTX
expo
PPTX
Charla ie
Building Ria Applications With Silverlight 2
Javascript para principiantes -Introducción
Lenguaje JavaScript parte 1
Manual Tutorial Javascript Con Ejemplos
Creando un servicio SOAP en Java con NetBeans
expo
Charla ie

La actualidad más candente (18)

PDF
Javascript en proyectos reales: jQuery
PPTX
Dreamweaver
PPT
Javascript
PPTX
Dreamweaver presentación
PPTX
EXPOSICION DREAMWEAVER
PDF
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - Día 5 - Testing auto...
PDF
HTML 5 Paso A Paso
PPTX
Diseño web
DOCX
Guia html2
PPT
PPTX
Ventana dreamweaver
PDF
Generación de web sites dinámicos usando php
PDF
Introducción al desarrollo web moderno
PDF
18 19 aplicaciones web modernas con javascript
PDF
Aplicaciones Web Modernas con Javascript
PDF
Programación del lado del cliente
PDF
Introducción a ASP.NET MVC
PPT
Diseño de páginas web
Javascript en proyectos reales: jQuery
Dreamweaver
Javascript
Dreamweaver presentación
EXPOSICION DREAMWEAVER
Curso UX Tenerife (No maltrates a tus usuarios) FG ULL - Día 5 - Testing auto...
HTML 5 Paso A Paso
Diseño web
Guia html2
Ventana dreamweaver
Generación de web sites dinámicos usando php
Introducción al desarrollo web moderno
18 19 aplicaciones web modernas con javascript
Aplicaciones Web Modernas con Javascript
Programación del lado del cliente
Introducción a ASP.NET MVC
Diseño de páginas web
Publicidad

Similar a Volt taller (20)

PPT
Proyecto de Topicos II - HTML5
PDF
Primeros pasos con Backbone js, por Xavier Aznar
PDF
UDA-Guia desarrollo web services
DOCX
Servicio web
PPT
Intro a ASP.NET
PDF
Dce2 introduccion asp.net primeras 20
PDF
Splat - Programador PHP
PPTX
Charla
PDF
Primeros pasos Symfony PHPVigo
PPT
presenjava.ppt
PPTX
ASP.NET MVC Workshop Día 3
PPT
Desarrollo de aplicaciones .NET
DOCX
Guía Practica conexión BD 2021
PPTX
Tema servlets
PPTX
Tema servlets
PPTX
Tema servlets
PPTX
Tema servlets
PPT
Arquitectura java web
PPT
Presentación Seminario Cleformación HTML5, El lenguaje del futuro
Proyecto de Topicos II - HTML5
Primeros pasos con Backbone js, por Xavier Aznar
UDA-Guia desarrollo web services
Servicio web
Intro a ASP.NET
Dce2 introduccion asp.net primeras 20
Splat - Programador PHP
Charla
Primeros pasos Symfony PHPVigo
presenjava.ppt
ASP.NET MVC Workshop Día 3
Desarrollo de aplicaciones .NET
Guía Practica conexión BD 2021
Tema servlets
Tema servlets
Tema servlets
Tema servlets
Arquitectura java web
Presentación Seminario Cleformación HTML5, El lenguaje del futuro
Publicidad

Último (20)

PPTX
PPT SESIÓN 6 Los Injertos.- Micropropagación e Injertos Clonales.pptx
PDF
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
PPTX
PROCESOS DE REGULACION DE CRECIMIENTO.pptx
PDF
2. FICHA EMERGTENCIA VIAL PUCABAMBA - PAN DE AZUCAR.pdf
PPTX
EQUIPOS DE PROTECCION PERSONAL - LEY LABORAL.pptx
PDF
Clase 2 de abril Educacion adistancia.pdf
PDF
BROCHURE SERVICIOS CONSULTORIA ISOTEMPO 2025
PDF
SESION 10 SEGURIDAD EN TRABAJOS CON ELECTRICIDAD.pdf
PPTX
TRABAJOS DE ALTO RIESGO IZAJE Y CALIENTE.pptx
PPTX
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
PDF
METODOLOGÍA DE INVESTIGACION ACCIDENTES DEL TRABAJO.pdf
PDF
experto-gestion-calidad-seguridad-procesos-quimicos-industriales-gu.pdf
PDF
EVALUACIÓN 1_REFERENCIAPIR_FASE 1_2024.pdf
PDF
Presentación Ejecutiva Minimalista Azul.pdf
PPTX
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
PDF
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
PPTX
CNE-Tx-ZyD_Comite_2020-12-02-Consolidado-Version-Final.pptx
PPT
flujo de caja paa la evaluacion de proyectos
PDF
Presentacion_Resolver_CEM_Hospitales_v2.pdf
PDF
UD3 -Producción, distribución del aire MA.pdf
PPT SESIÓN 6 Los Injertos.- Micropropagación e Injertos Clonales.pptx
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
PROCESOS DE REGULACION DE CRECIMIENTO.pptx
2. FICHA EMERGTENCIA VIAL PUCABAMBA - PAN DE AZUCAR.pdf
EQUIPOS DE PROTECCION PERSONAL - LEY LABORAL.pptx
Clase 2 de abril Educacion adistancia.pdf
BROCHURE SERVICIOS CONSULTORIA ISOTEMPO 2025
SESION 10 SEGURIDAD EN TRABAJOS CON ELECTRICIDAD.pdf
TRABAJOS DE ALTO RIESGO IZAJE Y CALIENTE.pptx
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
METODOLOGÍA DE INVESTIGACION ACCIDENTES DEL TRABAJO.pdf
experto-gestion-calidad-seguridad-procesos-quimicos-industriales-gu.pdf
EVALUACIÓN 1_REFERENCIAPIR_FASE 1_2024.pdf
Presentación Ejecutiva Minimalista Azul.pdf
Riesgo eléctrico 5 REGLAS DE ORO PARA TRABAJOS CON TENSION
SESION 9 seguridad IZAJE DE CARGAS.pdf ingenieria
CNE-Tx-ZyD_Comite_2020-12-02-Consolidado-Version-Final.pptx
flujo de caja paa la evaluacion de proyectos
Presentacion_Resolver_CEM_Hospitales_v2.pdf
UD3 -Producción, distribución del aire MA.pdf

Volt taller