maca-eventual 0.4.5 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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