RUBY
Introducción al lenguaje
Integrantes
Matías Chiappe

¿Qué es RUBY?
Ruby es un lenguaje de programación interpretado y de tipado dinámico que se enfoca en la simplicidad y la productividad.
Fácil de leer y escribir: Ruby tiene una sintaxis clara y concisa que se asemeja al lenguaje natural, lo que facilita su comprensión.
Orientado a objetos: Todo en Ruby es un objeto, lo que significa que tiene propiedades y métodos.
Dinámico: Ruby es un lenguaje dinámico en el que las variables no tienen un tipo fijo y los métodos pueden ser añadidos o modificados en tiempo de ejecución.
Fuerte comunidad: Ruby cuenta con una comunidad activa y solidaria, lo que resulta en una gran cantidad de recursos y bibliotecas disponibles.

¿Qué es RUBY?
Sintaxis básica de Ruby
# Hola Mundo en Ruby
puts "Hola Mundo"
# Definición de una clase
class Persona
attr_accessor :nombre, :edad # Definición de atributos con getter y setter
def initialize(nombre, edad) # Constructor
@nombre = nombre
@edad = edad
end
def saludar
puts "Hola, soy #{@nombre} y tengo #{@edad} años."
end
end
# Creación de un objeto y llamada a un método
persona = Persona.new("Juan", 30)
persona.saludar

Conceptos básicos
Variables: En Ruby, las variables no necesitan ser declaradas con un tipo específico. Puedes asignar valores a variables directamente.
x = 10
nombre = "Juan"
Tipos de datos: Ruby tiene varios tipos de datos, como enteros, flotantes, cadenas, arreglos y hash.
entero = 10
flotante = 3.14
cadena = "Hola, mundo"
arreglo = [1, 2, 3, 4, 5]
hash = { "clave" => "valor" }

Conceptos básicos
Operadores: Ruby admite operadores aritméticos estándar (+, -, *, /) y operadores de comparación (==, !=, <, >, <=, >=).
Condicionales: Puedes usar estructuras de control como if, elsif y else para tomar decisiones en tu código.
edad = 20
if edad >= 18
puts "Eres mayor de edad"
else
puts "Eres menor de edad"
end

Conceptos básicos
Bucles: Ruby tiene bucles while y for, pero es más común usar iteradores sobre arreglos y otros objetos.
arreglo = [1, 2, 3, 4, 5]
arreglo.each do |elemento|
puts elemento
end
Métodos: De esta forma puedes definir tus propias funciones o métodos en Ruby.
def saludar(nombre)
puts "Hola, #{nombre}!"
end
saludar("Juan")

Conceptos básicos
Clases y objetos: Ruby es un lenguaje orientado a objetos. Puedes definir clases y crear instancias de esas clases.
class Persona
def initialize(nombre)
@nombre = nombre
end
def saludar
puts "Hola, soy #{@nombre}"
end
end
persona = Persona.new("Juan")
persona.saludar

¿Para que se utiliza?
Ruby es un lenguaje de programación utilizado principalmente en:
Desarrollo web: Ruby se usa principalmente a través de Ruby on Rails para construir una amplia gama de aplicaciones web.
Automatización y scripting: Ruby es popular para escribir scripts y herramientas de automatización debido a su sintaxis clara.
Desarrollo de aplicaciones: Se utiliza en el desarrollo de diversas aplicaciones, incluyendo aplicaciones de escritorio, móviles y juegos.
Prototipado rápido: Ruby es elegido para prototipar rápidamente ideas y proyectos, especialmente en startups y entornos ágiles.

¿Para que se utiliza?
Let's code!
Vamos a crear un controlador llamado TareasController con el método agregar para insertar elementos a una lista de tareas y un método mostrar_lista para mostrar la lista completa de tareas.
Luego agregamos una condición en el método mostrar_lista para verificar si la lista de tareas está vacía y mostrar un mensaje apropiado en ese caso.

RUBY On Rails
RUBY on Rails
Rails es un frameword full-stack. Se entrega con todas las herramientas necesarias para crear aplicaciones web tanto en el front-end como en el back-end.
Representar plantillas HTML, actualizar bases de datos, enviar y recibir correos electrónicos, mantener páginas activas a través de WebSockets, poner en cola trabajos para trabajos asincrónicos, almacenar cargas en la nube y proporcionar protecciones de seguridad sólidas para ataques comunes.

Ruby on Rails (RoR o simplemente Rails) es un framework de desarrollo web escrito en Ruby.

RUBY on Rails
Convención
Rails sigue el patrón de arquitectura MVC (Modelo-Vista-Controlador), que separa la lógica de la aplicación en tres componentes principales: el modelo, que representa los datos y la lógica de negocios; la vista, que se encarga de la presentación de los datos al usuario; y el controlador, que maneja las solicitudes del usuario y coordina la interacción entre el modelo y la vista.
Generadores de código
Proporciona herramientas automatizadas para crear archivos y estructuras de directorios, acelerando el proceso de desarrollo y manteniendo la consistencia en el proyecto.

