maca-eventual 0.4.5 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -2,16 +2,14 @@ require 'rubygems' unless ENV['NO_RUBYGEMS']
2
2
  %w[rake rake/clean fileutils newgem rubigen].each { |f| require f }
3
3
  require File.dirname(__FILE__) + '/lib/eventual'
4
4
 
5
- # Generate all the Rake tasks
6
- # Run 'rake -T' to see list of generated tasks (from gem root directory)
5
+
6
+
7
7
  $hoe = Hoe.new('eventual', Eventual::VERSION) do |p|
8
8
  p.developer('Macario Ortega', 'macarui@gmail.com')
9
9
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
10
10
  p.rubyforge_name = p.name
11
11
 
12
12
  p.clean_globs |= %w[**/.DS_Store tmp *.log]
13
- # path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
14
- # p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
15
13
  p.rsync_args = '-av --delete --ignore-errors'
16
14
  end
17
15
 
data/eventual.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{eventual}
5
- s.version = "0.4.5"
5
+ s.version = "0.4.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Macario Ortega"]
9
- s.date = %q{2009-08-31}
9
+ s.date = %q{2009-09-01}
10
10
  s.description = %q{}
11
11
  s.email = ["macarui@gmail.com"]
12
12
  s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.rdoc"]
data/lib/eventual.rb CHANGED
@@ -4,41 +4,40 @@ require 'strscan'
4
4
 
5
5
  $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
6
6
 
7
-
8
7
  module Eventual
9
- VERSION = '0.4.5'
8
+ VERSION = '0.4.7'
10
9
  extend self
11
10
 
12
11
  WDAY_LIST = %w(domingo lunes martes miercoles jueves viernes sabado)
13
12
  MNAMES = %w(enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre).unshift(nil)
14
13
 
