event_nlp 0.5.4 → 0.6.0

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/event_nlp.rb +189 -173
  4. data.tar.gz.sig +0 -0
  5. metadata +35 -34
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f046c9ebbe0ea0e05075a6eaa38d6b5cf053d5072fc6a0ea7ec93d695f5ea449
4
- data.tar.gz: 51912d0dee9bf7c638ddb4b10946ad0f5ce560ed95398ab12a27ea417ae79391
3
+ metadata.gz: 23d131080f1c648f569969cdd3af18a8ee585978b832c0822d47604a14968236
4
+ data.tar.gz: 173cff064a42e901bfb055f29f08d4d1273c5b0d7509ce1af54bb708593b3b23
5
5
  SHA512:
6
- metadata.gz: 5e093f418335b13bd36e811176d837caa7ad399d27f09f2d6f06cc057a08a91fd9c84bf19d6d7d8403b136f88ee37d99ee262c60df1285f96a3d205da83fc571
7
- data.tar.gz: 1bae302d138066d0913dc3cc7e272d233421faf44a06846e39742c5f09d4fc3cbf0ebd128ac2c002d3e030f8a99ed8bcb94a740ff617cb2eae8697cc905afe49
6
+ metadata.gz: f0c92ec588966b972c2fc2d0816ca066d4c06ea98230d8d1fb811a06a7811d283d3626fd36f5229af2b11ebd5ecf4dcf69ee092af538e872ce3aa9ab8f519b88
7
+ data.tar.gz: bbb4f4a06419da51042a791dbc9fdbabd77c874c911f4c46ba1463e67162474804ad4fa1fc25b7297d448d7cd2bc7a70bae3a7e604657285231cd213a9c4032e
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/event_nlp.rb CHANGED
@@ -12,7 +12,7 @@ module Ordinals
12
12
 
13
13
  refine Integer do
14
14
  def ordinal