RUBY on Rails
Active Record
Ofrece una interfaz sencilla para interactuar con la base de datos, utilizando el patrón de diseño ORM para mapear objetos de la aplicación a filas de la base de datos.
Scaffolding
Permite generar automáticamente código básico para operaciones CRUD (crear, leer, actualizar, eliminar) en un modelo, facilitando la creación rápida de prototipos de aplicaciones.
Seguridad
Rails incluye características integradas para proteger las aplicaciones contra vulnerabilidades comunes, como inyecciones SQL y ataques CSRF y XSS.

RUBY on Rails
Vamos a hacer un ejemplo de una aplicación Rails simple para una lista de tareas.
Este ejemplo cubrirá la creación de una aplicación básica con características CRUD (Create, Read, Upadate, Delete).
Para que Rails muestre un contenido, debe crear como mínimo una ruta, un controlador con una acción y una vista.

RUBY on Rails

Arquitectura de Rails

RUBY on Rails
Arquitectura de Rails
El propósito de un controlador es recibir las peticiones (requests) de la aplicación. Las rutas (routing) deciden qué controlador recibe qué petición.
A menudo, hay más de una ruta para cada controlador, y diferentes rutas pueden ser manejadas por diferentes acciones (actions). El propósito de cada acción es obtener información para pasarla después a la vista.
El propósito de una vista es mostrar la información en un formato legible para las personas. El controlador es donde la información es recolectada. La vista sólo debería mostrar la información.

RUBY on Rails
Modelo
Un modelo es una clase de Ruby que se utiliza para representar datos. Además, los modelos pueden interactuar con la base de datos de la aplicación a través de una característica de Rails llamada Active Record .
Para este ejemplo, nuestro modelo agrega las validaciones necesarias para los atributos nombre y descripción.

RUBY on Rails
Estructura del proyecto
Vamos a suponer la estructura del proyecto y archivos están creados:


RUBY on Rails
Agregar validaciones al modelo:
El modelo task.rb agrega las validaciones necesarias para los atributos nombre y descripción.
#app/models/task.rb class Task < ApplicationRecord validates: name, presence: true, length: { minimum: 3, maximum: 100 } end
ApplicationRecord es una clase base en Ruby on Rails que conecta modelos a la base de datos y proporciona funcionalidades compartidas, como validaciones y asociaciones.
Esta validación asegura que cada tarea tenga un nombre antes de guardarla en la base de datos que tenga al menos 3 caracteres y no más de 100 caracteres.

RUBY on Rails
Implementar la lógica del controlador:
Parte 1
#app/controllers/tasks_controller.rb
class TasksController < ApplicationController def index @tasks = Task.all end def create @task = Task.new(task_params) if @task.save redirect_to tasks_path, notice: 'Tarea agregada exitosamente.' else redirect_to edit_task_path(@task) end ...
Aquí hemos definido dos acciones: index para mostrar la lista de tareas y create para agregar una nueva tarea.

RUBY on Rails
Implementar la lógica del controlador:
def index
@tasks = Task.all
end
Este método se utiliza para mostrar todas las tareas en la vista de índice index.html.erb.
Consulta todas las tareas de la base de datos y las asigna a la variable de instancia @tasks, que estará disponible en la vista.

RUBY on Rails
Implementar la lógica del controlador:
También hemos definido un método privado task_params para permitir solo los parámetros necesarios para crear una tarea (en este caso, solo el nombre de la tarea).
#app/controllers/tasks_controller.rb class TasksController < ApplicationController ... private def task_params params.require(: task).permit(: name) end ...
Parte 2

RUBY on Rails
Implementar la lógica del controlador:
def new
@tasks = Task.new
end
Podríamos implementar el método new para mostrar el formulario de creación de una nueva tarea en la vista new.html.erb.
Crea una nueva instancia de Task y la asigna a la variable de instancia @tasks.

RUBY on Rails
Implementar la lógica del controlador:
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path, notice: 'Tarea agregada exitosamente.'
else
redirect_to edit_task_path(@task) end end
Este método se utiliza para procesar la creación de una nueva tarea. Crea una nueva instancia de Task utilizando los parámetros proporcionados a través de task_params.

RUBY on Rails
Implementar la lógica del controlador:
... if @task.save redirect_to tasks_path, notice: 'Tarea agregada exitosamente.' else redirect_to edit_task_path(@task) end ...
Si la tarea se guarda exitosamente en la base de datos, redirige al usuario a la página de detalles de esa tarea (show).
Si la tarea no se guarda correctamente, redirige el formulario de edición de la tarea.

RUBY on Rails
Parte 3
... def destroy @task = Task.find(params[:id]) @task.destroy redirect_to tasks_path, notice: 'Tarea eliminada exitosamente.' end def task_params params.require(:tarea).permit(:nombre, :descripcion, :completada) end end
Implementar la lógica del controlador:
Definimos dos acciones: destroy para eliminar una tarea de la la lista y task_params para filtrar las tareas por URL.

