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