Planification d'événements récurrents avec Ice Cube Gem

Ice_cube est une bibliothèque Ruby permettant de gérer efficacement les événements répétés (horaires). La force réside dans la capacité d'indiquer plusieurs règles et de permettre à ice_cube de déterminer rapidement si le calendrier tombe à une date spécifique (.occurs_on ?), ou à quelle heure il se produit (.occurrences, .first, .all_occurrences). Comment obtenir un glaçon Pour l'installation, utilisez la syntaxe ci-dessous gem install si vous souhaitez obtenir le code
clone de gemme git://github.com/seejohnrun/ice_cube
Pour créer un programme de glaçons
planning = IceCube::Schedule.new si nous voulons spécifier la date de début et la date de fin, nous avons la possibilité de spécifier dans le calendrier mentionné ci-dessus. planning = IceCube::Schedule.new(start = Time.now, :end_time => start + 600)
Horaires quotidiens Après avoir créé le calendrier, nous avons la possibilité d'ajouter une règle de récurrence pour le calendrier mentionné ci-dessus, en considérant « planifier tous les jours » à l'heure mentionnée ci-dessus.
planning.add_recurrence_rule IceCube :: Rule.daily
considérons le même horaire en répétant le nombre de jours « n »
planning.add_recurrence_rule IceCube::Rule.daily(repeat_every_n_days)
à la place de repeat_every_n_days, vous avez la possibilité de spécifier le nombre de jours Horaires hebdomadaires Règle récurrente pour générer un planning hebdomadaire
planning.add_recurrence_rule IceCube :: Rule.weekly
règle récurrente pour ajouter un nombre répété de n semaines avec le même horaire
planning.add_recurrence_rule IceCube::Rule.weekly(repeat_every_n_weeks)
Prenons un exemple : répétez le programme uniquement les jours de la semaine (du lundi au vendredi).
planning.add_recurrence_rule IceCube::Rule.weekly.day(1, 2, 3, 4, 5)
Une semaine sur deux le lundi et mardi
planning.add_recurrence_rule IceCube::Rule.weekly(2).day(:monday, :tuesday) ou vous pouvez mentionner comme
planning.add_recurrence_rule IceCube::Rule.weekly(2).day(:lundi, :mardi)
Horaires mensuels répéter le même programme chaque mois
planning.add_recurrence_rule IceCube :: Rule.montly
Horaires mensuels (par jour du mois) chaque mois le premier et le dernier jour du mois
planning.add_recurrence_rule IceCube::Rule.monthly.day_of_month(1, -1)
tous les deux mois, le 15 du mois
planning.add_recurrence_rule IceCube::Rule.monthly(2).day_of_month(15)
Mensuel (par jour de la Nième semaine) # tous les mois le premier et le dernier mardi du mois
planning.add_recurrence_rule IceCube::Rule.monthly.day_of_week(:tuesday => [1, -1])
# tous les deux mois le premier lundi et le mardi dernier
planning.add_recurrence_rule IceCube::Rule.monthly(2).day_of_week(:monday => [1],:tuesday => [-1])
Annuel (par jour de l'année) # chaque année les 100èmes jours du début et de la fin de l'année
planning.add_recurrence_rule IceCube::Rule.yearly.day_of_year(100, -100)
# tous les quatre ans à la veille du nouvel an
planning.add_recurrence_rule IceCube::Rule.yearly(4).day_of_year(-1)
Annuel (par mois de l'année) # chaque année le même jour que start_time mais en janvier et février
planning.add_recurrence_rule IceCube::Rule.yearly.month_of_year(:january, :februrary)
# tous les trois ans en mars
planning.add_recurrence_rule IceCube::Rule.yearly(3).month_of_year(:mars)
# pour plus de commodité programmatique (comme ci-dessus)
planning.add_recurrence_rule IceCube::Rule.yearly(3).month_of_year(3)
Horaire (par heure de la journée) # toutes les heures à la même minute et seconde que la date de début
planning.add_recurrence_rule IceCube :: Rule.hourly
# toutes les deux heures, le lundi
planning.add_recurrence_rule IceCube::Rule.hourly(2).day(:monday) Minutement (toutes les N minutes)
# toutes les 10 minutes
planning.add_recurrence_rule IceCube::Rule.minutely(10)
# toutes les heures et demie, le dernier mardi du mois
planning.add_recurrence_rule IceCube::Rule.minutely(90).day_of_week(:tuesday => [-1])
Deuxièmement (toutes les N secondes) # chaque seconde
planning.add_recurrence_rule IceCube :: Rule.secondly
# toutes les 15 secondes entre 12h00 et 12h59
planning.add_recurrence_rule IceCube::Rule.secondly(15).hour_of_day(12)
Avec ice_cube, vous pouvez également spécifier des heures d'exception. Exemple Répéter Tous les jours sauf demain
planning = IceCube::Schedule.new(now = Time.now) planning.add_recurrence_rule(IceCube::Rule.daily) planning.add_exception_time(now + 1.day) liste les occurrences jusqu'à la fin_heure occurrences = planning.occurrences(end_time)
# ou la (n) première (n) occurrence
planning.first(n)
# ou les (n) dernières occurrences (si le planning se termine)
planning.last(n)
Fuseaux horaires et ActiveSupport par rapport aux classes horaires Ruby standard ice_cube fonctionne très bien sans ActiveSupport mais ne prend en charge que le seul fuseau horaire « local » de l'environnement (ENV['TZ']) ou UTC. Pour prendre en charge correctement plusieurs fuseaux horaires (en particulier pour l'heure d'été), vous devez avoir besoin de « active_support/time ». Les occurrences d'un planning seront renvoyées dans la même classe et le même fuseau horaire que l'heure de début du planning. Les heures de début de planification sont prises en charge comme :
  • Time.local (par défaut lorsqu'aucune heure n'est spécifiée)
  • Heure.utc
  • ActiveSupport :: TimeWithZone (avec Time.zone.now, Time.zone.local, time.in_time_zone(tz))
  • DateTime (obsolète) et Date sont convertis en Time.local
Persistance ice_cube implémente son propre .to_yaml basé sur le hachage, afin que vous puissiez rapidement (et en toute sécurité) sérialiser les objets de planification dans et hors de votre magasin de données. Il prend également en charge la sérialisation vers/depuis ICAL.
yaml = planning.to_yaml IceCube :: Schedule.from_yaml (yaml) hash = planning.to_hash IceCube :: Schedule.from_hash (hash) ical = planning.to_ical IceCube :: Schedule.from_ical (ical)
Utiliser vos mots ice_cube peut fournir des représentations graphiques ou sous forme de chaîne de règles individuelles ou de l'ensemble du programme.
règle = IceCube::Rule.daily(2).day_of_week(:tuesday => [1, -1], :mercredi => [2])
règle.to_ical # 'FREQ=DAILY;INTERVAL=2;BYDAY=1TU,-1TU,2WE'
Rule.to_s # 'Tous les 2 jours le dernier et le 1er mardi et le 2ème mercredi'
Lire aussi : Un aperçu détaillé des fonctionnalités et des modifications de Rails 5 : Ruby on Rails vs CakePHP - La bataille continue : Scraping de sites Web à l'aide de Mechanize Gem RailsCarma a fourni services de développement et de conseil Ruby on Rails des 8 dernières années Nos développeurs maîtrisent parfaitement toutes sortes de travaux de développement Ruby on Rails et la gestion de tout type de projet. Contactez-nous pour en savoir plus sur nos compétences en développement et les projets que nous pouvons gérer.
Katneni Naga Sai Tejaswi
Développeur de logiciels senior

Abonnez-vous pour les dernières mises à jour

Articles Similaires

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrench