- 1

Curso Intermedio de Ruby on Rails: Migración y Optimización Avanzada
01:37 - 2

Migración de Rails a MongoDB con Mongoid y Pruebas Automatizadas
03:38 - 3

Gestión de Múltiples Versiones de MongoDB en Linux
13:21 - 4

Migración de Rails a MongoDB con Mongoid: Configuración Inicial
10:17 - 5

Migración de Modelos de Active Record a Mongoid
08:35 - 6

Migración completa de aplicaciones con MongoDB y Rails
15:55
Creación de Máquinas de Estados con AASM en Ruby on Rails
Clase 29 de 34 • Curso Intermedio de Ruby on Rails
Contenido del curso
- 7

Pruebas Automatizadas: Introducción a TDD y BDD en Desarrollo de Software
10:11 - 8
Creación de Fábricas Automatizadas con FactoryBot y Faker en Rails
04:18 - 9

Integración de Librerías para Pruebas Automatizadas en Rails
13:24 - 10

Pruebas de Modelos en Rails con Mongoid y RSpec
13:41 - 11

Pruebas de Validación y Guardado en Modelos Rails
11:39 - 12

Validación y Pruebas de Modelos en Ruby on Rails
07:48 - 13

Pruebas de Integración en Rails: Configuración y Ejecución Básica
10:54 - 14

Creación y prueba de tareas con métodos POST en Rails
12:39 - 15

Automatización de Pruebas con Headless Browser y Capybara en Rails
05:03 - 16

Pruebas de Sistema con KPIBara y WebDriver en Rails
13:35 - 17

Automatización de Pruebas de Sistema con Selenium y JavaScript
15:24
- 22

Envío de Emails Automático al Crear Tareas
04:43 - 23

Introducción a Service Objects en Ruby on Rails
09:00 - 24

Pruebas de TDD para Service Object de Notificaciones por Correo
12:18 - 25

Creación de Service Objects para Envío de Correos en Ruby on Rails
13:04 - 26

Procesos en Background con Sucker Punch en Rails
12:51 - 27

Pruebas con Doubles en Rails usando Sucker Punch
12:10
- 28

Máquinas de Estado Finito: Conceptos y Aplicaciones Prácticas
07:32 - 29

Creación de Máquinas de Estados con AASM en Ruby on Rails
13:37 - 30

Creación de Service Object para Gestión de Estados de Tareas en Rails
08:37 - 31

Acciones de Controlador y Pruebas en Ruby on Rails
10:43 - 32

Integración de AJAX en Gestión de Estados de Tareas en Ruby on Rails
13:07
¿Qué es una máquina de estados y cómo se construye?
Construir una máquina de estados en el desarrollo de software puede ser un desafío, pero con las herramientas adecuadas, se vuelve una tarea ordenada y eficiente. La implementación de una máquina de estados permite modelar la lógica de un sistema según los estados posibles y las transiciones entre ellos. En este caso, utilizamos la gema AASM para crear una máquina de estados en el modelo Task.
¿Cómo se instala la gema AASM?
Primero, instala la gema AASM agregándola a tu archivo Gemfile:
gem 'aasm'
Luego, en la consola de comandos, ejecuta:
bundle install
Para utilizar las funcionalidades básicas de AASM, asegúrate de incluir el módulo en tu modelo:
include AASM
¿Cómo se definen los estados y transiciones?
Dentro del modelo Task, se debe definir los estados y eventos de transición. A continuación, te muestro un ejemplo básico de cómo se configura:
aasm do
state :pending, initial: true
state :inprocess
state :finish
event :start do
transitions from: :pending, to: :inprocess
end
event :finish do
transitions from: :inprocess, to: :finish
end
end
Estos bloques de código establecen que una tarea puede estar en estado pending, luego en inprocess y, finalmente, en finish.
¿Cómo vinculamos los estados a un campo específico?
AASM por defecto utiliza su propio método para manejar estados, pero puedes indicarle que use un campo específico, en este caso, estatus:
aasm column: 'estatus' do
# definición de estados y eventos
end
Esto asegura que los estados se almacenen en el campo 'estatus' de tu modelo Task.
Auditoría de transiciones en la máquina de estados
Agregar capacidades de auditoría te permite registrar cada cambio de estado. Esto es fundamental para rastrear el ciclo de vida de las tareas y entender cómo evolucionan.
¿Cómo se implementan los callbacks?
AASM ofrece callbacks útiles que puedes aprovechar. El método after_all_transitions permite ejecutar código después de cada transición:
after_all_transitions :audit_status_change
def audit_status_change
# lógica de auditoría
end
Aquí, audit_status_change es un método que puedes definir para registrar cambios de estado.
¿Cómo se almacena la auditoría?
Para ello, debes crear un campo transitions en tu modelo Task, que sea un array:
field :transitions, type: Array, default: []
Cada vez que ocurra una transición, se registrará un nuevo objeto que almacene el estado anterior, el nuevo estado y el evento que provocó el cambio. Aquí tienes un ejemplo de cómo se podría implementar:
def audit_status_change
set(:transitions, transitions.push({
from: aasm.from_state,
to: aasm.to_state,
event: aasm.current_event,
timestamp: Time.zone.now
}))
end
¿Cómo se prueba el funcionamiento?
Para probar la funcionalidad de la máquina de estados y los registros de auditoría:
-
Abre la consola de Rails con
rails consoleo usando el aliasr c. -
Crea una instancia de
Tasky verifica su estado inicial:task = Task.first puts task.status # debería mostrar 'pending' -
Cambia los estados invocando eventos:
task.start! puts task.status # debería mostrar 'inprocess' task.finish! puts task.status # debería mostrar 'finish' -
Revisa las transiciones auditadas:
puts task.transitions.inspect
Animamos a los estudiantes a explorar y experimentar creando máquinas de estados en sus proyectos, ya que brindan un control mejorado y estructurado sobre los flujos de trabajo. Con práctica, no solo mejorarás tus habilidades de modelado, sino que también podrás entender mejor la evolución de los proyectos en los que trabajas. ¡Adelante y sigue aprendiendo!