quandl_babelfish 0.0.2

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.
@@ -0,0 +1,529 @@
1
+ require 'spec_helper'
2
+
3
+ include Quandl::Babelfish
4
+ describe NumberMaid do
5
+
6
+ it 'should return an exception because month and day are ambiguous YYYY' do
7
+ dates = ['01/01/2011','1/2/2011','2/3/2011','11/1/2011']
8
+ lambda {DateMaid::sweep(dates)}.should raise_error(Error::GuessDateFormat)
9
+ end
10
+
11
+ it 'should return an exception because month and day are ambiguous YY' do
12
+ dates = ['01/01/11','1/2/11','1/3/11','11/1/11']
13
+ lambda {DateMaid::sweep(dates)}.should raise_error(Error::GuessDateFormat)
14
+ end
15
+
16
+ it 'should remove unwanted characters from dates (eg.  )' do
17
+ a=194.chr+160.chr
18
+ dates = ["2005#{a}","#{a}2006",'2007','2008']
19
+ dates = DateMaid::sweep(dates)
20
+ dates[0].should == Date.new(2005,12,31)
21
+ dates[1].should == Date.new(2006,12,31)
22
+ dates[2].should == Date.new(2007,12,31)
23
+ dates[3].should == Date.new(2008,12,31)
24
+ end
25
+
26
+ it 'should transform a parseable date into valid data (US) YYYY year' do
27
+ dates = ['01/10/2011','1/11/2011','1/12/2011','1/13/2011']
28
+
29
+ dates = DateMaid::sweep(dates)
30
+ dates[0].should == Date.new(2011,1,10)
31
+ dates[1].should == Date.new(2011,1,11)
32
+ dates[2].should == Date.new(2011,1,12)
33
+ dates[3].should == Date.new(2011,1,13)
34
+ end
35
+
36
+ it 'should calculate dates from UNIX timestamps (to UTC)' do
37
+ dates = [1279324800,1279411200,1279497600,1279584000]
38
+
39
+ dates = DateMaid::sweep(dates)
40
+ dates[0].should == Date.new(2010,7,17)
41
+ dates[1].should == Date.new(2010,7,18)
42
+ dates[2].should == Date.new(2010,7,19)
43
+ dates[3].should == Date.new(2010,7,20)
44
+ end
45
+
46
+ it 'should transform a parseable date into valid data (US) YY year' do
47
+ dates = ['01/10/11','1/11/11','1/12/11','1/13/11,4']
48
+ dates = DateMaid::sweep(dates)
49
+ dates[0].should == Date.new(2011,1,10)
50
+ dates[1].should == Date.new(2011,1,11)
51
+ dates[2].should == Date.new(2011,1,12)
52
+ dates[3].should == Date.new(2011,1,13)
53
+ end
54
+
55
+ it 'should throw error when 1 of the dates is invalid' do
56
+ # It ain't a leap year
57
+ dates = ['2/29/2011','01/01/2011','1/2/2011','1/3/2011','12/1/2011']
58
+ lambda {DateMaid::sweep(dates)}.should raise_error(Error::InvalidDate)
59
+ end
60
+
61
+ it 'should strip invalid parseable dates (US)' do
62
+ dates = ['01/01/2011','1/2/2011','1/3/2011','12/17/2011']
63
+ dates = DateMaid::sweep(dates)
64
+ dates[0].should == Date.new(2011,1,1)
65
+ dates[1].should == Date.new(2011,1,2)
66
+ dates[2].should == Date.new(2011,1,3)
67
+ dates[3].should == Date.new(2011,12,17)
68
+ end
69
+
70
+ it 'should transform a parseable date into valid data (ISO)' do
71
+ dates = ['2011-01-01','2011-01-02','2011-01-03','2011-02-04']
72
+ dates = DateMaid::sweep(dates)
73
+ dates[0].should == Date.new(2011,1,1)
74
+ dates[1].should == Date.new(2011,1,2)
75
+ dates[2].should == Date.new(2011,1,3)
76
+ dates[3].should == Date.new(2011,2,4)
77
+ end
78
+
79
+ it 'should parse ISO dates' do
80
+ # It ain't a leap year
81
+ dates = ['2011-01-01','2011-01-02','2011-01-03','2011-02-04']
82
+ dates = DateMaid::sweep(dates)
83
+ dates[0].should == Date.new(2011,1,1)
84
+ dates[1].should == Date.new(2011,1,2)
85
+ dates[2].should == Date.new(2011,1,3)
86
+ dates[3].should == Date.new(2011,2,4)
87
+ end
88
+
89
+ it 'should handle JP dates YYYY/MM/DD' do
90
+ dates = ['2011/01/01','2011/01/2','2011/1/03','2011/2/4']
91
+ dates = DateMaid::sweep(dates)
92
+ dates[0].should == Date.new(2011,1,1)
93
+ dates[1].should == Date.new(2011,1,2)
94
+ dates[2].should == Date.new(2011,1,3)
95
+ dates[3].should == Date.new(2011,2,4)
96
+ end
97
+
98
+ it 'should handle manually formatted dates (EU)' do
99
+ dates = ['01/01/2011','2/1/2011','3/1/2011','1/12/2011']
100
+ DateMaid::init(:format => '%d/%m/%Y')
101
+ dates = DateMaid::sweep(dates)
102
+ dates[0].should == Date.new(2011,1,1)
103
+ dates[1].should == Date.new(2011,1,2)
104
+ dates[2].should == Date.new(2011,1,3)
105
+ dates[3].should == Date.new(2011,12,1)
106
+ DateMaid::init({})
107
+ end
108
+
109
+ it 'should handle manually formatted dates (EU, strip)' do
110
+ dates = ['01/01/2011','2/1/2011','3/1/2011','1/12/2011']
111
+ DateMaid::init(:format => '%d/%m/%Y')
112
+ dates = DateMaid::sweep(dates)
113
+ dates[0].should == Date.new(2011,1,1)
114
+ dates[1].should == Date.new(2011,1,2)
115
+ dates[2].should == Date.new(2011,1,3)
116
+ dates[3].should == Date.new(2011,12,1)
117
+ DateMaid::init({})
118
+ end
119
+
120
+ it 'should transform a year into an end of year date' do
121
+ dates = ['2011','2010','2009','2008','2007','2006']
122
+
123
+ DateMaid::init({:frequency => 'annual'})
124
+ dates = DateMaid::sweep(dates)
125
+ dates[0].should == Date.new(2011,12,31)
126
+ dates[1].should == Date.new(2010,12,31)
127
+ dates[2].should == Date.new(2009,12,31)
128
+ dates[3].should == Date.new(2008,12,31)
129
+ DateMaid::init({})
130
+ end
131
+
132
+ it 'should transform a year into an end of year date with gaps' do
133
+ dates = ['2011','2010','2009','2008','2007','2006']
134
+ DateMaid::init({:frequency => 'annual'})
135
+ dates = DateMaid::sweep(dates)
136
+ dates[0].should == Date.new(2011,12,31)
137
+ dates[1].should == Date.new(2010,12,31)
138
+ dates[2].should == Date.new(2009,12,31)
139
+ dates[3].should == Date.new(2008,12,31)
140
+ DateMaid::init({})
141
+ end
142
+
143
+ it 'should transform a YYYY.0 into an end of year date' do
144
+ dates = ['2011.0','2010.0','2009.0','2008.0','2007.0','2006.0']
145
+ DateMaid::init({:frequency => 'annual'})
146
+ dates = DateMaid::sweep(dates)
147
+ dates[0].should == Date.new(2011,12,31)
148
+ dates[1].should == Date.new(2010,12,31)
149
+ dates[2].should == Date.new(2009,12,31)
150
+ dates[3].should == Date.new(2008,12,31)
151
+ DateMaid::init({})
152
+ end
153
+
154
+ it 'should transform a YYYY.1 into an end of month date' do
155
+ dates = ['2011.1','2010.2','2009.3','2008.10','2007.11','2006.12']
156
+ dates = DateMaid::sweep(dates)
157
+ dates[0].should == Date.new(2011,01,31)
158
+ dates[1].should == Date.new(2010,02,28)
159
+ dates[2].should == Date.new(2009,03,31)
160
+ dates[3].should == Date.new(2008,10,31)
161
+ dates[4].should == Date.new(2007,11,30)
162
+ dates[5].should == Date.new(2006,12,31)
163
+ end
164
+
165
+
166
+ it 'should transform yyyy-mm to end of month' do
167
+ dates = ['2011-01','2011-02','2011-03','2011-04']
168
+ dates = DateMaid::sweep(dates)
169
+ dates[0].should == Date.new(2011,1,31)
170
+ dates[1].should == Date.new(2011,2,28)
171
+ dates[2].should == Date.new(2011,3,31)
172
+ dates[3].should == Date.new(2011,4,30)
173
+ end
174
+
175
+ it 'should transform yyyy/mm to end of month' do
176
+ dates = ['2011/01','2011/02','2011/03','2011/04,4']
177
+ dates = DateMaid::sweep(dates)
178
+ dates[0].should == Date.new(2011,1,31)
179
+ dates[1].should == Date.new(2011,2,28)
180
+ dates[2].should == Date.new(2011,3,31)
181
+ dates[3].should == Date.new(2011,4,30)
182
+ end
183
+
184
+ it 'should transform yyyyMmm to end of month' do
185
+ dates = ['2011M01','2011M02','2011M03','2011M04']
186
+ dates = DateMaid::sweep(dates)
187
+ dates[0].should == Date.new(2011,1,31)
188
+ dates[1].should == Date.new(2011,2,28)
189
+ dates[2].should == Date.new(2011,3,31)
190
+ dates[3].should == Date.new(2011,4,30)
191
+ end
192
+
193
+ it 'should transform yyyyWww to the first Friday of the week of the year' do
194
+ dates = ['1998W52','1998W53','1999W01']
195
+ dates = DateMaid::sweep(dates)
196
+ dates[0].should == Date.new(1998,12,25)
197
+ dates[1].should == Date.new(1999,1,1)
198
+ dates[2].should == Date.new(1999,1,8)
199
+ end
200
+
201
+ it 'should fail on invalid YYYY-MM formats' do
202
+ dates = ['2011-13','2011-AA','2011-01','2011-02','2011-03','2011-04']
203
+ lambda {DateMaid::sweep(dates)}.should raise_error(Error::InvalidDate)
204
+ end
205
+
206
+ it 'should parse YYYY-MM formats' do
207
+ dates = ['2011-01','2011-02','2011-03','2011-04']
208
+ dates = DateMaid::sweep(dates)
209
+ dates[0].should == Date.new(2011,1,31)
210
+ dates[1].should == Date.new(2011,2,28)
211
+ dates[2].should == Date.new(2011,3,31)
212
+ dates[3].should == Date.new(2011,4,30)
213
+ end
214
+
215
+ it 'should transform mm-yyyy to end of month' do
216
+ dates = ['01-2011','02-2011','3-2011','4-2011']
217
+ dates = DateMaid::sweep(dates)
218
+ dates[0].should == Date.new(2011,1,31)
219
+ dates[1].should == Date.new(2011,2,28)
220
+ dates[2].should == Date.new(2011,3,31)
221
+ dates[3].should == Date.new(2011,4,30)
222
+ end
223
+
224
+ it 'should transform mm/yyyy to end of month' do
225
+ dates = ['01/2011','02/2011','3/2011','4/2011']
226
+ dates = DateMaid::sweep(dates)
227
+ dates[0].should == Date.new(2011,1,31)
228
+ dates[1].should == Date.new(2011,2,28)
229
+ dates[2].should == Date.new(2011,3,31)
230
+ dates[3].should == Date.new(2011,4,30)
231
+ end
232
+
233
+ it 'should transform yyyymm (no delimiter) to end of month' do
234
+ dates = ['201101','201102','201103','201104']
235
+ dates = DateMaid::sweep(dates)
236
+ dates[0].should == Date.new(2011,1,31)
237
+ dates[1].should == Date.new(2011,2,28)
238
+ dates[2].should == Date.new(2011,3,31)
239
+ dates[3].should == Date.new(2011,4,30)
240
+ end
241
+
242
+ it 'should transform yyyymm (no delimiter) to end of month' do
243
+ # Only 5 digits
244
+ dates = ['201101','201102','201103','201104']
245
+ dates = DateMaid::sweep(dates)
246
+ dates[0].should == Date.new(2011,1,31)
247
+ dates[1].should == Date.new(2011,2,28)
248
+ dates[2].should == Date.new(2011,3,31)
249
+ dates[3].should == Date.new(2011,4,30)
250
+ end
251
+
252
+ it 'should transform YYYY-MMM to end of month' do
253
+ dates = ['2011-jan','2011-feb','2011-mar','2011-apr']
254
+ dates = DateMaid::sweep(dates)
255
+ dates[0].should == Date.new(2011,1,31)
256
+ dates[1].should == Date.new(2011,2,28)
257
+ dates[2].should == Date.new(2011,3,31)
258
+ dates[3].should == Date.new(2011,4,30)
259
+ end
260
+
261
+ it 'should transform YYYY MMM to end of month' do
262
+ dates = ['2011 jan','2011 feb','2011 mar','2011 apr']
263
+ dates = DateMaid::sweep(dates)
264
+ dates[0].should == Date.new(2011,1,31)
265
+ dates[1].should == Date.new(2011,2,28)
266
+ dates[2].should == Date.new(2011,3,31)
267
+ dates[3].should == Date.new(2011,4,30)
268
+ end
269
+
270
+ it 'should transform YYYY MMM to end of month (CAPS)' do
271
+ dates = ['2011 JAN','2011 FEB','2011 MAR','2011 APR']
272
+ dates = DateMaid::sweep(dates)
273
+ dates[0].should == Date.new(2011,1,31)
274
+ dates[1].should == Date.new(2011,2,28)
275
+ dates[2].should == Date.new(2011,3,31)
276
+ dates[3].should == Date.new(2011,4,30)
277
+ end
278
+
279
+ it 'should transform YYYY MMM to end of month (Camel)' do
280
+ dates = ['2011 Jan','2011 Feb','2011 Mar','2011 Apr,4']
281
+ dates = DateMaid::sweep(dates)
282
+ dates[0].should == Date.new(2011,1,31)
283
+ dates[1].should == Date.new(2011,2,28)
284
+ dates[2].should == Date.new(2011,3,31)
285
+ dates[3].should == Date.new(2011,4,30)
286
+ end
287
+
288
+ it 'should transform MMM-YYYY to end of month' do
289
+ dates = ['jan-2011','feb-2011','mar-2011','apr-2011,4']
290
+ dates = DateMaid::sweep(dates)
291
+ dates[0].should == Date.new(2011,1,31)
292
+ dates[1].should == Date.new(2011,2,28)
293
+ dates[2].should == Date.new(2011,3,31)
294
+ dates[3].should == Date.new(2011,4,30)
295
+ end
296
+
297
+ it 'should transform MMM-YYYY to end of month (strip)' do
298
+ dates = ['jan-2011','feb-2011','mar-2011','apr-2011']
299
+ dates = DateMaid::sweep(dates)
300
+ dates[0].should == Date.new(2011,1,31)
301
+ dates[1].should == Date.new(2011,2,28)
302
+ dates[2].should == Date.new(2011,3,31)
303
+ dates[3].should == Date.new(2011,4,30)
304
+ end
305
+
306
+ it 'should transform MMMYYYY to end of month (No delimiter)' do
307
+ dates = ['jan2011','feb2011','mar2011','apr2011']
308
+ dates = DateMaid::sweep(dates)
309
+ dates[0].should == Date.new(2011,1,31)
310
+ dates[1].should == Date.new(2011,2,28)
311
+ dates[2].should == Date.new(2011,3,31)
312
+ dates[3].should == Date.new(2011,4,30)
313
+ end
314
+
315
+ it 'should transform MMMYYYY to end of month (No delimiter, strip)' do
316
+ dates = ['jan2011','feb2011','mar2011','apr2011']
317
+ dates = DateMaid::sweep(dates)
318
+ dates[0].should == Date.new(2011,1,31)
319
+ dates[1].should == Date.new(2011,2,28)
320
+ dates[2].should == Date.new(2011,3,31)
321
+ dates[3].should == Date.new(2011,4,30)
322
+ end
323
+
324
+
325
+ it 'should transform YYYYMMM to end of month (No delimiter) even if one date is partially valid' do
326
+ dates = ['2011JAN','2011FEB','2011MAR','2011APR,4']
327
+ dates = DateMaid::sweep(dates)
328
+ dates[0].should == Date.new(2011,1,31)
329
+ dates[1].should == Date.new(2011,2,28)
330
+ dates[2].should == Date.new(2011,3,31)
331
+ dates[3].should == Date.new(2011,4,30)
332
+ end
333
+
334
+ it 'should transform YYYYMMM to end of month (No delimiter)' do
335
+ dates = ['2011JAN','2011FEB','2011MAR','2011APR,4']
336
+ dates = DateMaid::sweep(dates)
337
+ dates[0].should == Date.new(2011,1,31)
338
+ dates[1].should == Date.new(2011,2,28)
339
+ dates[2].should == Date.new(2011,3,31)
340
+ dates[3].should == Date.new(2011,4,30)
341
+ end
342
+
343
+ it 'should transform YYYY-MMM-DD to date' do
344
+ dates = ['2011-jan-01','2011-feb-01','2011-mar-3','2011-apr-4']
345
+ dates = DateMaid::sweep(dates)
346
+ dates[0].should == Date.new(2011,1,1)
347
+ dates[1].should == Date.new(2011,2,1)
348
+ dates[2].should == Date.new(2011,3,3)
349
+ dates[3].should == Date.new(2011,4,4)
350
+ end
351
+
352
+ it 'should transform YYYY-MMM-DD to date (strip)' do
353
+ dates = ['2011-jan-01','2011-feb-01','2011-mar-3','2011-apr-4']
354
+ dates = DateMaid::sweep(dates)
355
+ dates[0].should == Date.new(2011,1,1)
356
+ dates[1].should == Date.new(2011,2,1)
357
+ dates[2].should == Date.new(2011,3,3)
358
+ dates[3].should == Date.new(2011,4,4)
359
+ end
360
+
361
+
362
+ it 'should transform DD-MMM-YYYY to date' do
363
+ dates = ['01-jan-2011','01-feb-2011','3-mar-2011','4-apr-2011']
364
+ dates = DateMaid::sweep(dates)
365
+ dates[0].should == Date.new(2011,1,1)
366
+ dates[1].should == Date.new(2011,2,1)
367
+ dates[2].should == Date.new(2011,3,3)
368
+ dates[3].should == Date.new(2011,4,4)
369
+ end
370
+
371
+ it 'should transform DD-MMM-YYYY to date (strip)' do
372
+ dates = ['01-jan-2011','01-feb-2011','3-mar-2011','4-apr-2011']
373
+ dates = DateMaid::sweep(dates)
374
+ dates[0].should == Date.new(2011,1,1)
375
+ dates[1].should == Date.new(2011,2,1)
376
+ dates[2].should == Date.new(2011,3,3)
377
+ dates[3].should == Date.new(2011,4,4)
378
+ end
379
+
380
+ it 'should transform YYYYMMMDD to date (no delimiters)' do
381
+ dates = ['2011jan01','2011feb01','2011mar3','2011apr4']
382
+ dates = DateMaid::sweep(dates)
383
+ dates[0].should == Date.new(2011,1,1)
384
+ dates[1].should == Date.new(2011,2,1)
385
+ dates[2].should == Date.new(2011,3,3)
386
+ dates[3].should == Date.new(2011,4,4)
387
+ end
388
+
389
+ it 'should transform YYYYMMMDD to date (no delimiters, strip)' do
390
+ dates = ['2011jan01','2011feb01','2011mar3','2011apr4']
391
+ dates = DateMaid::sweep(dates)
392
+ dates[0].should == Date.new(2011,1,1)
393
+ dates[1].should == Date.new(2011,2,1)
394
+ dates[2].should == Date.new(2011,3,3)
395
+ dates[3].should == Date.new(2011,4,4)
396
+ end
397
+
398
+ it 'should transform DD-MMM-YYYY to date (no delimiters)' do
399
+ dates = ['01jan2011','01feb2011','3mar2011','4apr2011']
400
+ dates = DateMaid::sweep(dates)
401
+ dates[0].should == Date.new(2011,1,1)
402
+ dates[1].should == Date.new(2011,2,1)
403
+ dates[2].should == Date.new(2011,3,3)
404
+ dates[3].should == Date.new(2011,4,4)
405
+ end
406
+
407
+ it 'should transform DD-MMM-YYYY to date (no delimiters, strip)' do
408
+ dates = ['01jan2011','01feb2011','3mar2011','4apr2011']
409
+ dates = DateMaid::sweep(dates)
410
+ dates[0].should == Date.new(2011,1,1)
411
+ dates[1].should == Date.new(2011,2,1)
412
+ dates[2].should == Date.new(2011,3,3)
413
+ dates[3].should == Date.new(2011,4,4)
414
+ end
415
+
416
+ it 'should transform yyyy-Qq to end of quarter' do
417
+ dates = ['2011-Q1','2011-Q2','2011-Q3','2011-Q4']
418
+ dates = DateMaid::sweep(dates)
419
+ dates[0].should == Date.new(2011,3,31)
420
+ dates[1].should == Date.new(2011,6,30)
421
+ dates[2].should == Date.new(2011,9,30)
422
+ dates[3].should == Date.new(2011,12,31)
423
+ end
424
+
425
+ it 'should transform yyyy-Qq to end of quarter (strip)' do
426
+ dates = ['2011-Q1','2011-Q2','2011-Q3','2011-Q4']
427
+ dates = DateMaid::sweep(dates)
428
+ dates[0].should == Date.new(2011,3,31)
429
+ dates[1].should == Date.new(2011,6,30)
430
+ dates[2].should == Date.new(2011,9,30)
431
+ dates[3].should == Date.new(2011,12,31)
432
+ end
433
+
434
+ it 'should transform yyyyQq to end of quarter (no delimiter)' do
435
+ dates = ['2011q1','2011Q2','2011q3','2011Q4,4']
436
+ dates = DateMaid::sweep(dates)
437
+ dates[0].should == Date.new(2011,3,31)
438
+ dates[1].should == Date.new(2011,6,30)
439
+ dates[2].should == Date.new(2011,9,30)
440
+ dates[3].should == Date.new(2011,12,31)
441
+ end
442
+
443
+ it 'should handle white space at front and back of dates' do
444
+ dates = [' 2012q2 ']
445
+ dates = DateMaid::sweep(dates)
446
+ dates[0].should == Date.new(2012,6,30)
447
+ end
448
+
449
+ it 'should handle white space at front and back of dates (2)' do
450
+ dates = [' 2012 ']
451
+ dates = DateMaid::sweep(dates)
452
+ dates[0].should == Date.new(2012,12,31)
453
+ end
454
+
455
+ it 'should know 1871.10 is October' do
456
+ dates = ['1871.10']
457
+ dates = DateMaid::sweep(dates)
458
+ dates[0].should == Date.new(1871,10,31)
459
+ end
460
+
461
+ it 'should handle 1990' do
462
+ dates = ['1990']
463
+ dates = DateMaid::sweep(dates)
464
+ dates[0].should == Date.new(1990,12,31)
465
+ end
466
+
467
+ it 'should handle 1990 - 1995' do
468
+ dates = ['1990 - 1995']
469
+ dates = DateMaid::sweep(dates)
470
+ dates[0].should == Date.new(1990,12,31)
471
+ end
472
+
473
+ it 'should transform YYYYMMDD to date' do
474
+ dates = ['20010101','20110518','19701111','19770208','19900531']
475
+ dates = DateMaid::sweep(dates)
476
+ dates[0].should == Date.new(2001,1,1)
477
+ dates[1].should == Date.new(2011,5,18)
478
+ dates[2].should == Date.new(1970,11,11)
479
+ dates[3].should == Date.new(1977,2,8)
480
+ dates[4].should == Date.new(1990,5,31)
481
+ end
482
+
483
+ it 'should transform Jan 30, 1955' do
484
+ dates = ['Jan 30, 1955']
485
+ dates = DateMaid::sweep(dates)
486
+ dates[0].should == Date.new(1955,1,30)
487
+ end
488
+
489
+ it 'should transform Jan-68' do
490
+ dates = ['Dec-68','Jan-69']
491
+ dates = DateMaid::sweep(dates)
492
+ dates[0].should == Date.new(1968,12,31)
493
+ dates[1].should == Date.new(1969,1,31)
494
+ end
495
+
496
+
497
+ it 'should transform Jul-01' do
498
+ dates = ['Jul-01','Aug-01']
499
+ dates = DateMaid::sweep(dates)
500
+ dates[1].should == Date.new(2001,8,31)
501
+ dates[0].should == Date.new(2001,7,31)
502
+ end
503
+
504
+ it 'should transform Dec-31-12' do
505
+ dates = ['Dec-31-12']
506
+ dates = DateMaid::sweep(dates)
507
+ dates[0].should == Date.new(2012,12,31)
508
+ end
509
+
510
+ it 'should format YYYY/MM/DD' do
511
+ dates = ['20010101','20110518','19701111','19770208','19900531']
512
+ dates = DateMaid::sweep(dates)
513
+ dates[0].should == Date.new(2001,1,1)
514
+ dates[1].should == Date.new(2011,5,18)
515
+ dates[2].should == Date.new(1970,11,11)
516
+ dates[3].should == Date.new(1977,2,8)
517
+ dates[4].should == Date.new(1990,5,31)
518
+ end
519
+
520
+ it 'should strip days of the week' do
521
+ pending "Not implemented yet"
522
+ dates = ["Tuesday, April 30, 2013","Mon april 29, 2012"]
523
+ dates = DateMaid::sweep(dates)
524
+ dates[0].should == Date.new(2013,04,30)
525
+ dates[1].should == Date.new(2012,04,29)
526
+ end
527
+
528
+
529
+ end
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+
3
+ include Quandl::Babelfish
4
+ describe NumberMaid do
5
+
6
+ it "should handle '1.432,32' i.e. 1432.32 in Canadian format" do
7
+ NumberMaid::init(:decimal_mark => ',')
8
+ NumberMaid::clean('1.432,32').should == 1432.32
9
+ NumberMaid::init({}) #reset settings
10
+ end
11
+
12
+ it "should remove spaces that act as 000 separators" do
13
+ NumberMaid::clean('12 345').should == 12345
14
+ end
15
+
16
+ it "should accept commas that act as 000 separators" do
17
+ NumberMaid::clean('12,345').should == 12345
18
+ end
19
+
20
+ it "should handle scientific notation" do
21
+ NumberMaid::clean('2.1e2').should == 210
22
+ NumberMaid::clean('2.1 E 2').should == 210
23
+ NumberMaid::clean('2.1 E+2').should == 210
24
+ NumberMaid::clean('210 E -2').should == 2.1
25
+ NumberMaid::clean('2.1 e +2').should == 210
26
+ NumberMaid::clean('2.1*10^2').should == 210
27
+ NumberMaid::clean('2.1 X102').should == 210
28
+ NumberMaid::clean('sci not: -2.1 * 10 2 Ghz').should == -210
29
+ end
30
+
31
+ it "should mulitiply number if cell contains million or billion" do
32
+ NumberMaid::clean('35 million').should == 35000000
33
+ NumberMaid::clean('42 billion').should == 42000000000
34
+ end
35
+
36
+ it "should handle a plain integer" do
37
+ NumberMaid::clean('1').should == 1
38
+ end
39
+
40
+ it "should handle a plain negative integer" do
41
+ NumberMaid::clean('-1').should == -1
42
+ NumberMaid::clean('(1)').should == -1
43
+ end
44
+
45
+ it "should handle a plain float" do
46
+ NumberMaid::clean('1.1').should == 1.1
47
+ end
48
+
49
+ it "should handle a plain negative float" do
50
+ NumberMaid::clean('-1.1').should == -1.1
51
+ NumberMaid::clean('(1.1)').should == -1.1
52
+ end
53
+
54
+ it "should ignore extraneous characters" do
55
+ NumberMaid::clean('a1.1a').should == 1.1
56
+ NumberMaid::clean('And the answer is 1.1').should == 1.1
57
+ NumberMaid::clean('1.1 for the win').should == 1.1
58
+ NumberMaid::clean('1.1%').should == 1.1
59
+ NumberMaid::clean('-1.1%').should == -1.1
60
+ NumberMaid::clean('(1.1%)').should == -1.1
61
+ NumberMaid::clean('[1.1%]').should == 1.1
62
+ NumberMaid::clean('/1.1%/').should == 1.1
63
+ NumberMaid::clean('{1.1%}').should == 1.1
64
+ NumberMaid::clean('1.1Ghz').should == 1.1
65
+ NumberMaid::clean('(1.1Ghz)').should == -1.1
66
+ end
67
+
68
+ it 'should get nothing' do
69
+ NumberMaid::clean('').should be_nil
70
+ NumberMaid::clean('super').should be_nil
71
+ NumberMaid::clean('This is great. And then she said...').should be_nil
72
+ NumberMaid::clean(' ').should be_nil
73
+ NumberMaid::clean('.').should be_nil
74
+ NumberMaid::clean('*').should be_nil
75
+ NumberMaid::clean('(not a number dude)').should be_nil
76
+ NumberMaid::clean('(O.OO)').should be_nil
77
+ NumberMaid::clean('#!!@#$%.^&*())').should be_nil # The cartoon swear test
78
+ end
79
+
80
+ it "should handle this stupid one: '(A1) 249.34' " do
81
+ NumberMaid::clean('(A1) 234.3').should == 234.3
82
+ NumberMaid::clean('234.3{3}').should == 234.3
83
+ NumberMaid::clean('234.3[yes]').should == 234.3
84
+ NumberMaid::clean('(234.3)').should == -234.3
85
+ NumberMaid::clean('est. 32.8').should == 32.8
86
+ NumberMaid::clean('(a6) 9,008').should == 9008
87
+ end
88
+
89
+ it "should handle: '32.4/66.2'" do
90
+ NumberMaid::clean('32.4/18.8').should == 32.4
91
+ NumberMaid::clean('32.4 / 18.8').should == 32.4
92
+ NumberMaid::clean('32.4 to 18.8').should == 32.4
93
+ NumberMaid::clean('273.1/281.7').should == 273.1
94
+ NumberMaid::clean('1,013/1,026').should == 1013
95
+ NumberMaid::clean('1,013/1,026').should == 1013
96
+ NumberMaid::clean('~14,508/14,512').should == 14508
97
+ end
98
+
99
+ it "should convert many numbers" do
100
+ numbers = [2011,'2012*[123]',2013,2014]
101
+
102
+ numbers = NumberMaid::clean(numbers)
103
+ numbers.length.should == 4
104
+ numbers[0].should == 2011
105
+ numbers[1].should == 2012
106
+ numbers[2].should == 2013
107
+ numbers[3].should == 2014
108
+ end
109
+
110
+ it "should leave nil's for invalid cells" do
111
+ numbers = [2011,2012,'abcdef',2014]
112
+ numbers = NumberMaid::clean(numbers)
113
+ numbers.length.should == 4
114
+ numbers[0].should == 2011
115
+ numbers[1].should == 2012
116
+ numbers[2].should be_nil
117
+ numbers[3].should == 2014
118
+
119
+ end
120
+
121
+ it "should handle crazy long decimals" do
122
+ numbers = NumberMaid::clean('0.12345678901234567890')
123
+ numbers.should == 0.12345678901235
124
+ end
125
+
126
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ include Quandl
4
+ describe Babelfish do
5
+
6
+ it 'should run gem' do
7
+ input=[[1990,1,2,3],[1991,4,5,6]]
8
+ output = Babelfish::clean input
9
+ output[0][0].should ==Date.new(1990,12,31)
10
+ output[0][1].should ==1
11
+ output[1][0].should ==Date.new(1991,12,31)
12
+ output[1][3].should ==6
13
+ end
14
+
15
+ end
@@ -0,0 +1,13 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
+
3
+ require 'pry'
4
+ require "rspec"
5
+ require 'quandl/babelfish'
6
+
7
+ # require support
8
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+ config.treat_symbols_as_metadata_keys_with_true_values = true
12
+ config.mock_with :rspec
13
+ end