Pianificazione di eventi ricorrenti con Ice Cube Gem

Ice_cube è una libreria Ruby per prendersi cura in modo efficace di eventi ripetuti (programmazioni). La forza sta nella capacità di indicare più regole e fare in modo che ice_cube comprenda rapidamente se la pianificazione cade in una data specifica (.occurs_on?) o a che ora accade (.occurrences, .first, .all_occurrences). Come ottenere il cubetto di ghiaccio Per l'installazione, utilizza la sintassi seguente gem install se desideri ottenere il codice
gem clone git://github.com/seejohnrun/ice_cube
Per creare la pianificazione dei cubetti di ghiaccio
schedule = IceCube::Schedule.new se vogliamo specificare la data di inizio e la data di fine, abbiamo l'opzione di specificarle nella pianificazione sopra menzionata schedule = IceCube::Schedule.new(start = Time.now, :end_time => start + 600)
Orari giornalieri Dopo aver creato la pianificazione, abbiamo la possibilità di aggiungere una regola di ricorrenza per la pianificazione sopra menzionata, considera "programma ogni giorno" nell'orario sopra menzionato
schedule.add_recurrence_rule IceCube::Rule.daily
considerare lo stesso programma con ripetizione del numero “n” di giorni
schedule.add_recurrence_rule IceCube::Rule.daily(ripetizione_ogni_n_giorni)
al posto di Repeat_every_n_days hai la possibilità di specificare il numero di giorni Orari settimanali Regola ricorrente per generare una pianificazione settimanale
schedule.add_recurrence_rule IceCube::Rule.weekly
regola ricorrente per aggiungere la ripetizione di n numero di settimane con lo stesso programma
schedule.add_recurrence_rule IceCube::Rule.weekly(repeat_every_n_weeks)
Considera un esempio: ripeti il programma solo nei giorni feriali (dal lunedì al venerdì)
schedule.add_recurrence_rule IceCube::Rule.weekly.day(1, 2, 3, 4, 5)
Ogni due settimane il lunedì e il martedì
schedule.add_recurrence_rule IceCube::Rule.weekly(2).day(:monday, :tuesday) oppure puoi menzionare come
schedule.add_recurrence_rule IceCube::Rule.weekly(2).day(:lunedì, :tuesday)
Orari mensili ripetere lo stesso programma ogni mese
schedule.add_recurrence_rule IceCube::Rule.montly
Pianificazioni mensili (per giorno del mese) ogni mese il primo e l'ultimo giorno del mese
schedule.add_recurrence_rule IceCube::Rule.monthly.day_of_month(1, -1)
ogni due mesi il 15 del mese
schedule.add_recurrence_rule IceCube::Rule.monthly(2).day_of_month(15)
Mensile (per giorno dell'ennesima settimana) # ogni mese il primo e l'ultimo martedì del mese
schedule.add_recurrence_rule IceCube::Rule.monthly.day_of_week(:tuesday => [1, -1])
# ogni due mesi il primo lunedì e l'ultimo martedì
schedule.add_recurrence_rule IceCube::Rule.monthly(2).day_of_week(:monday => [1],:tuesday => [-1])
Annuale(per giorno dell'anno) # ogni anno al centesimo giorno dall'inizio e dalla fine dell'anno
schedule.add_recurrence_rule IceCube::Rule.yearly.day_of_year(100, -100)
# ogni quattro anni a Capodanno
schedule.add_recurrence_rule IceCube::Rule.yearly(4).day_of_year(-1)
Annuale (per mese dell'anno) # ogni anno lo stesso giorno di start_time ma a gennaio e febbraio
schedule.add_recurrence_rule IceCube::Rule.yearly.month_of_year(:gennaio, :febbraio)
# ogni tre anni a marzo
schedule.add_recurrence_rule IceCube::Rule.yearly(3).month_of_year(:marzo)
# per comodità programmatica (come sopra)
schedule.add_recurrence_rule IceCube::Rule.yearly(3).mese_dell'anno(3)
Oraria (per ora del giorno) # ogni ora allo stesso minuto e secondo della data di inizio
schedule.add_recurrence_rule IceCube::Rule.hourly
# a ore alterne, il lunedì
schedule.add_recurrence_rule IceCube::Rule.hourly(2).day(:monday) Ogni minuto (ogni N minuti)
# ogni 10 minuti
schedule.add_recurrence_rule IceCube::Rule.minutely(10)
# ogni ora e mezza, l'ultimo martedì del mese
schedule.add_recurrence_rule IceCube::Rule.minutely(90).day_of_week(:tuesday => [-1])
In secondo luogo (ogni N secondi) # ogni secondo
schedule.add_recurrence_rule IceCube::Rule.secondly
# ogni 15 secondi tra le 12:00 e le 12:59
schedule.add_recurrence_rule IceCube::Rule.secondly(15).hour_of_day(12)
Con ice_cube è possibile specificare anche gli orari delle eccezioni Esempio Ripeti tutti i giorni tranne domani
schedule = IceCube::Schedule.new(now = Time.now) schedule.add_recurrence_rule(IceCube::Rule.daily) schedule.add_exception_time(now + 1.day) elenca le occorrenze fino a end_time occorrenze = schedule.occurrences(end_time)
# o le prime (n) occorrenze
programma.first(n)
# o le ultime (n) occorrenze (se la pianificazione termina)
pianificazione.ultimo(n)
Fusi orari e ActiveSupport rispetto alle classi orarie Ruby standard ice_cube funziona perfettamente senza ActiveSupport ma supporta solo il singolo fuso orario "locale" dell'ambiente (ENV['TZ']) o UTC. Per supportare correttamente più fusi orari (in particolare per l'ora legale), dovresti richiedere "active_support/time". Le occorrenze di una pianificazione verranno restituite nella stessa classe e nello stesso fuso orario dell'ora_iniziale della pianificazione. Gli orari di inizio della pianificazione sono supportati come:
  • Time.local (predefinito quando non è specificata l'ora)
  • Ora.utc
  • ActiveSupport::TimeWithZone (con Time.zone.now, Time.zone.local, time.in_time_zone(tz))
  • DateTime (obsoleto) e Date vengono convertiti in Time.local
Persistenza ice_cube implementa il proprio file .to_yaml basato su hash, in modo da poter serializzare rapidamente (e in sicurezza) gli oggetti di pianificazione dentro e fuori l'archivio dati. Supporta anche la serializzazione da/verso ICAL.
yaml = schedule.to_yaml IceCube::Schedule.from_yaml(yaml) hash = schedule.to_hash IceCube::Schedule.from_hash(hash) ical = schedule.to_ical IceCube::Schedule.from_ical(ical)
Usando le tue parole ice_cube può fornire rappresentazioni ical o di stringa di singole regole o dell'intero programma.
regola = IceCube::Rule.daily(2).giorno_della_settimana(:martedì => [1, -1], :mercoledì => [2])
rule.to_ical # 'FREQ=GIORNALIERO;INTERVALLO=2;BYDAY=1TU,-1TU,2WE'
rule.to_s # 'Ogni 2 giorni l'ultimo e il primo martedì e il 2° mercoledì'
Leggi anche: Uno sguardo dettagliato alle caratteristiche e alle modifiche di Rails 5 : Ruby on Rails vs CakePHP: la battaglia continua : Scraping di siti Web utilizzando Mechanize Gem RailsCarma ha fornito servizi di sviluppo e consulenza di Ruby on Rails negli ultimi 8 anni I nostri sviluppatori sono esperti nella realizzazione di tutti i tipi di lavori di sviluppo di rubini su rotaie e nella gestione di qualsiasi tipo di progetto. Contattaci per saperne di più sulle nostre capacità di sviluppo e sui progetti che possiamo gestire.
Katneni Naga Sai Tejaswi
Sviluppatore software senior

Iscriviti per gli ultimi aggiornamenti

Articoli correlati

Informazioni sull'autore del post

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


it_ITItalian