15
- self.to_s + ( (10...20).include?(self) ? 'th' :
15
+ self.to_s + ( (10...20).include?(self) ? 'th' :
16
16
  %w{ th st nd rd th th th th th th }[self % 10] )
17
17
  end
18
18
  end
@@ -23,99 +23,114 @@ class EventNlp
23
23
  include AppRoutes
24
24
  using Ordinals
25
25
  using ColouredText
26
-
26
+
27
27
  attr_accessor :params
28
-
28
+
29
29
  def initialize(now=Time.now, params: {}, debug: false)
30
-
30
+
31
31
  super()
32
-
32
+
33
33
  @now = now
34
34
  @params = params
35
35
  expressions(@params)
36
36
  @debug = debug
37
37
 
38
38
  end
39
-
39
+
40
40
  def parse(s)
41
41
 
42
42
  @params[:input] = s
43
43
  r = run_route(s)
44
44
 
45
45
  return unless r.is_a? Hash
46
-
46
+
47
47
  OpenStruct.new({input: s}.merge r)
48
-
49
- end
48
+
49
+ end
50
50
 
51
51
  private
52
52
 
53
- def expressions(params)
53
+ def expressions(params)
54
54
 
55
55
  starting = /(?:\(?\s*starting (\d+\w{2} \w+\s*\w*)(?: until (.*))?\s*\))?/
56
- weekdays2 = (Date::DAYNAMES + Date::ABBR_DAYNAMES).join('|').downcase
56
+ weekdays2 = (Date::DAYNAMES + Date::ABBR_DAYNAMES).join('|').downcase
57
57
  weekdays = "(%s)" % weekdays2
58
58
  months = "(%s)" % (Date::MONTHNAMES[1..-1] + Date::ABBR_MONTHNAMES[1..-1])\
59
59
  .join('|').downcase
60
60
  times = /(?: *(?:at |@ |from )?(\d+(?::\d+)?(?:[ap]m|\b)) *)/
61
61
  times2 = /\d+(?::\d+)?[ap]m-\d+(?::\d+)?[ap]m|\d+(?::\d+)?-\d+(?::\d+)?/
62
- times3 = /(\d+(?::\d+)?[ap]m-\d+(?::\d+)?[ap]m|\d+(?::\d+)?-\d+(?::\d+)?)/
62
+ times3 = /(\d+(?::\d+)?[ap]m-\d+(?::\d+)?[ap]m|\d+(?::\d+)?-\d+(?::\d+)?)/
63
63
  days = /(\d+(?:st|nd|rd|th))/
64
64
  periods = /day|week|month/
65
-
65
+
66
66
  #weekdays = Date::DAYNAMES.join('|').downcase
67
67
  #
68
-
68
+
69
69
  #times = /(?: *at )?\d[ap]m/
70
70
 
71
- # e.g. electricity bill on the 28th of every month
71
+ # e.g. electricity bill on the 28th of every month
72
72
 
73
73
  get /(.*) on the (#{days}) of every (#{periods})/ do |title, day, recurring|
74
74
 
75
75
 
76
76
  raw_d = Chronic.parse(day)
77
-
77
+
78
78
  # if the date is less than now then increment it by a month
79
79
  d = raw_d < @now ? (raw_d.to_date >> 1).to_time : raw_d
80
-
81
-
80
+
81
+
82
82
  if @debug then
83
83
  puts [0.1, title, recurring, d].inspect.debug
84
84
  end
85
-
86
- {title: title, recurring: recurring, date: d}
87
-
85
+
86
+ {title: title, recurring: recurring, date: d}
87
+
88
88
  end
89
-
90
89
 
91
- get /^(.*)\s+(every \d\w+ \w+#{times})\s*#{starting}/ do \
90
+
91
+ get /^(.*)\s+(every \d\w+ \w+#{times}\s*#{starting})/ do \
92
92
  |title, recurring, time, raw_date, end_date|
93
93
 
94
- input = params[:input].clone
94
+ input = params[:input].clone
95
95
  d = Chronic.parse(raw_date + ' ' + time.to_s)
96
-
96
+
97
+ if @debug then
98
+ puts 'e300'
99
+ puts 'd: ' + d.inspect
100
+ puts 'recurring: ' + recurring.inspect
101
+ end
102
+
97
103
  if recurring =~ /day|week/ then
98
104
 
99
105
  if d < @now then
100
106
 
101
- new_date = CronFormat.new(ChronicCron.new(recurring)\
102
- .to_expression, d).to_time
107
+ cc = ChronicCron.new(recurring, d)
108
+ exp = cc.to_expression
109
+ puts 'exp: ' + exp.inspect if @debug
110
+
111
+ cf = CronFormat.new(exp, d)
112
+ cf.next until cf.to_time > @now
113
+
114
+ new_date = cf.to_time
115
+ puts 'new_date: ' + new_date.inspect if @debug
116
+
103
117
  input.gsub!(raw_date, new_date\
104
- .strftime("#{new_date.day.ordinal} %b %Y"))
118
+ .strftime("#{new_date.day.ordinal} %b %Y"))
105
119
  d = new_date
106
-
120
+
107
121
  end
108
122
  end
109
-
123
+
110
124
  if @debug then
111
- puts ["0.2".highlight, input, title, recurring, time, raw_date, end_date].inspect.debug
125
+ puts 'd: ' + d.inspect
126
+ puts ["0.2", input, title, recurring, time, raw_date, end_date].inspect.debug
112
127
  end
113
-
114
- {input: input, title: title, recurring: recurring, date: d,
115
- end_date: end_date}
116
-
128
+
129
+ {input: input, title: title, recurring: recurring, date: d,
130
+ end_date: end_date}
131
+
117
132
  end
118
-
133
+
119
134
  # e.g. some event 1st Monday of every month (starting 3rd Jul 2017)
120
135
 
121
136
  get /^(.*)\s+(\d(?:st|nd|rd|th) \w+ of every \w+(?: at (\d+[ap]m) )?)\s*#{starting}/ do \
@@ -123,55 +138,56 @@ class EventNlp
123
138
 
124
139
  input = params[:input].clone
125
140
  d = Chronic.parse(raw_date)
126
-
127
- if recurring =~ /day|week|month/ then
128
-
141
+
142
+ if recurring =~ /day|week|month/ then
143
+
129
144
  if d < @now then
130
145
 
131
146
  new_date = CronFormat.new(ChronicCron.new(recurring)\
132
147
  .to_expression, d).to_time
133
148
  input.gsub!(raw_date, new_date\
134
- .strftime("#{new_date.day.ordinal} %b %Y"))
149
+ .strftime("#{new_date.day.ordinal} %b %Y"))
135
150
  d = new_date
136
151
  else
137
152
  d = ChronicCron.new(recurring, d.to_date.to_time).to_time
138
153
  end
139
154
  end
140
-
155
+
141
156
  puts ['0.3'.highlight, title, recurring, time, raw_date, end_date].inspect.debug if @debug
142
- {input: input, title: title, recurring: recurring, date: d, end_date:
157
+ {input: input, title: title, recurring: recurring, date: d, end_date:
143
158
  end_date}
144
-
145
- end
159
+
160
+ end
146
161
 
147
162
  # some event every 2 weeks
148
163
  # some event every 2 weeks at 6am starting from 14th Jan
149
164
  # some event every 2 weeks at 6am starting from 18th Feb until 28th Oct
150
165
  # some event every 2nd Monday (starting 7th Nov 2016)
151
- # some event every 2nd Monday (starting 7th Nov until 3rd Dec)
166
+ # some event every 2nd Monday (starting 7th Nov until 3rd Dec)
152
167
  # some event every 2 weeks (starting 02/11/17)
153
168
  # some event every Wednesday 1pm-4pm
154
169
  #
155
170
  get /^(.*)(every .*)/ do |title, recurring|
156
171
 
157
172
  input = params[:input].clone
173
+ puts 'recurring: ' + recurring.inspect if @debug
158
174
  raw_start_date = recurring[/(?<=starting )[^\)]+/]
159
-
175
+
160
176
  d = if raw_start_date then
161
- start_date = Chronic.parse(raw_start_date, now: @now - 1,
177
+ start_date = Chronic.parse(raw_start_date, now: @now - 1,
162
178
  :endian_precedence => :little)
163
179
 
164
180
  puts ('recurring: ' + recurring.inspect).debug if @debug
165
181
  puts ('start_date: ' + start_date.inspect).debug if @debug
166
-
182
+
167
183
  if @now > start_date then
168
184
  exp = ChronicCron.new(recurring, start_date, debug: @debug).to_expression
169
185
  puts 'exp: ' + exp.inspect if @debug
170
-
186
+
171
187
  cf = CronFormat.new(exp, start_date, debug: @debug)
172
188
  puts ('cf.to_time: ' + cf.to_time.inspect).debug if @debug
173
189
  cf.next until cf.to_time > start_date
174
-
190
+
175
191
  new_date = cf.to_time
176
192
  input.gsub!(/(?<=starting )[^\)]+/, new_date\
177
193
  .strftime("#{new_date.day.ordinal} %b %Y"))
@@ -180,208 +196,208 @@ class EventNlp
180
196
  else
181
197
  start_date
182
198
  end
183
-
199
+
184
200
  else
185
201
  exp = ChronicCron.new(recurring).to_expression
186
202
  cf = CronFormat.new(exp, @now)
187
203
  cf.to_time
188
204
  end
189
-
190
205
 
191
-
206
+
207
+
192
208
  if recurring =~ /-/ then
193
- end_date = Chronic.parse d.to_date.to_s + ' ' +
194
- recurring[/(?<=-)\d+(?::\d+)?(?:[ap]m)?/]
209
+ end_date = Chronic.parse d.to_date.to_s + ' ' +
210
+ recurring[/(?<=-)\d+(?::\d+)?(?:[ap]m)?/]
195
211
  end
196
-
212
+
197
213
  puts ['0.5'.highlight, title, recurring, d].join("\n").debug if @debug
198
- {input: input, title: title.rstrip, recurring: recurring,
214
+ {input: input, title: title.rstrip, recurring: recurring,
199
215
  date: d, end_date: end_date }
200
-
201
- end
202
-
216
+
217
+ end
218
+
203
219
  # some meeting 3rd thursday of the month at 7:30pm
204
220
  # some meeting First thursday of the month at 7:30pm
205
- get /(.*)\s+(\w+ \w+day of (?:the|every) month at .*)/ do
221
+ get /(.*)\s+(\w+ \w+day of (?:the|every) month at .*)/ do
206
222
  |title, recurring|
207
223
 
208
224
  puts ['1'.highlight, title, recurring].inspect.debug if @debug
209
225
  { title: title, recurring: recurring }
210
226
 
211
227
  end
212
-
213
-
228
+
229
+
214
230
  # 7th Oct Euston Station (meet at Timothy's house at 7pm)
215
231
  get /^(\d(?:st|nd|rd|th) \w+) *(.*)\s+at\s+(\w+)/i do \
216
232
  |raw_day, title, time|
217
-
233
+
218
234
  d = Chronic.parse(raw_day + ' ' + time)
219
-
235
+
220
236
  puts ['1.5'.highlight, title, raw_day, time].inspect.debug if @debug
221
237
  { title: title, date: d }
222
-
223
- end
238
+
239
+ end
224
240
 
225
241
  # some event Wednesday
226
242
  # some event Wednesday 11am
227
-
243
+
228
244
  relative_day = '|today|tomorrow|tonight'
229
245
  get /^(.*)\s+(#{weekdays2+relative_day}\b)(?: \(([^\)]+)\)) (at \d{1,2}(?::\d{2})?(?:[ap]m)?)/i \
230
246
  do |title, raw_date, date2, time2|
231
247
  puts ('time2: ' + time2.inspect).debug if @debug
232
248
  puts ('date2: ' + date2).debug if @debug
233
249
  puts ('raw_date: ' + raw_date).debug if @debug
234
-
250
+
235
251
  d = if date2 then
236
252
  Chronic.parse(date2 + ' '+ time2.to_s)
237
253
  else
238
254
  Chronic.parse(raw_date + ' '+ time2)
239
255
  end
240
-
256
+
241
257
  puts ['4'.highlight, title, raw_date, date2, time2].inspect.debug if @debug
242
258
  {title: title, date: d }
243
-
259
+
244
260
  end
245
-
261
+
246
262
  # Group meeting Red Hall 2pm-4pm on Monday (4th Dec 2017)
247
263
  get /^(.*)\s+(#{times2})(?: on) +#{weekdays}\b(?: \(([^\)]+)\))?/i \
248
264
  do |title, xtimes, raw_day, actual_date|
249
-
265
+
250
266
  if @debug then
251
267
  puts ('actual_date: ' + actual_date.inspect).debug
252
268
  puts ('raw_day: ' + raw_day.inspect).debug
253
269
  puts ('xtimes: ' + xtimes.inspect).debug
254
270
  end
255
-
271
+
256
272
  input = params[:input].clone
257
-
273
+
258
274
  if actual_date then
259
275
  d = Chronic.parse actual_date
260
276
  else
261
- d = Chronic.parse(raw_day)
277
+ d = Chronic.parse(raw_day)
262
278
  input.sub!(/#{weekdays}\b/i,
263
- %Q(#{raw_day} (#{d.strftime("#{d.day.ordinal} %b %Y")})))
279
+ %Q(#{raw_day} (#{d.strftime("#{d.day.ordinal} %b %Y")})))
264
280
  end
265
281
 
266
282
  t1, t2 = xtimes.split(/-/,2)
267
-
283
+
268
284
  puts ('d: ' + d.inspect).debug if @debug
269
285
 
270
286
  d1, d2 = [t1, t2].map {|t| Chronic.parse([d.to_date.to_s, t].join(' ')) }
271
-
287
+
272
288
  puts ['4.65'.highlight, input, title, raw_day, d1, d2].inspect.debug if @debug
273
-
289
+
274
290
  {input: input, title: title, date: d1, end_date: d2 }
275
-
276
- end
277
-
291
+
292
+ end
293
+
278
294
  # hall 2 friday at 11am
279
295
 
280
296
  get /^(.*)\s+#{weekdays}\b(?: \(([^\)]+)\))?(#{times})?/i \
281
297
  do |title, raw_day, actual_date, time|
282
-
298
+
283
299
  if @debug then
284
300
  puts ('actual_date: ' + actual_date.inspect).debug
285
301
  puts ('raw_day: ' + raw_day.inspect).debug
286
302
  puts ('time: ' + time.inspect).debug
287
303
  end
288
-
304
+
289
305
  input = params[:input].clone
290
-
306
+
291
307
  if actual_date then
292
308
  d = Chronic.parse(raw_day + ' ' + time.to_s)
293
309
  else
294
- d = Chronic.parse(raw_day + ' ' + time.to_s)
310
+ d = Chronic.parse(raw_day + ' ' + time.to_s)
295
311
  input.sub!(/#{weekdays}/i,
296
- %Q(#{raw_day} (#{d.strftime("#{d.day.ordinal} %b %Y")})))
312
+ %Q(#{raw_day} (#{d.strftime("#{d.day.ordinal} %b %Y")})))
297
313
  end
298
-
314
+
299
315
  puts ('d: ' + d.inspect).debug if @debug
300
-
316
+
301
317
  puts [1.7, input, title, raw_day].inspect.debug if @debug
302
-
318
+
303
319
  {input: input, title: title, date: d }
304
-
305
- end
306
-
307
-
320
+
321
+ end
322
+
323
+
308
324
  # e.g. 21/05/2017 Forum meetup at Roundpeg from 2pm
309
- get /^(\d+\/\d+\/\d+)\s+(.*)(?: from|at)\s+(\d+[ap]m)/ do
325
+ get /^(\d+\/\d+\/\d+)\s+(.*)(?: from|at)\s+(\d+[ap]m)/ do
310
326
  |raw_date, title, raw_time|
311
-
312
- d = Chronic.parse(raw_date + ' ' +
327
+
328
+ d = Chronic.parse(raw_date + ' ' +
313
329
  raw_time, :endian_precedence => :little)
314
- recurring = nil
315
-
330
+ recurring = nil
331
+
316
332
  puts [3, title, raw_date].inspect.debug if @debug
317
333
  { title: title, date: d }
318
- end
319
-
334
+ end
335
+
320
336
  # friday hall 2 11am until 12am
321
337
  get /^#{weekdays}\s+(.*)\s+#{times} until #{times}$/i do \
322
338
  |raw_day, title, start_time, end_time|
323
-
339
+
324
340
  venue = title[/^at +(.*)/,1]
325
341
  d = Chronic.parse(raw_day + ' ' + start_time)
326
342
  d2 = Chronic.parse(raw_day + ' ' + end_time)
327
-
343
+
328
344
  puts ['1.44.3', title, raw_day].inspect.debug if @debug
329
345
  { title: title, date: d, end_date: d2, venue: venue }
330
-
331
- end
332
-
346
+
347
+ end
348
+
333
349
  # friday hall 2 11am
334
350
  get /^#{weekdays}\b\s+(.*)\s+(\d+(?::\d{2})?[ap]m)$/i do \
335
351
  |raw_day, title, time|
336
-
352
+
337
353
  puts [raw_day, title, time].inspect if @debug
338
354
  venue = title[/^at +(.*)/,1]
339
355
  d = Chronic.parse(raw_day + ' ' + time)
340
-
356
+
341
357
  puts [1.44, title, raw_day].inspect.debug if @debug
342
358
  { title: title, date: d, venue: venue }
343
-
344
- end
359
+
360
+ end
345
361
 
346
362
  # Tuesday 10th July hall 2 at 11am
347
363
  get /#{weekdays}\b\s+#{days}\s+#{months}\s+(?:at )?(.*)\s+at\s+(#{times})/i \
348
364
  do |wday, day, month, title, time|
349
-
365
+
350
366
  d = Chronic.parse([day, month, time].join(' '))
351
-
367
+
352
368
  puts ['1.44.5', day, month, title].inspect.debug if @debug
353
369
  { title: title, date: d }
354
-
355
- end
356
-
357
-
358
-
359
-
370
+
371
+ end
372
+
373
+
374
+
375
+
360
376
  # 27-Mar@1436 some important day
361
377
  # 25/07/2017 11pm some important day
362
378
  #
363
379
  get /^(\d+\/\d+\/\d+)\s*(\d+(?:\:\d+)?[ap]m)?\s+([^\*]+)(\*)?/ \
364
380
  do |raw_date, time, title, annualar|
365
381
 
366
- d = Chronic.parse(raw_date + ' ' + time.to_s,
382
+ d = Chronic.parse(raw_date + ' ' + time.to_s,
367
383
  :endian_precedence => :little)
368
384
  recurring = nil
369
-
385
+
370
386
  if annualar then
371
-
387
+
372
388
  recurring = 'yearly'
373
389
  if d < @now then
374
- d = Chronic.parse(raw_date, now: Time.local(@now.year + 1, 1, 1))
390
+ d = Chronic.parse(raw_date, now: Time.local(@now.year + 1, 1, 1))
375
391
  end
376
392
  end
377
-
378
-
393
+
394
+
379
395
  puts [3, title, raw_date, time].inspect.debug if @debug
380
396
  { title: title, date: d, recurring: recurring }
381
397
  end
382
398
 
383
399
 
384
-
400
+
385
401
  # Some event (10 Woodhouse Lane) 30th Nov from 9:15-17:00
386
402
 
387
403
  get /^(.*) #{days} #{months}(?: from)? (#{times2})/i do \
@@ -396,7 +412,7 @@ class EventNlp
396
412
 
397
413
  { title: title, date: d1, end_date: d2 }
398
414
  end
399
-
415
+
400
416
  # Some event (10 Woodhouse Lane) 30th Nov from 9:15-17:00
401
417
 
402
418
  get /^#{weekdays}\b #{months} #{days} #{times3} (.*)/i do \
@@ -411,7 +427,7 @@ class EventNlp
411
427
  puts [4.55, title, d1, d2].inspect.debug if @debug
412
428
 
413
429
  { title: title, date: d1, end_date: d2 }
414
- end
430
+ end
415
431
 
416
432
  # e.g. Wednesday 30th Nov at 9:15 10 Woodhouse Lane
417
433
 
@@ -423,8 +439,8 @@ class EventNlp
423
439
  puts [4.6, title, d1].inspect.debug if @debug
424
440
 
425
441
  { title: title, date: d1 }
426
- end
427
-
442
+ end
443
+
428
444
  # Some event (10 Woodhouse Lane) 30th Nov at 9:15-
429
445
 
430
446
  get /^(.*) #{days} #{months}(?: at)? (#{times})/i do \
@@ -441,73 +457,73 @@ class EventNlp
441
457
  # hall 2 at 11am
442
458
  #
443
459
  get /(.*)\s+at\s+(#{times})/i do |title, time|
444
-
460
+
445
461
  d = Chronic.parse(time)
446
-
462
+
447
463
  puts [1.45, title].inspect.debug if @debug
448
464
  { title: title, date: d }
449
-
450
- end
451
-
452
-
465
+
466
+ end
467
+
468
+
453
469
  # Council Tax on the last day of the month
454
470
  #
455
471
  get /^(.*) (?:o[nf] the)\s*last day of the month/i do |title|
456
-
472
+
457
473
  td = @now.to_date
458
474
  d = Date.civil(td.year, td.month, -1).to_time
459
-
475
+
460
476
  puts [5, title].inspect.debug if @debug
461
477
  { title: title, date: d }
462
-
463
- end
464
-
478
+
479
+ end
480
+
465
481
  # Council Tax last day of the month
466
482
  #
467
483
  get /^(.*) +last day of the month/i do |title|
468
-
484
+
469
485
  td = @now.to_date
470
486
  d = Date.civil(td.year, td.month, -1).to_time
471
-
487
+
472
488
  puts [5.1, title].inspect.debug if @debug
473
489
  { title: title, date: d }
474
-
475
- end
476
-
490
+
491
+ end
492
+
477
493
  # some important day 11 Oct *
478
494
  #
479
495
  get /^(.*) +(\d+) +#{months} *(\*)?/i \
480
496
  do |title, day, month, annualar|
481
-
497
+
482
498
  raw_date = day + ' ' + month
483
499
 
484
- d = Chronic.parse(raw_date,
500
+ d = Chronic.parse(raw_date,
485
501
  :endian_precedence => :little)
486
502
  recurring = nil
487
-
503
+
488
504
  if annualar then
489
-
505
+
490
506
  recurring = 'yearly'
491
507
  if d < @now then
492
- d = Chronic.parse(raw_date,
493
- now: Time.local(@now.year + 1, 1, 1))
508
+ d = Chronic.parse(raw_date,
509
+ now: Time.local(@now.year + 1, 1, 1))
494
510
  end
495
511
  end
496
-
497
-
512
+
513
+
498
514
  puts [6, title, raw_date].inspect.debug if @debug
499
515
  { title: title, date: d, recurring: recurring }
500
516
  end
501
-
502
-
503
-
517
+
518
+
519
+
504
520
  # Tuesday 3rd October gas service at Barbara's house morning 9am-1pm
505
521
  #
506
522
  get '*' do
507
-
523
+
508
524
  s = params[:input]
509
-
510
- time1, time2, month, weekday, day, end_date, annualar = nil, nil, nil,
525
+
526
+ time1, time2, month, weekday, day, end_date, annualar = nil, nil, nil,
511
527
  nil, nil, nil, false
512
528
 
513
529
  s2 = s.sub(/#{times}/i) {|x| time1 = x; ''}
@@ -522,29 +538,29 @@ class EventNlp
522
538
  raw_date = [day, month].compact.join(' ')
523
539
  raw_date = weekday if raw_date.empty?
524
540
 
525
- d = Chronic.parse(raw_date + ' ' + time1.to_s,
541
+ d = Chronic.parse(raw_date + ' ' + time1.to_s,
526
542
  :endian_precedence => :little, now: @now)
527
-
543
+
528
544
  if time2 then
529
- end_date = Chronic.parse(raw_date + ' ' + time2.to_s,
545
+ end_date = Chronic.parse(raw_date + ' ' + time2.to_s,
530
546
  :endian_precedence => :little)
531
547
  end
532
-
548
+
533
549
  recurring = nil
534
-
550
+
535
551
  if annualar then
536
-
552
+
537
553
  recurring = 'yearly'
538
554
  if d < @now then
539
- d = Chronic.parse(raw_date, now: Time.local(@now.year + 1, 1, 1))
555
+ d = Chronic.parse(raw_date, now: Time.local(@now.year + 1, 1, 1))
540
556
  end
541
- end
542
-
557
+ end
558
+
543
559
  puts [10, title, raw_date, time1].inspect.debug if @debug
544
560
  { title: title, date: d, end_date: end_date, recurring: recurring }
545
- end
546
-
547
-
561
+ end
562
+
563
+
548
564
  end
549
-
565
+
550
566
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_nlp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,52 +11,52 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwOTEwMjE1ODM4WhcN
15
- MjAwOTA5MjE1ODM4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDIK9mI
17
- 2ehHbT3MWV/EVo9LjVfNUu90FCb3R2C80G73/zGCDQKg2QaV00GUEV3c6T9ylg87
18
- p9k71VIoRrTzc4wkrwIKAQnJGWOd/6iDQIIoGd1VU2NYaE/ANfAiNTnktKyYu9U8
19
- oWkC+jsuCFlgsf97LbV0a+SmMberl8G3dsL3kKAgwIEThpkIpkDLrJh/O+63lDBf
20
- O5duzcH2jkpAOqyFSGaEaJU3qpE7PSX80mU5JErsfLwSI2YtHOvGtXBBmJ5X6j+T
21
- 4oGpsdYN1teC2w/KETuAbGiBCNmKY5mTMDSZTlfWkLLBWY1HHSQ20glc0e4iQKiF
22
- T5BM4/1fI7N6DF1Aa9APKdF+ulyUchcpkxhUh8CAM/8pg3UYUgyf6deGkv+I/28f
23
- IT9I9uFmRKAx/U12BCRaBdh5sZAMEuLt690IzGYD/BWK+ff/NB+t+hbZYSk9OMHC
24
- 3J0bfnuzR5CmlmZED5Sa0X9u5EjHQeYmfI6jMjxHRoIaD3jM3SPnyQvvjx8CAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUE1kZqX7n
26
- oLNWhIHQ7SJAZcuZRvcwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMjAyMTQwNDQxWhcN
15
+ MjMwMjAyMTQwNDQxWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDRlXO8
17
+ lKNDGq9FsP2ZGakZKcR2g8utQq4DCO4x2ZpGzdq2uRuvZl/TG1eUt4NrHi6CAoYZ
18
+ Q3Sf11JJCL4ZBEi6Qm4YVMQ06gdsWBeWcO9wnOv198eKqsWbVmzpvRWmKJvjpzEY
19
+ nilcadAm1CCadUvfOi25WNhz+4jbzP09rdrI64Rmp0GJv5DjmtmgznQEWWZPyRVw
20
+ 5mbMIxAxepUus1KFkZSXsyqWsmcupJ0z4myicgD0GPNL47hO84DwG6KZ1dpVS/ar
21
+ E0KCPZPKIN7dnLsqgAnw41/VRQSDUdjyT7T8sv6Kb/wa6hXxaS/SFVlI8G5RI/la
22
+ tjGIHg84+JFySryZVGHpOepGxgILpeqNvXXIK59Az1/OiS70A3xQBFmHYUNngbJd
23
+ 8Gk83TYzTksXvnVBEhJKZwZYuWHT32burAz7+RDBdXl2cdiwX5IjkUq0BqPaGeuu
24
+ ZpJl29gP1YlCImTGWEPx9y30G/kdNYuVOJbzk2UEdCSlYjAQVtrYLTGRW08CAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUSXtv+Esp
26
+ k8epEo2XhtatYkQhLO0wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAfOeR8ABSrmM8+Mvgm+urusqQukPUyHKf71qYBY9d
29
- 2RyOGJc+WY76E4Y9O5QAeUyP8ib6er/A3bQefuMrIFBnygR3Wz0GV0cmnLoMhVlO
30
- TqeU1Yt9bdDDMkS3/fhDWMimrkupnhhtjxHO2B4yJ0+OB47HLzMY1NrvUJI1Xuox
31
- 4SfDeNtYn7Wxb1oIMviDDZqzNTSojyIPSdokR3lQHntTyUA+Q5gPZct0SAOGnWSA
32
- gqYmIGDrOpj3p5yV+7ChQAMDOq0qofpisAWHjdTkk9EBG7G9xRcAjG38baeWB843
33
- a12bAgeEqsysvhmtF1SD5uIhB+w659QB7fjrX227HhdgXYQ8JvtdhXAZIBcmgJX3
34
- 63fI7WqlDHr5cuY9XdepWpQcu0k0HVa67S1oalCyc8Gbv4iBH+mV5iSWmSKBHFX7
35
- Hp/xNpvPRmTW2ospJ7tp4UsgtLogM+hwp9H5Hs7fJiJpGlVFW91zEk8bnoiDXV2w
36
- 9tntfqektbvPs/grQCPIucls
28
+ BgkqhkiG9w0BAQsFAAOCAYEACwZ89nT9aFdxhWGboWw+R5rAnTRqDQS2U1/n7Vs0
29
+ uAMg5MVU/jIEFCnynXZMmJwzN3r972rkjxj9mn6DGnVu1YI1IAohMwls5BVPm4/V
30
+ HgOsV5YFOzfJpThCqVzo3HwkqZWoO7LEgIIHJ/3UYnCfWM6uHmDuyOTLnCHL+lVD
31
+ 1pi26mG34ViOfEQzgW6HwswixuUQ4LI2eYtzyKIS3qAYEVm7UwujdbKghEycFKdF
32
+ sBJVdzARYZGMbrKm8dWeBWrMhW+Fdy8HlN0D4XMYmCIYghZ5XiOICaTlv4rYOkr8
33
+ sThE7E1FNUonatzkBVmSDlJZ6K0nBZLy3RKC48BP8SnSM/LtQe9atiiJBPOAOck3
34
+ yjnIKndZd6EKQ2X55kjrO1J+/2tqfMOUjH8/pJLmeeR8xV5+oAz65qpFx8FZOFPC
35
+ w8lJ+I6Lqqr5GpsweOnEHW4w200sMRD40u8qmGHrqirihL2KrwTD6A9UObvA5AxZ
36
+ 4Z4EPvKg+3jsK9Gv3GGSLdrD
37
37
  -----END CERTIFICATE-----
38
- date: 2019-09-10 00:00:00.000000000 Z
38
+ date: 2022-02-02 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: chronic_cron
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 0.5.0
47
44
  - - "~>"
48
45
  - !ruby/object:Gem::Version
49
- version: '0.5'
46
+ version: '0.7'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.7.1
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 0.5.0
57
54
  - - "~>"
58
55
  - !ruby/object:Gem::Version
59
- version: '0.5'
56
+ version: '0.7'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 0.7.1
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: app-routes
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -78,7 +78,7 @@ dependencies:
78
78
  - !ruby/object:Gem::Version
79
79
  version: 0.1.19
80
80
  description:
81
- email: james@jamesrobertson.eu
81
+ email: digital.robertson@gmail.com
82
82
  executables: []
83
83
  extensions: []
84
84
  extra_rdoc_files: []
@@ -103,7 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubygems_version: 3.0.1
106
+ rubyforge_project:
107
+ rubygems_version: 2.7.10
107
108
  signing_key:
108
109
  specification_version: 4
109
110
  summary: 'Parses a calendar event for date, time, and description e.g. hall 2 friday
metadata.gz.sig CHANGED
Binary file