README.rdoc in eventual-0.4.9 vs README.rdoc in eventual-0.5.0
- old
+ new
@@ -7,78 +7,117 @@
Reconocimiento de fechas y periodos en lenguaje natural. Útil para crear interfaces de usuario basadas en texto.
== SINOPSIS:
El método event_parse del modulo Eventual reconoce y convierte una fecha o periodo expresado en lenguaje natural en objetos _Date_ o _DateTime_
-Ejemplos:
+Ejemplos:
require 'rubygems'
- require 'eventual'
+ require 'eventual'
- Eventual.event_parse( 'del 5 al 7 de junio' )
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2009' ).map
=> [#<DateTime: 4909975/2,0,2299161>, #<DateTime: 4909977/2,0,2299161>, #<DateTime: 4909979/2,0,2299161>]
- Eventual.event_parse( 'del 5 al 7 de junio 2009', Date )
- => [#<Date: 4909975/2,0,2299161>, #<Date: 4909977/2,0,2299161>, #<Date: 4909979/2,0,2299161>]
+ # Si no se especifica el año se usará el año actual
+ EsDatesParser.new.parse( 'del 5 al 7 de junio' ).map{ |d| d.to_s } # Quizá mas tarde se localize a otros idiomas
+ => ["2010-06-05", "2010-06-06", "2010-06-07"]
- Eventual.event_parse( 'del 5 al 7 de junio del 2009 a las 16:00 y 18:00 horas' ){ |d| d.to_s }
+ # Se puede especificar un año por omisión
+ dates = EsDatesParser.new.parse( 'del 5 al 7 de junio' )
+ dates.year = 2007
+ dates.map{ |d| d.to_s }
+ => ["2007-06-05", "2007-06-06", "2007-06-07"]
+
+ # Si se especifica la hora el resultado será un Array de DateTime
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2009 a las 16:00 y 18:00 horas' ).map
+ => [#<DateTime: 14729929/6,0,2299161>, #<DateTime: 9819953/4,0,2299161>, #<DateTime: 14729935/6,0,2299161>, #<DateTime: 9819957/4,0,2299161>, #<DateTime: 14729941/6,0,2299161>, #<DateTime: 9819961/4,0,2299161>]
+
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2009 a las 16:00 y 18:00 horas' ).map{ |d| d.to_s }
=> ["2009-06-05T16:00:00+00:00", "2009-06-05T18:00:00+00:00", "2009-06-06T16:00:00+00:00", "2009-06-06T18:00:00+00:00", "2009-06-07T16:00:00+00:00", "2009-06-07T18:00:00+00:00"]
- Eventual.event_parse( 'del 5 al 7 de junio 2009' ){ |d| Eventual::WDAY_LIST[ d.wday ] }
- => ['viernes', 'sabado', 'domingo']
+ # Se pueden restringir los resultados a ciertos dias
+ EsDatesParser.new.parse('lunes y martes de diciembre del 2001 a las 15:00').map{ |d| d.to_s }
+ => ["2010-12-06T15:00:00+00:00", "2010-12-07T15:00:00+00:00", "2010-12-13T15:00:00+00:00", "2010-12-14T15:00:00+00:00", "2010-12-20T15:00:00+00:00", "2010-12-21T15:00:00+00:00", "2010-12-27T15:00:00+00:00", "2010-12-28T15:00:00+00:00"]
-Ejemplos de formatos reconocidos:
-
-* 1 de enero
-* 21, 22 y 23 de enero del 2009
-* 21, 22 y 23 de enero a las 20:00 horas
-* 21, 22 y 23 de enero a las 20:00 y 22:00 horas
-* viernes 1, sábado 2, domingo 3 y lunes 4 de enero del 2010
-* martes y miércoles del 1 al 20 de junio del 2009 a las 16:00 y 18:00 horas
-* sábados y domingos del 1 de enero al 31 de diciembre del 2008 a las 16:00
-* sábado y domingo del 1 de enero al 31 de diciembre
-* lunes a viernes del 1 de enero al 31 de diciembre del 2008 a las 16:00
-* todos los sábados de diciembre del 2009
-* lunes a viernes de enero a abril
-* del viernes 1 al domingo 3 de enero del 2010
+ # Se puede checar si las fechas reconocidas incluyen cierta fecha, la comparación es "perezosa" es decir no instancia todos los objetos Date o DateTime
+ # como hace map y por lo tanto es mas eficiente
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007' ).include? Date.civil(2007, 6, 6)
+ => true
-Se puede extender _Date_ y _DateTime_ con Eventual requiriendo 'eventual/date_time' y 'eventual/date':
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007' ).include? Date.civil(2006, 6, 6)
+ => false
- require 'rubygems'
- require 'eventual'
- require 'eventual/date_time'
- require 'eventual/date'
-
- DateTime.event_parse( 'del 5 al 7 de junio' )
- => [#<DateTime: 4909975/2,0,2299161>, #<DateTime: 4909977/2,0,2299161>, #<DateTime: 4909979/2,0,2299161>]
+ # Se toma en cuenta la hora
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? DateTime.civil(2007, 6, 6, 16, 0)
+ => true
- Date.event_parse( 'del 5 al 7 de junio 2009' )
- => [#<Date: 4909975/2,0,2299161>, #<Date: 4909977/2,0,2299161>, #<Date: 4909979/2,0,2299161>]
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? DateTime.civil(2007, 6, 6, 15, 0)
+ => false
+
+ # Si se pasa un Date que corresponda al periodo la comparación es positiva
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? Date.civil(2007, 6, 6)
+ => true
+
+ # El evento tiene una duración por omisión de 60 minutos
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? DateTime.civil(2007, 6, 6, 16, 59)
+ => true
+
+ EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007 a las 16:00' ).include? DateTime.civil(2007, 6, 6, 17, 00)
+ => false
+
+ # Pero se puede cambiar
+ dates = EsDatesParser.new.parse( 'del 5 al 7 de junio del 2007 a las 16:00' )
+ dates.time_span = 120
+ dates.include? DateTime.civil(2007, 6, 6, 17, 00)
+ => true
+
+Ejemplos de formatos reconocidos:
+* marzo
+* marzo de 2009
+* marzo del 2009
+* todo marzo 2009
+* marzo, 2009
+* marzo '09
+* lunes y martes marzo del 2010
+* todos los lunes y martes de marzo del 2010
+* lunes y martes durante marzo del 2010
+* lunes y martes durante todo marzo del 2010
+* lunes y martes, marzo del 2010
+* 21 de marzo
+* 21 marzo
+* domingo 21 de marzo
+* 1, 2 y 3 de marzo
+* 1, 2 y 3 marzo
+* lunes 1, martes 2 y miercoles 3 de marzo
+* 1 al 3 de marzo
+* 1 al 3, marzo
+* del 1 al 3 de marzo
+* del 1 al 3, marzo
+* 24 de febrero al 3 de marzo del 2010
+* 24 de diciembre del 2009 al 3 de enero del 2010
+* lunes y martes del 1 al 22 de marzo del '10
+* fines de semana del 1 al 22 de marzo del '10
+* entre semana del 1 al 22 de marzo del '10
+* lunes y martes del 1 al 22 de marzo del '10
+* todos los lunes y martes del 1 al 22 de marzo del '10
+* los lunes y martes del 1 al 22 de marzo del '10
+* los lunes y los martes del 1 al 22 de marzo del '10
+* lunes y martes de diciembre a las 15
+* lunes y martes de diciembre a las 15:30 hrs.
+* lunes y martes de diciembre a las 15:00 y 16:00 horas
+* lunes y martes de diciembre a las 3 am
+* lunes y martes de diciembre a las 3:15 p.m.
-Si se pasa un bloque se puede especificar si se desea usar el texto que sigue a la definición de fechas mediante pasando la opción _use_trailing_ => _true_:
-
- str = "1 de enero del 2009\nSede:El tercer lugar\n2 de enero del 2009\nSede:El tercer lugar"
- Eventual.event_parse( str, :use_trailing => true ) do |dia, texto_extra|
- [dia.to_s, texto_extra]
- end
- => [["2009-01-01T00:00:00+00:00", "Sede:El tercer lugar"], ["2009-01-02T00:00:00+00:00", "Sede:El tercer lugar"]]
-
== TODO:
-* No estoy seguro de que Iconv funcione en windows, lo arreglaré pronto
-
Formatos a reconocer
-* todos los lunes de junio
-* todo junio
-* domingos de septiembre
-* martes y miércoles de agosto
* todo el año
== INSTALACIÓN:
- sudo gem install maca-eventual -s http://gems.github.com
+ [sudo] gem install eventual -s http://gemcutter.org
== LICENCIA:
(The MIT License)
\ No newline at end of file