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

Lascia un commento

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

it_ITItalian