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,
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")) #

Clique aqui para adicionar ao del.icio.us

16 de June de 2010 às 17:10
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.