sportdb 1.8.15 → 1.8.16
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/Manifest.txt +1 -0
- data/bin/sportdb +0 -0
- data/lib/sportdb.rb +1 -0
- data/lib/sportdb/finders/date.rb +271 -0
- data/lib/sportdb/patterns.rb +1 -0
- data/lib/sportdb/utils_date.rb +2 -206
- data/lib/sportdb/version.rb +1 -1
- data/test/test_date.rb +17 -8
- metadata +45 -72
- checksums.yaml +0 -7
data/Manifest.txt
CHANGED
data/bin/sportdb
CHANGED
|
File without changes
|
data/lib/sportdb.rb
CHANGED
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module SportDb
|
|
4
|
+
|
|
5
|
+
class DateFinder
|
|
6
|
+
|
|
7
|
+
include LogUtils::Logging
|
|
8
|
+
|
|
9
|
+
# todo: make more generic for reuse
|
|
10
|
+
MONTH_EN = 'Jan|Feb|March|Mar|April|Apr|May|June|Jun|July|Jul|Aug|Sept|Sep|Oct|Nov|Dec'
|
|
11
|
+
MONTH_EN_TO_MM = {
|
|
12
|
+
'Jan' => '1',
|
|
13
|
+
'Feb' => '2',
|
|
14
|
+
'Mar' => '3', 'March' => '3',
|
|
15
|
+
'Apr' => '4', 'April' => '4',
|
|
16
|
+
'May' => '5',
|
|
17
|
+
'Jun' => '6', 'June' => '6',
|
|
18
|
+
'Jul' => '7', 'July' => '7',
|
|
19
|
+
'Aug' => '8',
|
|
20
|
+
'Sep' => '9', 'Sept' => '9',
|
|
21
|
+
'Oct' => '10',
|
|
22
|
+
'Nov' => '11',
|
|
23
|
+
'Dec' => '12' }
|
|
24
|
+
|
|
25
|
+
MONTH_ES = 'Enero|Ene|Feb|Marzo|Mar|Abril|Abr|Mayo|May|Junio|Jun|Julio|Jul|Agosto|Ago|Sept|Set|Sep|Oct|Nov|Dic'
|
|
26
|
+
MONTH_ES_TO_MM = {
|
|
27
|
+
'Ene' => '1', 'Enero' => '1',
|
|
28
|
+
'Feb' => '2',
|
|
29
|
+
'Mar' => '3', 'Marzo' => '3',
|
|
30
|
+
'Abr' => '4', 'Abril' => '4',
|
|
31
|
+
'May' => '5', 'Mayo' => '5',
|
|
32
|
+
'Jun' => '6', 'Junio' => '6',
|
|
33
|
+
'Jul' => '7', 'Julio' => '7',
|
|
34
|
+
'Ago' => '8', 'Agosto' => '8',
|
|
35
|
+
'Sep' => '9', 'Set' => '9', 'Sept' => '9',
|
|
36
|
+
'Oct' => '10',
|
|
37
|
+
'Nov' => '11',
|
|
38
|
+
'Dic' => '12' }
|
|
39
|
+
|
|
40
|
+
# todo/fix - add de and es too!!
|
|
41
|
+
# note: in Austria - Jänner - in Deutschland Januar allow both ??
|
|
42
|
+
# MONTH_DE = 'J[aä]n|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# e.g. 2012-09-14 20:30 => YYYY-MM-DD HH:MM
|
|
46
|
+
# nb: allow 2012-9-3 7:30 e.g. no leading zero required
|
|
47
|
+
# regex_db
|
|
48
|
+
DB__DATE_TIME_REGEX = /\b
|
|
49
|
+
(?<year>\d{4})
|
|
50
|
+
-
|
|
51
|
+
(?<month>\d{1,2})
|
|
52
|
+
-
|
|
53
|
+
(?<day>\d{1,2})
|
|
54
|
+
\s+
|
|
55
|
+
(?<hours>\d{1,2})
|
|
56
|
+
:
|
|
57
|
+
(?<minutes>\d{2})
|
|
58
|
+
\b/x
|
|
59
|
+
|
|
60
|
+
# e.g. 2012-09-14 w/ implied hours (set to 12:00)
|
|
61
|
+
# nb: allow 2012-9-3 e.g. no leading zero required
|
|
62
|
+
# regex_db2
|
|
63
|
+
DB__DATE_REGEX = /\b
|
|
64
|
+
(?<year>\d{4})
|
|
65
|
+
-
|
|
66
|
+
(?<month>\d{1,2})
|
|
67
|
+
-
|
|
68
|
+
(?<day>\d{1,2})
|
|
69
|
+
\b/x
|
|
70
|
+
|
|
71
|
+
# e.g. 14.09.2012 20:30 => DD.MM.YYYY HH:MM
|
|
72
|
+
# nb: allow 2.3.2012 e.g. no leading zero required
|
|
73
|
+
# nb: allow hour as 20.30
|
|
74
|
+
# regex_de
|
|
75
|
+
DD_MM_YYYY__DATE_TIME_REGEX = /\b
|
|
76
|
+
(?<day>\d{1,2})
|
|
77
|
+
\.
|
|
78
|
+
(?<month>\d{1,2})
|
|
79
|
+
\.
|
|
80
|
+
(?<year>\d{4})
|
|
81
|
+
\s+
|
|
82
|
+
(?<hours>\d{1,2})
|
|
83
|
+
[:.]
|
|
84
|
+
(?<minutes>\d{2})
|
|
85
|
+
\b/x
|
|
86
|
+
|
|
87
|
+
# e.g. 14.09. 20:30 => DD.MM. HH:MM
|
|
88
|
+
# nb: allow 2.3.2012 e.g. no leading zero required
|
|
89
|
+
# nb: allow hour as 20.30 or 3.30 instead of 03.30
|
|
90
|
+
# regex_de2
|
|
91
|
+
DD_MM__DATE_TIME_REGEX = /\b
|
|
92
|
+
(?<day>\d{1,2})
|
|
93
|
+
\.
|
|
94
|
+
(?<month>\d{1,2})
|
|
95
|
+
\.
|
|
96
|
+
\s+
|
|
97
|
+
(?<hours>\d{1,2})
|
|
98
|
+
[:.]
|
|
99
|
+
(?<minutes>\d{2})
|
|
100
|
+
\b/x
|
|
101
|
+
|
|
102
|
+
# e.g. 14.09.2012 => DD.MM.YYYY w/ implied hours (set to 12:00)
|
|
103
|
+
# regex_de3
|
|
104
|
+
DD_MM_YYYY__DATE_REGEX = /\b
|
|
105
|
+
(?<day>\d{1,2})
|
|
106
|
+
\.
|
|
107
|
+
(?<month>\d{1,2})
|
|
108
|
+
\.
|
|
109
|
+
(?<year>\d{4})
|
|
110
|
+
\b/x
|
|
111
|
+
|
|
112
|
+
# e.g. 14.09. => DD.MM. w/ implied year and implied hours (set to 12:00)
|
|
113
|
+
# note: allow end delimiter ] e.g. [Sa 12.01.] or end-of-string ($) too
|
|
114
|
+
# note: we use a lookahead for last part e.g. (?:\s+|$|[\]]) - do NOT cosume
|
|
115
|
+
# regex_de4
|
|
116
|
+
DD_MM__DATE_REGEX = /\b
|
|
117
|
+
(?<day>\d{1,2})
|
|
118
|
+
\.
|
|
119
|
+
(?<month>\d{1,2})
|
|
120
|
+
\.
|
|
121
|
+
(?=\s+|$|[\]])/x ## note: allow end-of-string/line too
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# e.g. 12 May 2013 14:00 => D|DD.MMM.YYYY H|HH:MM
|
|
125
|
+
EN__DD_MONTH_YYYY__DATE_TIME_REGEX = /\b
|
|
126
|
+
(?<day>\d{1,2})
|
|
127
|
+
\s
|
|
128
|
+
(?<month_en>#{MONTH_EN})
|
|
129
|
+
\s
|
|
130
|
+
(?<year>\d{4})
|
|
131
|
+
\s+
|
|
132
|
+
(?<hours>\d{1,2})
|
|
133
|
+
:
|
|
134
|
+
(?<minutes>\d{2})
|
|
135
|
+
\b/x
|
|
136
|
+
|
|
137
|
+
# e.g. Jun/12 14:00 w/ implied year H|HH:MM
|
|
138
|
+
EN__MONTH_DD__DATE_TIME_REGEX = /\b
|
|
139
|
+
(?<month_en>#{MONTH_EN})
|
|
140
|
+
\/
|
|
141
|
+
(?<day>\d{1,2})
|
|
142
|
+
\s+
|
|
143
|
+
(?<hours>\d{1,2})
|
|
144
|
+
:
|
|
145
|
+
(?<minutes>\d{2})
|
|
146
|
+
\b/x
|
|
147
|
+
|
|
148
|
+
# e.g. Jun/12 2013 w/ implied hours (set to 12:00)
|
|
149
|
+
EN__MONTH_DD_YYYY__DATE_REGEX = /\b
|
|
150
|
+
(?<month_en>#{MONTH_EN})
|
|
151
|
+
\/
|
|
152
|
+
(?<day>\d{1,2})
|
|
153
|
+
\s
|
|
154
|
+
(?<year>\d{4})
|
|
155
|
+
\b/x
|
|
156
|
+
|
|
157
|
+
# e.g. Jun/12 w/ implied year and implied hours (set to 12:00)
|
|
158
|
+
EN__MONTH_DD__DATE_REGEX = /\b
|
|
159
|
+
(?<month_en>#{MONTH_EN})
|
|
160
|
+
\/
|
|
161
|
+
(?<day>\d{1,2})
|
|
162
|
+
\b/x
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
# e.g. 12 Ene w/ implied year and implied hours (set to 12:00)
|
|
166
|
+
ES__DD_MONTH__DATE_REGEX = /\b
|
|
167
|
+
(?<day>\d{1,2})
|
|
168
|
+
\s
|
|
169
|
+
(?<month_es>#{MONTH_ES})
|
|
170
|
+
\b/x
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
# map table - 1) tag, 2) regex - note: order matters; first come-first matched/served
|
|
175
|
+
FORMATS = [
|
|
176
|
+
[ '[YYYY_MM_DD_hh_mm]', DB__DATE_TIME_REGEX ],
|
|
177
|
+
[ '[YYYY_MM_DD]', DB__DATE_REGEX ],
|
|
178
|
+
[ '[DD_MM_YYYY_hh_mm]', DD_MM_YYYY__DATE_TIME_REGEX ],
|
|
179
|
+
[ '[DD_MM_hh_mm]', DD_MM__DATE_TIME_REGEX ],
|
|
180
|
+
[ '[DD_MM_YYYY]', DD_MM_YYYY__DATE_REGEX ],
|
|
181
|
+
[ '[DD_MM]', DD_MM__DATE_REGEX ],
|
|
182
|
+
[ '[EN_DD_MONTH_YYYY_hh_mm]', EN__DD_MONTH_YYYY__DATE_TIME_REGEX ],
|
|
183
|
+
[ '[EN_MONTH_DD_hh_mm]', EN__MONTH_DD__DATE_TIME_REGEX ],
|
|
184
|
+
[ '[EN_MONTH_DD_YYYY]', EN__MONTH_DD_YYYY__DATE_REGEX ],
|
|
185
|
+
[ '[EN_MONTH_DD]', EN__MONTH_DD__DATE_REGEX ],
|
|
186
|
+
[ '[ES_DD_MONTH]', ES__DD_MONTH__DATE_REGEX ]
|
|
187
|
+
]
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def initialize
|
|
192
|
+
# nothing here for now
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def find!( line, opts={} )
|
|
196
|
+
# fix: use more lookahead for all required trailing spaces!!!!!
|
|
197
|
+
# fix: use <name capturing group> for month,day,year etc.!!!
|
|
198
|
+
|
|
199
|
+
#
|
|
200
|
+
# fix: !!!!
|
|
201
|
+
# date in [] will become [[DATE.DE4]] - when getting removed will keep ]!!!!
|
|
202
|
+
# fix: change regex to \[[A-Z0-9.]\] !!!!!! plus add unit test too!!!
|
|
203
|
+
#
|
|
204
|
+
|
|
205
|
+
md = nil
|
|
206
|
+
FORMATS.each do |format|
|
|
207
|
+
tag = format[0]
|
|
208
|
+
pattern = format[1]
|
|
209
|
+
md=pattern.match( line )
|
|
210
|
+
if md
|
|
211
|
+
date = parse_date_time( md, opts )
|
|
212
|
+
## fix: use md[0] e.g. match for sub! instead of using regex again - why? why not???
|
|
213
|
+
## fix: use md.begin(0), md.end(0)
|
|
214
|
+
line.sub!( md[0], tag )
|
|
215
|
+
## todo/fix: make sure match data will not get changed (e.g. using sub! before parse_date_time)
|
|
216
|
+
return date
|
|
217
|
+
end
|
|
218
|
+
# no match; continue; try next pattern
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
return nil # no match found
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
private
|
|
225
|
+
def calc_year( month, day, opts )
|
|
226
|
+
start_at = opts[:start_at]
|
|
227
|
+
|
|
228
|
+
logger.debug " [calc_year] ????-#{month}-#{day} -- start_at: #{start_at}"
|
|
229
|
+
|
|
230
|
+
if month >= start_at.month
|
|
231
|
+
# assume same year as start_at event (e.g. 2013 for 2013/14 season)
|
|
232
|
+
start_at.year
|
|
233
|
+
else
|
|
234
|
+
# assume year+1 as start_at event (e.g. 2014 for 2013/14 season)
|
|
235
|
+
start_at.year+1
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def parse_date_time( match_data, opts={} )
|
|
240
|
+
|
|
241
|
+
# convert regex match_data captures to hash
|
|
242
|
+
# - note: cannont use match_data like a hash (e.g. raises exception if key/name not present/found)
|
|
243
|
+
h = {}
|
|
244
|
+
# - note: do NOT forget to turn name into symbol for lookup in new hash (name.to_sym)
|
|
245
|
+
match_data.names.each { |name| h[name.to_sym] = match_data[name] } # or use match_data.names.zip( match_data.captures ) - more cryptic but "elegant"??
|
|
246
|
+
|
|
247
|
+
## puts "[parse_date_time] match_data:"
|
|
248
|
+
## pp h
|
|
249
|
+
logger.debug " [parse_date_time] hash: >#{h.inspect}<"
|
|
250
|
+
|
|
251
|
+
h[ :month ] = MONTH_EN_TO_MM[ h[:month_en] ] if h[:month_en]
|
|
252
|
+
h[ :month ] = MONTH_ES_TO_MM[ h[:month_es] ] if h[:month_es]
|
|
253
|
+
|
|
254
|
+
month = h[:month]
|
|
255
|
+
day = h[:day]
|
|
256
|
+
year = h[:year] || calc_year( month.to_i, day.to_i, opts ).to_s
|
|
257
|
+
|
|
258
|
+
hours = h[:hours] || '12' # default to 12:00 for HH:MM (hours:minutes)
|
|
259
|
+
minutes = h[:minutes] || '00'
|
|
260
|
+
|
|
261
|
+
value = '%d-%02d-%02d %02d:%02d' % [year.to_i, month.to_i, day.to_i, hours.to_i, minutes.to_i]
|
|
262
|
+
logger.debug " date: >#{value}<"
|
|
263
|
+
|
|
264
|
+
DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
end # class DateFinder
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
end # module SportDb
|
data/lib/sportdb/patterns.rb
CHANGED
data/lib/sportdb/utils_date.rb
CHANGED
|
@@ -8,19 +8,8 @@ module SportDb
|
|
|
8
8
|
line =~ /=>/
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def calculate_year( day, month, start_at )
|
|
12
|
-
if month >= start_at.month
|
|
13
|
-
# assume same year as start_at event (e.g. 2013 for 2013/14 season)
|
|
14
|
-
start_at.year
|
|
15
|
-
else
|
|
16
|
-
# assume year+1 as start_at event (e.g. 2014 for 2013/14 season)
|
|
17
|
-
start_at.year+1
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
11
|
|
|
22
12
|
def find_date!( line, opts={} )
|
|
23
|
-
|
|
24
13
|
## NB: lets us pass in start_at/end_at date (for event)
|
|
25
14
|
# for auto-complete year
|
|
26
15
|
|
|
@@ -28,201 +17,8 @@ module SportDb
|
|
|
28
17
|
# and return it
|
|
29
18
|
# NB: side effect - removes date from line string
|
|
30
19
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
regex_db = /\b(\d{4})-(\d{1,2})-(\d{1,2})\s+(\d{1,2}):(\d{2})\b/
|
|
34
|
-
|
|
35
|
-
# e.g. 2012-09-14 w/ implied hours (set to 12:00)
|
|
36
|
-
# nb: allow 2012-9-3 e.g. no leading zero required
|
|
37
|
-
regex_db2 = /\b(\d{4})-(\d{1,2})-(\d{1,2})\b/
|
|
38
|
-
|
|
39
|
-
# e.g. 14.09. 20:30 => DD.MM. HH:MM
|
|
40
|
-
# nb: allow 2.3.2012 e.g. no leading zero required
|
|
41
|
-
# nb: allow hour as 20.30 or 3.30 instead of 03.30
|
|
42
|
-
regex_de = /\b(\d{1,2})\.(\d{1,2})\.\s+(\d{1,2})[:.](\d{2})\b/
|
|
43
|
-
|
|
44
|
-
# e.g. 14.09.2012 20:30 => DD.MM.YYYY HH:MM
|
|
45
|
-
# nb: allow 2.3.2012 e.g. no leading zero required
|
|
46
|
-
# nb: allow hour as 20.30
|
|
47
|
-
regex_de2 = /\b(\d{1,2})\.(\d{1,2})\.(\d{4})\s+(\d{1,2})[:.](\d{2})\b/
|
|
48
|
-
|
|
49
|
-
# e.g. 14.09.2012 => DD.MM.YYYY w/ implied hours (set to 12:00)
|
|
50
|
-
regex_de3 = /\b(\d{1,2})\.(\d{1,2})\.(\d{4})\b/
|
|
51
|
-
|
|
52
|
-
# e.g. 14.09. => DD.MM. w/ implied year and implied hours (set to 12:00)
|
|
53
|
-
# note: allow end delimiter ] e.g. [Sa 12.01.] or end-of-string ($) too
|
|
54
|
-
# note: we use a lookahead for last part e.g. (?:\s+|$|[\]]) - do NOT cosume
|
|
55
|
-
regex_de4 = /\b(\d{1,2})\.(\d{1,2})\.(?=\s+|$|[\]])/ ## note: allow end-of-string/line too
|
|
56
|
-
|
|
57
|
-
# fix: !!!!
|
|
58
|
-
# date in [] will become [[DATE.DE4]] - when getting removed will keep ]!!!!
|
|
59
|
-
# fix: change regex to \[[A-Z0-9.]\] !!!!!! plus add unit test too!!!
|
|
60
|
-
#
|
|
61
|
-
# fix: use more lookahead for all required trailing spaces!!!!!
|
|
62
|
-
# fix: use <name capturing group> for month,day,year etc.!!!
|
|
63
|
-
|
|
64
|
-
# todo: make more generic for reuse
|
|
65
|
-
month_abbrev_en = 'Jan|Feb|March|Mar|April|Apr|May|June|Jun|July|Jul|Aug|Sept|Sep|Oct|Nov|Dec'
|
|
66
|
-
month_abbrev_en_to_i = {
|
|
67
|
-
'Jan' => 1,
|
|
68
|
-
'Feb' => 2,
|
|
69
|
-
'Mar' => 3, 'March' => 3,
|
|
70
|
-
'Apr' => 4, 'April' => 4,
|
|
71
|
-
'May' => 5,
|
|
72
|
-
'Jun' => 6, 'June' => 6,
|
|
73
|
-
'Jul' => 7, 'July' => 7,
|
|
74
|
-
'Aug' => 8,
|
|
75
|
-
'Sep' => 9, 'Sept' => 9,
|
|
76
|
-
'Oct' => 10,
|
|
77
|
-
'Nov' => 11,
|
|
78
|
-
'Dec' => 12 }
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
# e.g. 12 May 2013 14:00 => D|DD.MMM.YYYY H|HH:MM
|
|
82
|
-
regex_en = /\b(\d{1,2})\s(#{month_abbrev_en})\s(\d{4})\s+(\d{1,2}):(\d{2})\b/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
# e.g. Jun/12 14:00 w/ implied year H|HH:MM
|
|
86
|
-
regex_en2 = /\b(#{month_abbrev_en})\/(\d{1,2})\s+(\d{1,2}):(\d{2})\b/
|
|
87
|
-
|
|
88
|
-
# e.g. Jun/12 w/ implied year and implied hours (set to 12:00)
|
|
89
|
-
regex_en21 = /\b(#{month_abbrev_en})\/(\d{1,2})\b/
|
|
90
|
-
|
|
91
|
-
# todo/fix - add de and es too!!
|
|
92
|
-
# note: in Austria - Jänner - in Deutschland Januar allow both ??
|
|
93
|
-
month_abbrev_de = 'J[aä]n|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez'
|
|
94
|
-
|
|
95
|
-
month_abbrev_es = 'Enero|Ene|Feb|Marzo|Mar|Abril|Abr|Mayo|May|Junio|Jun|Julio|Jul|Agosto|Ago|Sept|Set|Sep|Oct|Nov|Dic'
|
|
96
|
-
month_abbrev_es_to_i = {
|
|
97
|
-
'Ene' => 1, 'Enero' => 1,
|
|
98
|
-
'Feb' => 2,
|
|
99
|
-
'Mar' => 3, 'Marzo' => 3,
|
|
100
|
-
'Abr' => 4, 'Abril' => 4,
|
|
101
|
-
'May' => 5, 'Mayo' => 5,
|
|
102
|
-
'Jun' => 6, 'Junio' => 6,
|
|
103
|
-
'Jul' => 7, 'Julio' => 7,
|
|
104
|
-
'Ago' => 8, 'Agosto' => 8,
|
|
105
|
-
'Sep' => 9, 'Set' => 9, 'Sept' => 9,
|
|
106
|
-
'Oct' => 10,
|
|
107
|
-
'Nov' => 11,
|
|
108
|
-
'Dic' => 12 }
|
|
109
|
-
|
|
110
|
-
# e.g. 12 Ene w/ implied year and implied hours (set to 12:00)
|
|
111
|
-
regex_es21 = /\b(\d{1,2})\s(#{month_abbrev_es})\b/
|
|
112
|
-
|
|
113
|
-
if line =~ regex_db
|
|
114
|
-
value = '%d-%02d-%02d %02d:%02d' % [$1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i]
|
|
115
|
-
logger.debug " date: >#{value}<"
|
|
116
|
-
|
|
117
|
-
## todo: lets you configure year
|
|
118
|
-
## and time zone (e.g. cet, eet, utc, etc.)
|
|
119
|
-
|
|
120
|
-
line.sub!( regex_db, '[DATE.DB]' )
|
|
121
|
-
|
|
122
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
123
|
-
elsif line =~ regex_db2
|
|
124
|
-
value = '%d-%02d-%02d 12:00' % [$1.to_i, $2.to_i, $3.to_i]
|
|
125
|
-
logger.debug " date: >#{value}<"
|
|
126
|
-
|
|
127
|
-
line.sub!( regex_db2, '[DATE.DB2]' )
|
|
128
|
-
|
|
129
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
130
|
-
elsif line =~ regex_de2
|
|
131
|
-
value = '%d-%02d-%02d %02d:%02d' % [$3.to_i, $2.to_i, $1.to_i, $4.to_i, $5.to_i]
|
|
132
|
-
logger.debug " date: >#{value}<"
|
|
133
|
-
|
|
134
|
-
## todo: lets you configure year
|
|
135
|
-
## and time zone (e.g. cet, eet, utc, etc.)
|
|
136
|
-
|
|
137
|
-
line.sub!( regex_de2, '[DATE.DE2]' )
|
|
138
|
-
|
|
139
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
140
|
-
elsif line =~ regex_de
|
|
141
|
-
|
|
142
|
-
year = calculate_year( $1.to_i, $2.to_i, opts[:start_at] )
|
|
143
|
-
|
|
144
|
-
value = '%d-%02d-%02d %02d:%02d' % [year, $2.to_i, $1.to_i, $3.to_i, $4.to_i]
|
|
145
|
-
logger.debug " date: >#{value}<"
|
|
146
|
-
|
|
147
|
-
## todo: lets you configure year
|
|
148
|
-
## and time zone (e.g. cet, eet, utc, etc.)
|
|
149
|
-
|
|
150
|
-
line.sub!( regex_de, '[DATE.DE]' )
|
|
151
|
-
|
|
152
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
153
|
-
elsif line =~ regex_de3
|
|
154
|
-
value = '%d-%02d-%02d 12:00' % [$3.to_i, $2.to_i, $1.to_i]
|
|
155
|
-
logger.debug " date: >#{value}<"
|
|
156
|
-
|
|
157
|
-
## todo: lets you configure year
|
|
158
|
-
## and time zone (e.g. cet, eet, utc, etc.)
|
|
159
|
-
|
|
160
|
-
line.sub!( regex_de3, '[DATE.DE3]' )
|
|
161
|
-
|
|
162
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
163
|
-
elsif line =~ regex_de4
|
|
164
|
-
|
|
165
|
-
year = calculate_year( $1.to_i, $2.to_i, opts[:start_at] )
|
|
166
|
-
|
|
167
|
-
value = '%d-%02d-%02d 12:00' % [year, $2.to_i, $1.to_i]
|
|
168
|
-
logger.debug " date: >#{value}<"
|
|
169
|
-
|
|
170
|
-
## todo: lets you configure year
|
|
171
|
-
## and time zone (e.g. cet, eet, utc, etc.)
|
|
172
|
-
|
|
173
|
-
### NOTE: needs a trailing space
|
|
174
|
-
# not if regex ends w/ whitespace e.g. /s+
|
|
175
|
-
# make sure sub! adds a space at the end
|
|
176
|
-
# e.g. '[DATE.DE4]' becomes '[DATE.DE4] '
|
|
177
|
-
|
|
178
|
-
line.sub!( regex_de4, '[DATE.DE4] ' )
|
|
179
|
-
|
|
180
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
181
|
-
elsif line =~ regex_en
|
|
182
|
-
value = '%d-%s-%02d %02d:%02d' % [$3.to_i, $2, $1.to_i, $4.to_i, $5.to_i]
|
|
183
|
-
logger.debug " date: >#{value}<"
|
|
184
|
-
|
|
185
|
-
line.sub!( regex_en, '[DATE.EN]' )
|
|
186
|
-
|
|
187
|
-
return DateTime.strptime( value, '%Y-%b-%d %H:%M' ) ## %b - abbreviated month name (e.g. Jan,Feb, etc.)
|
|
188
|
-
elsif line =~ regex_en2
|
|
189
|
-
day = $2.to_i
|
|
190
|
-
month = month_abbrev_en_to_i[ $1 ]
|
|
191
|
-
year = calculate_year( day, month, opts[:start_at] )
|
|
192
|
-
hours = $3.to_i
|
|
193
|
-
minutes = $4.to_i
|
|
194
|
-
|
|
195
|
-
value = '%d-%02d-%02d %02d:%02d' % [year, month, day, hours, minutes]
|
|
196
|
-
logger.debug " date: >#{value}<"
|
|
197
|
-
|
|
198
|
-
line.sub!( regex_en2, '[DATE.EN2] ' )
|
|
199
|
-
|
|
200
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
201
|
-
elsif line =~ regex_en21
|
|
202
|
-
day = $2.to_i
|
|
203
|
-
month = month_abbrev_en_to_i[ $1 ]
|
|
204
|
-
year = calculate_year( day, month, opts[:start_at] )
|
|
205
|
-
|
|
206
|
-
value = '%d-%02d-%02d 12:00' % [year, month, day]
|
|
207
|
-
logger.debug " date: >#{value}<"
|
|
208
|
-
|
|
209
|
-
line.sub!( regex_en21, '[DATE.EN21] ' )
|
|
210
|
-
|
|
211
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
212
|
-
elsif line =~ regex_es21
|
|
213
|
-
day = $1.to_i
|
|
214
|
-
month = month_abbrev_es_to_i[ $2 ]
|
|
215
|
-
year = calculate_year( day, month, opts[:start_at] )
|
|
216
|
-
|
|
217
|
-
value = '%d-%02d-%02d 12:00' % [year, month, day]
|
|
218
|
-
logger.debug " date: >#{value}<"
|
|
219
|
-
|
|
220
|
-
line.sub!( regex_es21, '[DATE.ES21] ' )
|
|
221
|
-
|
|
222
|
-
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
223
|
-
else
|
|
224
|
-
return nil
|
|
225
|
-
end
|
|
20
|
+
finder = DateFinder.new
|
|
21
|
+
finder.find!( line, opts )
|
|
226
22
|
end
|
|
227
23
|
|
|
228
24
|
end # module FixtureHelpers
|
data/lib/sportdb/version.rb
CHANGED
data/test/test_date.rb
CHANGED
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
|
+
###
|
|
4
|
+
# to run use
|
|
5
|
+
# ruby -I ./lib -I ./test test/test_date.rb
|
|
6
|
+
|
|
3
7
|
require 'helper'
|
|
4
8
|
|
|
5
9
|
class TestDate < MiniTest::Unit::TestCase
|
|
6
10
|
|
|
7
11
|
def test_date
|
|
12
|
+
start_at = DateTime.new( 2013, 1, 1 )
|
|
13
|
+
|
|
8
14
|
assert_datetime DateTime.new( 2013, 1, 19, 22 ), parse_date( '19.01.2013 22.00' )
|
|
9
15
|
assert_datetime DateTime.new( 2013, 1, 21, 21, 30 ), parse_date( '21.01.2013 21.30' )
|
|
10
16
|
|
|
11
17
|
assert_date DateTime.new( 2013, 1, 26 ), parse_date( '26.01.2013' )
|
|
18
|
+
assert_date DateTime.new( 2013, 1, 26 ), parse_date( '[26.01.2013]' )
|
|
19
|
+
|
|
20
|
+
assert_datetime DateTime.new( 2013, 1, 21, 12, 00 ), parse_date( '[21.1.]', start_at: start_at )
|
|
12
21
|
end
|
|
13
22
|
|
|
23
|
+
|
|
14
24
|
def test_date_en
|
|
15
|
-
start_at = DateTime.new( 2013, 1,
|
|
25
|
+
start_at = DateTime.new( 2013, 1, 1 )
|
|
26
|
+
|
|
27
|
+
assert_date DateTime.new( 2011, 1, 26 ), parse_date( 'Jan/26 2011', start_at: start_at )
|
|
28
|
+
assert_datetime DateTime.new( 2011, 1, 26, 12, 00 ), parse_date( 'Jan/26 2011', start_at: start_at )
|
|
16
29
|
|
|
17
30
|
assert_date DateTime.new( 2013, 1, 26 ), parse_date( 'Jan/26', start_at: start_at )
|
|
18
31
|
assert_datetime DateTime.new( 2013, 1, 26, 12, 00 ), parse_date( 'Jan/26', start_at: start_at )
|
|
@@ -30,7 +43,7 @@ private
|
|
|
30
43
|
assert_equal exp.month, act.month
|
|
31
44
|
assert_equal exp.day, act.day
|
|
32
45
|
end
|
|
33
|
-
|
|
46
|
+
|
|
34
47
|
def assert_time( exp, act )
|
|
35
48
|
assert_equal exp.hour, act.hour
|
|
36
49
|
assert_equal exp.min, act.min
|
|
@@ -41,15 +54,11 @@ private
|
|
|
41
54
|
assert_time( exp, act )
|
|
42
55
|
end
|
|
43
56
|
|
|
44
|
-
class Reader
|
|
45
|
-
include LogUtils::Logging # add logger
|
|
46
|
-
include SportDb::FixtureHelpers
|
|
47
|
-
end
|
|
48
57
|
|
|
49
58
|
def parse_date( line, opts={} )
|
|
50
59
|
# e.g. lets you pass in opts[:start_at] ???
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
finder = SportDb::DateFinder.new
|
|
61
|
+
finder.find!( line, opts )
|
|
53
62
|
end
|
|
54
63
|
|
|
55
64
|
end # class TestScores
|
metadata
CHANGED
|
@@ -1,155 +1,126 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sportdb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.8.
|
|
4
|
+
version: 1.8.16
|
|
5
|
+
prerelease:
|
|
5
6
|
platform: ruby
|
|
6
7
|
authors:
|
|
7
8
|
- Gerald Bauer
|
|
8
9
|
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date: 2014-04-
|
|
12
|
+
date: 2014-04-25 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: props
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirement: &72538960 !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
16
18
|
requirements:
|
|
17
19
|
- - ! '>='
|
|
18
20
|
- !ruby/object:Gem::Version
|
|
19
21
|
version: '0'
|
|
20
22
|
type: :runtime
|
|
21
23
|
prerelease: false
|
|
22
|
-
version_requirements:
|
|
23
|
-
requirements:
|
|
24
|
-
- - ! '>='
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
24
|
+
version_requirements: *72538960
|
|
27
25
|
- !ruby/object:Gem::Dependency
|
|
28
26
|
name: logutils
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
27
|
+
requirement: &72537120 !ruby/object:Gem::Requirement
|
|
28
|
+
none: false
|
|
30
29
|
requirements:
|
|
31
30
|
- - ! '>='
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
32
|
version: '0'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
|
-
version_requirements:
|
|
37
|
-
requirements:
|
|
38
|
-
- - ! '>='
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
35
|
+
version_requirements: *72537120
|
|
41
36
|
- !ruby/object:Gem::Dependency
|
|
42
37
|
name: textutils
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
38
|
+
requirement: &72529170 !ruby/object:Gem::Requirement
|
|
39
|
+
none: false
|
|
44
40
|
requirements:
|
|
45
41
|
- - ! '>='
|
|
46
42
|
- !ruby/object:Gem::Version
|
|
47
43
|
version: '0'
|
|
48
44
|
type: :runtime
|
|
49
45
|
prerelease: false
|
|
50
|
-
version_requirements:
|
|
51
|
-
requirements:
|
|
52
|
-
- - ! '>='
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
46
|
+
version_requirements: *72529170
|
|
55
47
|
- !ruby/object:Gem::Dependency
|
|
56
48
|
name: worlddb
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
requirement: &72528110 !ruby/object:Gem::Requirement
|
|
50
|
+
none: false
|
|
58
51
|
requirements:
|
|
59
52
|
- - ! '>='
|
|
60
53
|
- !ruby/object:Gem::Version
|
|
61
54
|
version: 2.0.2
|
|
62
55
|
type: :runtime
|
|
63
56
|
prerelease: false
|
|
64
|
-
version_requirements:
|
|
65
|
-
requirements:
|
|
66
|
-
- - ! '>='
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: 2.0.2
|
|
57
|
+
version_requirements: *72528110
|
|
69
58
|
- !ruby/object:Gem::Dependency
|
|
70
59
|
name: tagutils
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
60
|
+
requirement: &72527770 !ruby/object:Gem::Requirement
|
|
61
|
+
none: false
|
|
72
62
|
requirements:
|
|
73
63
|
- - ! '>='
|
|
74
64
|
- !ruby/object:Gem::Version
|
|
75
65
|
version: '0'
|
|
76
66
|
type: :runtime
|
|
77
67
|
prerelease: false
|
|
78
|
-
version_requirements:
|
|
79
|
-
requirements:
|
|
80
|
-
- - ! '>='
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
68
|
+
version_requirements: *72527770
|
|
83
69
|
- !ruby/object:Gem::Dependency
|
|
84
70
|
name: fetcher
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirement: &72527230 !ruby/object:Gem::Requirement
|
|
72
|
+
none: false
|
|
86
73
|
requirements:
|
|
87
74
|
- - ! '>='
|
|
88
75
|
- !ruby/object:Gem::Version
|
|
89
76
|
version: '0.3'
|
|
90
77
|
type: :runtime
|
|
91
78
|
prerelease: false
|
|
92
|
-
version_requirements:
|
|
93
|
-
requirements:
|
|
94
|
-
- - ! '>='
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0.3'
|
|
79
|
+
version_requirements: *72527230
|
|
97
80
|
- !ruby/object:Gem::Dependency
|
|
98
81
|
name: gli
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
82
|
+
requirement: &72526900 !ruby/object:Gem::Requirement
|
|
83
|
+
none: false
|
|
100
84
|
requirements:
|
|
101
85
|
- - ! '>='
|
|
102
86
|
- !ruby/object:Gem::Version
|
|
103
87
|
version: 2.5.6
|
|
104
88
|
type: :runtime
|
|
105
89
|
prerelease: false
|
|
106
|
-
version_requirements:
|
|
107
|
-
requirements:
|
|
108
|
-
- - ! '>='
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: 2.5.6
|
|
90
|
+
version_requirements: *72526900
|
|
111
91
|
- !ruby/object:Gem::Dependency
|
|
112
92
|
name: activerecord
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
93
|
+
requirement: &72526650 !ruby/object:Gem::Requirement
|
|
94
|
+
none: false
|
|
114
95
|
requirements:
|
|
115
96
|
- - ! '>='
|
|
116
97
|
- !ruby/object:Gem::Version
|
|
117
98
|
version: '0'
|
|
118
99
|
type: :runtime
|
|
119
100
|
prerelease: false
|
|
120
|
-
version_requirements:
|
|
121
|
-
requirements:
|
|
122
|
-
- - ! '>='
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '0'
|
|
101
|
+
version_requirements: *72526650
|
|
125
102
|
- !ruby/object:Gem::Dependency
|
|
126
103
|
name: rdoc
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
104
|
+
requirement: &72526110 !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
128
106
|
requirements:
|
|
129
107
|
- - ~>
|
|
130
108
|
- !ruby/object:Gem::Version
|
|
131
109
|
version: '4.0'
|
|
132
110
|
type: :development
|
|
133
111
|
prerelease: false
|
|
134
|
-
version_requirements:
|
|
135
|
-
requirements:
|
|
136
|
-
- - ~>
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '4.0'
|
|
112
|
+
version_requirements: *72526110
|
|
139
113
|
- !ruby/object:Gem::Dependency
|
|
140
114
|
name: hoe
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
115
|
+
requirement: &72524490 !ruby/object:Gem::Requirement
|
|
116
|
+
none: false
|
|
142
117
|
requirements:
|
|
143
118
|
- - ~>
|
|
144
119
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '3.
|
|
120
|
+
version: '3.11'
|
|
146
121
|
type: :development
|
|
147
122
|
prerelease: false
|
|
148
|
-
version_requirements:
|
|
149
|
-
requirements:
|
|
150
|
-
- - ~>
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '3.10'
|
|
123
|
+
version_requirements: *72524490
|
|
153
124
|
description: sportdb - sport.db command line tool
|
|
154
125
|
email: opensport@googlegroups.com
|
|
155
126
|
executables:
|
|
@@ -181,6 +152,7 @@ files:
|
|
|
181
152
|
- lib/sportdb/data/keys.rb
|
|
182
153
|
- lib/sportdb/data/models.rb
|
|
183
154
|
- lib/sportdb/deleter.rb
|
|
155
|
+
- lib/sportdb/finders/date.rb
|
|
184
156
|
- lib/sportdb/lang.rb
|
|
185
157
|
- lib/sportdb/matcher.rb
|
|
186
158
|
- lib/sportdb/models/badge.rb
|
|
@@ -288,7 +260,6 @@ files:
|
|
|
288
260
|
homepage: https://github.com/geraldb/sport.db.ruby
|
|
289
261
|
licenses:
|
|
290
262
|
- Public Domain
|
|
291
|
-
metadata: {}
|
|
292
263
|
post_install_message: ! '******************************************************************************
|
|
293
264
|
|
|
294
265
|
|
|
@@ -306,29 +277,31 @@ rdoc_options:
|
|
|
306
277
|
require_paths:
|
|
307
278
|
- lib
|
|
308
279
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
280
|
+
none: false
|
|
309
281
|
requirements:
|
|
310
282
|
- - ! '>='
|
|
311
283
|
- !ruby/object:Gem::Version
|
|
312
284
|
version: 1.9.2
|
|
313
285
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
286
|
+
none: false
|
|
314
287
|
requirements:
|
|
315
288
|
- - ! '>='
|
|
316
289
|
- !ruby/object:Gem::Version
|
|
317
290
|
version: '0'
|
|
318
291
|
requirements: []
|
|
319
292
|
rubyforge_project:
|
|
320
|
-
rubygems_version:
|
|
293
|
+
rubygems_version: 1.8.17
|
|
321
294
|
signing_key:
|
|
322
|
-
specification_version:
|
|
295
|
+
specification_version: 3
|
|
323
296
|
summary: sportdb - sport.db command line tool
|
|
324
297
|
test_files:
|
|
325
|
-
- test/test_changes.rb
|
|
326
|
-
- test/test_cursor.rb
|
|
327
298
|
- test/test_date.rb
|
|
328
299
|
- test/test_lang.rb
|
|
329
|
-
- test/
|
|
330
|
-
- test/test_round_def.rb
|
|
331
|
-
- test/test_round_header.rb
|
|
300
|
+
- test/test_cursor.rb
|
|
332
301
|
- test/test_scores.rb
|
|
333
|
-
- test/test_utils.rb
|
|
334
302
|
- test/test_winner.rb
|
|
303
|
+
- test/test_round_def.rb
|
|
304
|
+
- test/test_utils.rb
|
|
305
|
+
- test/test_round_header.rb
|
|
306
|
+
- test/test_reader.rb
|
|
307
|
+
- test/test_changes.rb
|
checksums.yaml
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
SHA1:
|
|
3
|
-
metadata.gz: 4459c37fc4ca396f49c2c42a8a0dbb671c1eb7e9
|
|
4
|
-
data.tar.gz: de9e5e62f8de5fb9b45a78534e43368d5404b70f
|
|
5
|
-
SHA512:
|
|
6
|
-
metadata.gz: ca0972bd7ecc76d8d2aaf7ba8b12690b8145b68c80b64c630ae446a47e622cba84bcae477e9b6bacd89b6ff856716bbd3db00a0a11ce8f472e8b72d1eadd736f
|
|
7
|
-
data.tar.gz: 7aa791e995880106aa051855db62fa92cb63bd57671f1af0f835a457055c11bf12ec9fa0b26ff61cf9f6ffc1655678d9dbe685660939d72db7a45dba7472c680
|