Publicado por Rafael Rosa em 25 de May de 2010

3 novas bibliotecas de data e hora para Ruby

Faz tempo que não aparecem novas para manipulação de data e hora para Ruby, mas do nada, apareceram 3 novinhas em folha, todas anunciadas pelo RubyFlow há algumas semanas e todas tem sua utilidade, dependendo do que você faz com datas e horas.

ice_cube - Pesquisa e criação rápida de regras para eventos recorrentes

O ice_cube é uma biblioteca criada por John Crepezzi que permite fazer "pesquisa e criação rápida de regras para eventos recorrentes em Ruby." Isso significa que você pode criar programações baseadas em datas recorrentes com regras bastante complexas, como por exemplo a cada 4 anos em uma terça-feira na primeira semana de Novembro. Regras como essa podem ser definidas através do encadeamento de métodos, ao invés utilizar uma linguagem natural.

Instalando:

gem install ice_cube

Usando:

require 'ice_cube'
rule = IceCube::Rule.yearly(4).month_of_year(:november).day(:tuesday).day_of_month(2, 3, 4, 5, 6, 7, 8)
schedule = IceCube::Schedule.new(Time.now)
schedule.add_recurrence_rule rule
schedule.first(3)
# => [Tue Nov 02 05:04:38 +0000 2010, Tue Nov 04 05:04:38 +0000 2014, Tue Nov 06 05:04:38 +0000 2018]

O ice_cube também oferece suporte a exportação de regras para os formatos iCal e YAML, e também pode representá-las em linguagem natural. O John fez uma apresentação em PDF mostrando mais exemplos e você poderá encontrar mais exemplos simples no site oficial.

tickle - Um parser de linguagem natural para eventos recorrentes

O tickle é um parser de linguagem natural para eventos recorrentes criado por Joshua Lippiner, que usa um estilo oposto ao do ice_cube, baseado em métodos. Ele usa o conhecido parser de linguagem natural chronic e parece que só funciona com o Ruby 1.9+ (segundo meus testes).

O tickle permite que você informe coisas como every 4 days starting next saturday (a cada 4 dias começando no próximo Sábado), every other week (semana sim, semana não), the tenth of the month (no décimo dia do mês) e similares, basta passar o texto para o método Tickle.parse e ele irá retornar a próxima ocorrência para a regra que ele irá criar uma regra. Você pode ver mais exemplos na página do GitHub do tickle.

Instalando:

gem install tickle

Usando:

require 'tickle'
Tickle.parse('every 4 days starting next saturday')
# => 2010-05-01 12:00:00 +0000

O tickle ainda não é muito maduro e só ajuda na hora de encontrar a próxima ocorrência da regra, mas o desenvolvedor recomenda que, uma vez que a ocorrência acontecer, você execute o Tickle novamente para saber a próxima data. Dessa forma, o tickle parece ser útil para situações em que apenas a próxima ocorrência precisa ser armazenada e a regra pode ser guardada uma coluna separada do banco de dados ou algo parecido.

business_time - Time and date offsets based on "business time/hours"

O business_time é uma nova biblioteca que usa o conceito de "horário comercial", ou seja, ao invés de permitir que você faça operações de data e hora apenas com períodos de 7 dias por semana e 24 horas, ele permite que você sua definição de horário comercial e opere com essas restrições. O business_time depende bastante do Active Support.

Instalando:

gem install business_time

Aviso: o business_time depende do Active Support (gem: activesupport)

Usando:

require 'active_support'
require 'business_time'
# Examplos de "from_now (a partir de agora)"
4.business_hours.from_now
5.business_days.from_now
# Usando datas informadas pelo usuário
my_birthday = Date.parse("August 4th, 2010")
10.business_days.before(my_birthday)
# É facil marcar um dia como não útil
BusinessTime::Config.holidays << my_birthday
# O resultado é pular do dia 4
6.business_hours.after(Time.parse("August 3rd, 3:00pm")) #

Apenas Um Comentário para “3 novas bibliotecas de data e hora para Ruby”

  1. #1
    nofxx Disse:

    Então, e a gente ñ tem nem como usar um chronic da vida em PT...
    Ou ñ tinha?

    http://github.com/nofxx/chronic18n

    Eh um proof of concept... bugs/suggestions welcome.

Deixe um Comentário