RUBY on Rails
Implementar la lógica del controlador:
...
def destroy
@task = Task.find(params[:id])
@task.destroy
redirect_to tasks_path, notice: 'Tarea eliminada exitosamente.'
end
...
Este método se encarga de eliminar una tarea específica de la base de datos.
Utilizando el parámetro :id proporcionado en la URL, Task.find busca la tarea correspondiente en la base de datos. params[:id] contiene el identificador único de la tarea que se va a eliminar.

RUBY on Rails
Implementar la lógica del controlador:
... def task_params params.require(:task).permit(:name) end end
El método task_params filtra y permite únicamente los parámetros específicos recibidos a través de una solicitud para crear o actualizar una tarea, protegiendo contra asignaciones masivas no autorizadas y garantizando que solo los atributos deseados se asignen al modelo.

RUBY on Rails
Implementar las rutas
#config/routes.rb Rails.application.routes.draw do resources :tasks, only: [:index, :create] root 'tasks#index' end
Esto establece las rutas para las acciones index y create del controlador Tasks y también configura la página de inicio para que muestre la lista de tareas.

RUBY on Rails
Implementar la vista:
# app/views/tasks/index.html.erb <h1>Lista de tareas</h1> <% if flash[:notice] %> <div class="notice"><%= flash[:notice] %></div> <% end %> <% if flash[:alert] %> <div class="alert"><%= flash[:alert] %></div> <% end %> ...
Este bloque de código en la vista index.html.erb es responsable de mostrar mensajes de notificación y mensajes de alerta que pueden ser configurados en el controlador y luego pasados a la vista a través del objeto flash.
Parte 1

RUBY on Rails
Implementar la vista:
Aquí se verifica si hay un mensaje de notificación y alerta almacenado en el objeto flash. El objeto flash en Rails se utiliza para pasar mensajes entre acciones y vistas. Si hay un mensaje de notificación presente, el código dentro de este bloque se ejecutará.
<% if flash[:notice] %> <div class="notice"><%= flash[:notice] %></div> <% end %> <% if flash[:alert] %> <div class="alert"><%= flash[:alert] %></div> <% end %>
Si hay un mensaje, el bloque de código genera un elemento <div> con una clase CSS alert/notice y muestra el mensaje correspondiente dentro de estos elementos.

RUBY on Rails
Implementar la vista:
# app/views/tasks/index.html.erb
...
<%= form_with(model: Task.new, url: tasks_path, local: true) do |form| %>
<%= form.text_field :name, placeholder: 'Agregar nueva tarea...' %>
<%= form.submit 'Agregar tarea' %>
<% end %>
...Este bloque de código en la vista index.html.erb crea un formulario para agregar una nueva tarea.
Parte 2

RUBY on Rails
Implementar la vista:
<%= form_with(model: Task.new, url: tasks_path, local: true) do |form| %>
Este código genera un formulario HTML utilizando el método form_with de Rails.
El argumento model: Task.new indica que el modelo asociado al formulario es una nueva instancia de la clase Task, lo que significa que este formulario se utilizará para crear una nueva tarea.
El argumento url: tasks_path especifica la URL a la que se enviará el formulario cuando se envíe. En este caso, tasks_path es la ruta que lleva a la acción create del controlador Tasks, donde se manejará la creación de la nueva tarea.
El argumento local: true indica que el formulario se enviará de forma local, lo que significa que no se enviará a través de AJAX

RUBY on Rails
Implementar la vista:
# app/views/tasks/index.html.erb ... <% if @tasks.any? %> <ul> <% @tasks.each do |task| %> <li><%= task.name %></li> <% end %> </ul> <% else %> <p>No hay tareas por hacer.</p> <% end %>
Aquí, estamos iterando sobre cada tarea en la colección @tasks. Para cada tarea, estamos abriendo un contenedor div y mostrando el nombre de la tarea utilizando <%= task.name %>. Esto mostrará el nombre de cada tarea en la lista.
Parte 3

Conclusiones

Después de explorar el código de la aplicación de lista de tareas en Ruby on Rails y entender cómo funciona cada parte, aquí hay algunas conclusiones que se pueden hacer:
Ruby on Rails ofrece una estructura sólida y convenciones claras que agilizan el desarrollo web. Con el patrón MVC, promueve la organización y la reutilización del código.
Rails prioriza la seguridad y las buenas prácticas, integrando características como la protección contra asignaciones masivas y la validación de parámetros. Esto lo convierte en una opción popular para desarrolladores que buscan eficiencia y seguridad en el desarrollo de aplicaciones web.
¿QUÉ OPINAN?
Patrocinado por

¡GRACIAS!


SPRINT 151
By ma7payne
SPRINT 151
MISC
- 9