15
- year = /(?: (?:del|de))? (\d{4})/
16
- horarios = / a las (.*)/
14
+ year = /(?: (?:del|de))? (\d{4})/i
15
+ horarios = / a las (.*)/i
17
16
  DAY_LIST = %r{
18
17
  (
19
18
  (?:
20
19
  \d{1,2}
21
- (?-mix: |, | y )
20
+ (?-x: |, | y )
22
21
  )+ # Lista de número de día
23
22
  )
24
- de\s(#{ MNAMES.compact.join('|') }) # Lista de mes
23
+ de\s(#{ MNAMES.compact.join('|') }) # Mes
25
24
  (?:#{ year })? # Año opcional
26
25
  (#{ horarios })? # Hora opcional
27
26
  }ixo
28
27
 
29
28
  DAY_PERIOD = %r{
30
29
  (
31
- (?: # Dia de la semana opcional
30
+ (?: # Dias de la semana opcionales
32
31
  (?:#{ WDAY_LIST.join('|') }) # Nombre del día
33
- (?-mix: |, | y ) # Concatenador
32
+ (?-x: |, | y ) # Concatenador
34
33
  )*
35
34
  )
36
- (?-mix:del (\d{1,2}))\s # Comienzo del periodo
37
- (?:de\s # Mes opcional
35
+ (?-x:del (\d{1,2}))\s # Comienzo del periodo
36
+ (?:de\s # Mes opcional
38
37
  (#{ MNAMES.compact.join('|') }) # Nombre del mes
39
38
  (?:#{ year })? # Año opcional
40
39
  \s)?
41
- (?-mix:al (\d{1,2}) de (#{ MNAMES.compact.join('|') })) # Mes requerido
40
+ (?-x:al (\d{1,2}) de (#{ MNAMES.compact.join('|') })) # Mes requerido
42
41
  (?:#{ year })? # Año opcional
43
42
  (#{ horarios })? # Hora opcional
44
43
  }ixo
@@ -46,7 +45,7 @@ module Eventual
46
45
  def event_parse string, opts = {}, &block
47
46
  parser = opts.delete(:parser) || (self == Eventual ? DateTime : self)
48
47
  use_trailing = opts.delete(:use_trailing)
49
- string = Iconv.iconv("ASCII//IGNORE//TRANSLIT", "UTF-8", string).join.gsub(/'/, '')
48
+ string = Iconv.iconv("ASCII//IGNORE//TRANSLIT", "UTF-8", string).join.gsub(/'/, '').gsub(/(\s)+/, '\1')
50
49
  results = []
51
50
  scanner = StringScanner.new string
52
51
 
@@ -56,12 +55,13 @@ module Eventual
56
55
  when DAY_PERIOD
57
56
  wdays, first_day, first_month, first_year, last_day, last_month, last_year, times = $1, $2, $3, $4, $5, $6, $7, $8
58
57
  match = $&
59
- wdays = wdays.scan( Regexp.new(WDAY_LIST.join('|')) ).collect{ |d| WDAY_LIST.index d }
58
+ wdays = wdays.scan( Regexp.new(WDAY_LIST.join('|')) ).collect{ |d| WDAY_LIST.index d.downcase }
60
59
  last_year ||= string.match(/\d{4}/) ? $& : Date.today.year
61
60
  first_year ||= last_year
62
61
  first_month ||= last_month
63
- last_month = MNAMES.index last_month
64
- first_month = MNAMES.index first_month
62
+ last_month = MNAMES.index last_month.downcase
63
+ first_month = MNAMES.index first_month.downcase
64
+
65
65
  make_days = lambda do |hour, minute|
66
66
  first = make_day parser, first_year, first_month, first_day, hour, minute
67
67
  last = make_day parser, last_year, last_month, last_day, hour, minute
@@ -73,42 +73,40 @@ module Eventual
73
73
  end
74
74
 
75
75
  when DAY_LIST
76
- days, month, year, times = $1, MNAMES.index($2), $3, $4
76
+ days, month, year, times = $1, MNAMES.index($2.downcase), $3, $4
77
77
  match = $&
78
78
  days = days.scan(/\d{1,2}/)
79
79
  year ||= string.match(/\d{4}/) ? $& : Date.today.year
80
+
80
81
  make_days = lambda do |hour, minute|
81
82
  days.map do |day|
82
83
  make_day parser, year, month, day, hour, minute
83
84
  end
84
85
  end
86
+
85
87
  else
86
88
  break
87
89
  end
88
90
 
89
- extra = scanner.scan(/.*?(?=#{DAY_LIST}|#{DAY_PERIOD}|\n{2}|\z)/m)
90
- results +=
91
+ extra = scanner.scan(/.*?(?=#{DAY_LIST}|#{DAY_PERIOD}|\z)/m).to_s.chomp
92
+ extra.gsub!(/^(,|\n|\.)/, '')
93
+
94
+ days =
91
95
  if times
92
- times.scan( /(\d{2}):(\d{2})/ ).map do |hour, minute|
93
- make_days.call hour, minute
94
- end.flatten
96
+ times.scan( /(\d{2}):(\d{2})/ ).map{ |hour, minute| make_days.call hour, minute }.flatten
95
97
  else
96
98
  make_days.call nil, nil
97
99
  end
100
+
101
+ days.each { |day| day.instance_variable_set('@extra', extra) }
102
+ results += days
98
103
  end
99
104
 
100
105
  raise ArgumentError.new( 'El formato de las fechas parece ser incorrecto' ) if results.empty?
101
106
  results.uniq!
102
107
  results.sort!
103
108
 
104
- results.map! do |day|
105
- if use_trailing
106
- yield day, extra.to_s.gsub(/^[\n|.|,]*/, '')
107
- else
108
- yield day
109
- end
110
- end if block_given?
111
-
109
+ use_trailing ? results.map!{ |day| yield day, day.instance_variable_get('@extra') } : results.map!{ |day| yield day } if block_given?
112
110
  results
113
111
  end
114
112
 
@@ -62,18 +62,7 @@ describe 'event parsing' do
62
62
  e.should map_times( *r )
63
63
  end
64
64
 
65
- it "should parse a long period" do
66
- e = Eventual.event_parse( 'martes y jueves del 1 de enero del 2000 al 31 de diciembre del 2010' )
67
- r = (DateTime.parse('2000-1-1T00:00')..DateTime.parse('2010-12-31T00:00') ).reject{ |day| not [2,4].include?(day.wday) }
68
- e.should map_times( *r )
69
- end
70
-
71
- it "should parse a long period with multiple times" do
72
- e = Eventual.event_parse( 'martes y jueves del 1 de enero del 2000 al 31 de diciembre del 2010 a las 16:00 y 18:00 horas' )
73
- r = (DateTime.parse('2000-1-1T16:00')...DateTime.parse('2010-12-31T16:00') ).reject{ |day| not [2,4].include?(day.wday) } +
74
- (DateTime.parse('2000-1-1T18:00')...DateTime.parse('2010-12-31T18:00') ).reject{ |day| not [2,4].include?(day.wday) }
75
- e.should map_times( *r.sort )
76
- end
65
+
77
66
 
78
67
  it "should event_parse a period with block" do
79
68
  Eventual.event_parse( 'del 5 al 7 de junio 2009' ){ |d| Eventual::WDAY_LIST[ d.wday ] }.should == ['viernes', 'sabado', 'domingo']
@@ -108,13 +97,38 @@ describe 'event parsing' do
108
97
  end.should == ['viernes', 'sabado', 'domingo']
109
98
  end
110
99
 
111
- it "should event_parse a several dates" do |d, extra|
100
+ it "should event_parse a several dates" do
112
101
  Eventual.event_parse( "1 de enero del 2009\nSede:El tercer lugar\nCupo: limitado\n2 de enero del 2009\nSede:El tercer lugar\nCupo: limitado", :use_trailing => true ) do |d, extra|
113
102
  extra.should == "Sede:El tercer lugar\nCupo: limitado"
114
103
  d.to_s
115
104
  end.should == ["2009-01-01T00:00:00+00:00", "2009-01-02T00:00:00+00:00"]
116
105
  end
106
+
107
+ it "should event_parse a several dates" do
108
+ Eventual.event_parse( "1 de enero del 2009\nSede 1\n\n2 de enero del 2009\nSede 2", :use_trailing => true ) do |d, extra|
109
+ [d.to_s, extra]
110
+ end.should == [["2009-01-01T00:00:00+00:00", "Sede 1"], ["2009-01-02T00:00:00+00:00", "Sede 2"]]
111
+ end
117
112
  end
118
113
 
114
+ describe 'Case sensitivity' do
115
+ it "should ignore case" do
116
+ Eventual.event_parse( 'DeL 1 al 3 de ENeRO' ).should map_times( '2009-1-1', '2009-1-2', '2009-1-3' )
117
+ end
118
+ end
119
+
120
+ # it "should parse a long period" do
121
+ # e = Eventual.event_parse( 'martes y jueves del 1 de enero del 2000 al 31 de diciembre del 2010' )
122
+ # r = (DateTime.parse('2000-1-1T00:00')..DateTime.parse('2010-12-31T00:00') ).reject{ |day| not [2,4].include?(day.wday) }
123
+ # e.should map_times( *r )
124
+ # end
125
+ #
126
+ # it "should parse a long period with multiple times" do
127
+ # e = Eventual.event_parse( 'martes y jueves del 1 de enero del 2000 al 31 de diciembre del 2010 a las 16:00 y 18:00 horas' )
128
+ # r = (DateTime.parse('2000-1-1T16:00')...DateTime.parse('2010-12-31T16:00') ).reject{ |day| not [2,4].include?(day.wday) } +
129
+ # (DateTime.parse('2000-1-1T18:00')...DateTime.parse('2010-12-31T18:00') ).reject{ |day| not [2,4].include?(day.wday) }
130
+ # e.should map_times( *r.sort )
131
+ # end
132
+
119
133
  end
120
134
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maca-eventual
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Macario Ortega
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-31 00:00:00 -07:00
12
+ date: 2009-09-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency