Programación de eventos recurrentes con Ice Cube Gem

Ice_cube es una biblioteca Ruby para encargarse eficazmente de eventos repetidos (horarios). La fuerza radica en la capacidad de indicar múltiples reglas y hacer que ice_cube dé sentido rápidamente a si el cronograma cae en una fecha específica (.occurs_on?) o en qué horas sucede (.occurrences, .first, .all_occurrences). Cómo obtener un cubo de hielo para instalar, use la siguiente sintaxis de instalación de gemas si desea obtener el código
clon de gema git://github.com/seejohnrun/ice_cube
Para crear un horario de Icecube
agenda = IceCube::Schedule.new si queremos especificar la fecha de inicio y la fecha de finalización, tenemos la opción de especificar en la programación mencionada anteriormente agenda = IceCube::Schedule.new(start = Time.now, :end_time => start + 600)
Horarios diarios Después de crear el cronograma, tenemos la opción de agregar una regla de recurrencia para el cronograma mencionado anteriormente. Considere "programar todos los días" en el horario mencionado anteriormente.
Schedule.add_recurrence_rule IceCube::Rule.daily
considere el mismo horario con repetición “n” número de días
Schedule.add_recurrence_rule IceCube::Rule.daily(repeat_every_n_days)
en lugar de repetir_cada_n_días, tiene la opción de especificar el número de días Horarios semanales Regla recurrente para generar programación semanal.
Schedule.add_recurrence_rule IceCube::Regla.semanal
regla recurrente para agregar repetir n número de semanas con el mismo horario
Schedule.add_recurrence_rule IceCube::Rule.weekly(repeat_every_n_weeks)
Considere un ejemplo: repita el horario solo los días laborables (de lunes a viernes)
Schedule.add_recurrence_rule IceCube::Regla.weekly.day(1, 2, 3, 4, 5)
Cada dos semanas los lunes y martes.
Schedule.add_recurrence_rule IceCube::Rule.weekly(2).day(:monday, :tuesday) o puedes mencionar como
Schedule.add_recurrence_rule IceCube::Rule.weekly(2).day(:lunes, :martes)
Horarios mensuales repetir el mismo horario todos los meses
Schedule.add_recurrence_rule IceCube::Rule.montly
Horarios mensuales (por día del mes) todos los meses el primer y último día del mes
agenda.add_recurrence_rule IceCube::Rule.monthly.day_of_month(1, -1)
cada dos meses el día 15 del mes
Schedule.add_recurrence_rule IceCube::Rule.monthly(2).día_del_mes(15)
Mensual (por día de la enésima semana) # cada mes el primer y último martes del mes
agenda.add_recurrence_rule IceCube::Rule.monthly.day_of_week(:martes => [1, -1])
# cada dos meses el primer lunes y el último martes
Schedule.add_recurrence_rule IceCube::Rule.monthly(2).day_of_week(:lunes => [1],:martes => [-1])
Anual (por día del año) # cada año en los días 100 desde el principio y el final del año
Schedule.add_recurrence_rule IceCube::Rule.yearly.day_of_year(100, -100)
# cada cuatro años en vísperas de año nuevo
agenda.add_recurrence_rule IceCube::Rule.yearly(4).día_del_año(-1)
Anual (por mes del año) # cada año el mismo día que start_time pero en enero y febrero
agenda.add_recurrence_rule IceCube::Rule.yearly.month_of_year(:enero, :febrero)
# cada tres años en marzo
agenda.add_recurrence_rule IceCube::Rule.yearly(3).mes_del_año(:marzo)
# para conveniencia programática (igual que arriba)
agenda.add_recurrence_rule IceCube::Rule.yearly(3).mes_del_año(3)
Por hora (por hora del día) # cada hora en el mismo minuto y segundo de la fecha de inicio
Schedule.add_recurrence_rule IceCube::Rule.hourly
# cada dos horas, los lunes
Schedule.add_recurrence_rule IceCube::Rule.hourly(2).day(:monday) Minutomente (cada N minutos)
# cada 10 minutos
agenda.add_recurrence_rule IceCube::Regla.minuto(10)
# cada hora y media, el último martes del mes
agenda.add_recurrence_rule IceCube::Regla.minuto(90).día_de_semana(:martes => [-1])
En segundo lugar (cada N segundos) # cada segundo
Schedule.add_recurrence_rule IceCube::Regla.segundo
# cada 15 segundos entre las 12:00 – 12:59
agenda.add_recurrence_rule IceCube::Regla.segundo(15).hora_del_día(12)
Con ice_cube, también puede especificar tiempos de excepción. Ejemplo Repetir todos los días excepto mañana
programación = IceCube::Schedule.new(ahora = Hora.ahora) programación.add_recurrence_rule(IceCube::Rule.daily) programación.add_exception_time(ahora + 1.día) enumera las ocurrencias hasta la hora de finalización ocurrencias = programación.ocurrencias(hora_final)
# o las primeras (n) apariciones
horario.primero(n)
# o las últimas (n) ocurrencias (si el cronograma termina)
horario.último(n)
Zonas horarias y ActiveSupport frente a clases horarias estándar de Ruby ice_cube funciona muy bien sin ActiveSupport pero solo admite la única zona horaria "local" del entorno (ENV['TZ']) o UTC. Para admitir correctamente varias zonas horarias (especialmente para el horario de verano), debe solicitar 'active_support/time'. Las apariciones de una programación se devolverán en la misma clase y zona horaria que la hora de inicio de la programación. Los horarios de inicio del cronograma se admiten como:
  • Time.local (predeterminado cuando no se especifica ninguna hora)
  • Hora.utc
  • ActiveSupport::TimeWithZone (con Time.zone.now, Time.zone.local, time.in_time_zone(tz))
  • DateTime (obsoleto) y Date se convierten a Time.local
Persistencia ice_cube implementa su propio .to_yaml basado en hash, por lo que puede serializar de forma rápida (y segura) objetos de programación dentro y fuera de su almacén de datos. También admite la serialización hacia/desde ICAL.
yaml = horario.to_yaml IceCube::Schedule.from_yaml(yaml) hash = horario.to_hash IceCube::Schedule.from_hash(hash) ical = horario.to_ical IceCube::Schedule.from_ical(ical)
usando tus palabras ice_cube puede proporcionar representaciones físicas o de cadena de reglas individuales o de todo el programa.
regla = IceCube::Rule.daily(2).día_de_semana(:martes => [1, -1], :miércoles => [2])
rule.to_ical # 'FREQ=DIARIO;INTERVAL=2;BYDAY=1TU,-1TU,2WE'
rule.to_s # 'Cada 2 días el último y el primer martes y el segundo miércoles'
Lea también: Una mirada detallada a las características y cambios de Rails 5 : Ruby on Rails vs CakePHP: la batalla continúa : Scraping de sitios web usando Mechanize Gem RielesCarma ha estado proporcionando Servicios de consultoría y desarrollo de Ruby on Rails. de los últimos 8 años Nuestros desarrolladores están bien versados en realizar todo tipo de trabajos de desarrollo de Ruby on Rails y en el manejo de cualquier tipo de proyecto. Contáctenos para saber más sobre nuestras habilidades de desarrollo y los proyectos que podemos manejar.
Katneni Naga Sai Tejaswi
Desarrollador de software sénior

Suscríbete para recibir las últimas actualizaciones

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESSpanish