reckon 0.4.4 → 0.5.4

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 (53) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +10 -2
  5. data/CHANGELOG.md +235 -0
  6. data/Gemfile +0 -1
  7. data/Gemfile.lock +73 -15
  8. data/README.md +12 -5
  9. data/lib/reckon.rb +13 -12
  10. data/lib/reckon/app.rb +94 -116
  11. data/lib/reckon/cosine_similarity.rb +122 -0
  12. data/lib/reckon/csv_parser.rb +116 -129
  13. data/lib/reckon/date_column.rb +60 -0
  14. data/lib/reckon/ledger_parser.rb +204 -30
  15. data/lib/reckon/logger.rb +4 -0
  16. data/lib/reckon/money.rb +6 -62
  17. data/lib/reckon/version.rb +3 -0
  18. data/reckon.gemspec +8 -5
  19. data/spec/data_fixtures/51-sample.csv +8 -0
  20. data/spec/data_fixtures/51-tokens.yml +9 -0
  21. data/spec/data_fixtures/73-sample.csv +2 -0
  22. data/spec/data_fixtures/73-tokens.yml +8 -0
  23. data/spec/data_fixtures/73-transactions.ledger +7 -0
  24. data/spec/data_fixtures/85-date-example.csv +2 -0
  25. data/spec/data_fixtures/austrian_example.csv +13 -0
  26. data/spec/data_fixtures/bom_utf8_file.csv +1 -0
  27. data/spec/data_fixtures/broker_canada_example.csv +12 -0
  28. data/spec/data_fixtures/chase.csv +9 -0
  29. data/spec/data_fixtures/danish_kroner_nordea_example.csv +6 -0
  30. data/spec/data_fixtures/english_date_example.csv +3 -0
  31. data/spec/data_fixtures/french_example.csv +9 -0
  32. data/spec/data_fixtures/german_date_example.csv +3 -0
  33. data/spec/data_fixtures/harder_date_example.csv +5 -0
  34. data/spec/data_fixtures/ing.csv +3 -0
  35. data/spec/data_fixtures/intuit_mint_example.csv +7 -0
  36. data/spec/data_fixtures/invalid_header_example.csv +6 -0
  37. data/spec/data_fixtures/inversed_credit_card.csv +16 -0
  38. data/spec/data_fixtures/nationwide.csv +4 -0
  39. data/spec/data_fixtures/simple.csv +2 -0
  40. data/spec/data_fixtures/some_other.csv +9 -0
  41. data/spec/data_fixtures/spanish_date_example.csv +3 -0
  42. data/spec/data_fixtures/suntrust.csv +7 -0
  43. data/spec/data_fixtures/test_money_column.csv +3 -0
  44. data/spec/data_fixtures/two_money_columns.csv +5 -0
  45. data/spec/data_fixtures/yyyymmdd_date_example.csv +1 -0
  46. data/spec/reckon/app_spec.rb +96 -34
  47. data/spec/reckon/csv_parser_spec.rb +185 -307
  48. data/spec/reckon/date_column_spec.rb +12 -13
  49. data/spec/reckon/ledger_parser_spec.rb +99 -9
  50. data/spec/reckon/money_spec.rb +42 -29
  51. data/spec/spec_helper.rb +22 -0
  52. metadata +85 -21
  53. data/CHANGES.md +0 -9
@@ -0,0 +1,8 @@
1
+ 01/09/2015,05354 SUBWAY,8.19,,1000.00
2
+ 02/18/2015,WENDY'S #6338,8.55,,1000.00
3
+ 02/25/2015,WENDY'S #6338,8.55,,1000.00
4
+ 02/25/2015,WENDY'S #6338,9.14,,1000.00
5
+ 02/27/2015,WENDY'S #6338,5.85,,1000.00
6
+ 03/09/2015,WENDY'S #6338,17.70,,1000.00
7
+ 03/16/2015,WENDY'S #6338,11.15,,1000.00
8
+ 03/23/2015,WENDY'S,10.12,,1000.00
@@ -0,0 +1,9 @@
1
+ Expenses:
2
+ Dining:
3
+ Coffee:
4
+ - 'STARBUCKS'
5
+ - 'TIM HORTON'
6
+ Resturant:
7
+ - 'WENDY''S'
8
+ - 'SUBWAY'
9
+ - 'BARAKAT'
@@ -0,0 +1,2 @@
1
+ Transaction Date,Description,Amount,Category
2
+ 07/06/2017,TRIPLE T CAR WASH CHAMPAIGN IL,$27.00,Automotive
@@ -0,0 +1,8 @@
1
+ Expenses:
2
+ Automotive:
3
+ Car Wash:
4
+ - 'TRIPLE T CAR WASH CHAMPAIGN IL'
5
+ - "BIG T's CAR WASH"
6
+ Maintenance:
7
+ - 'Autozone'
8
+ - "O'Reillys auto parts"
@@ -0,0 +1,7 @@
1
+ 2004/05/14 TRIPLE T CAR WASH CHAMPAIGN IL
2
+ Expenses:Automotive:Car Wash -$10.00
3
+ Assets:Bank:Checking
4
+
5
+ 2004/05/27 AUTOZONE #2228
6
+ Expenses:Automotive:Maintenance $86.56
7
+ Liabilities:CreditCard -$86.56
@@ -0,0 +1,2 @@
1
+ Visa, 4514010000000000, 2020-02-20, , GOJEK SINGAPORE, 8.10 SGD @ .976500000000, -7.91, D
2
+ Visa, 4514010000000000, 2020-02-20, , GOJEK SINGAPORE, 6.00 SGD @ .976600000000, -5.86, D
@@ -0,0 +1,13 @@
1
+ 00075757575;Abbuchung Onlinebanking 654321098765 BG/000002462 BICBICBI AT654000000065432109 Thematische Universität Stadt ;22.01.2014;22.01.2014;-18,00;EUR
2
+ 00075757575;333222111333222 222111333222 OG/000002461 BICBICBIXXX AT333000000003332221 Telekom Land AG RECHNUNG 11/13 333222111333222 ;17.01.2014;17.01.2014;-9,05;EUR
3
+ 00075757575;Helm BG/000002460 10000 00007878787 Muster Dr.Beispiel-Vorname ;15.01.2014;15.01.2014;+120,00;EUR
4
+ 00075757575;Gutschrift Dauerauftrag BG/000002459 BICBICBI AT787000000007878787 Muster Dr.Beispiel-Vorname ;15.01.2014;15.01.2014;+22,00;EUR
5
+ 00075757575;Bezahlung Bankomat MC/000002458 0001 K1 06.01.UM 18.11 Bahn 8020 FSA\\Ort\10 10 2002200EUR ;07.01.2014;06.01.2014;-37,60;EUR
6
+ 00075757575;Bezahlung Bankomat 10.33 MC/000002457 0001 K1 02.01.UM 10.33 Abcdef Electronic\\Wie n\1150 0400444 ;03.01.2014;02.01.2014;-46,42;EUR
7
+ 00075757575;050055556666000 OG/000002456 BKAUATWWXXX AT555500000555566665 JKL Telekommm Stadt GmbH JKL Rechnung 555666555 ;03.01.2014;03.01.2014;-17,15;EUR
8
+ 00075757575;Abbuchung Einzugsermächtigung OG/000002455 INTERNATIONALER AUTOMOBIL-, 10000 00006655665 ;02.01.2014;02.01.2014;-17,40;EUR
9
+ 00075757575;POLIZZE 1/01/0101010 Fondsge010101010101nsverOG/000002454 BICBICBIXXX AT101000000101010101 VERSICHERUNG NAMEDERV AG POLIZZE 1/01/0101010 Fondsgebundene Lebensversicherung - fällig 01.01. 2014 Folg eprämie ;02.01.2014;02.01.2014;-31,71;EUR
10
+ 00075757575;POLIZZE 1/01/0101012 Rentenv010101010102- fälOG/000002453 BICBICBIXXX AT101000000101010102 VERSICHERUNG NAMEDERV AG POLIZZE 1/01/0101012 Rentenversicherung - fällig 01.01.20 14 Folgeprämi e ;02.01.2014;02.01.2014;-32,45;EUR
11
+ 00075757575;Anlass VD/000002452 BKAUATWWBRN AT808800080880880880 Dipl.Ing.Dr. Berta Beispiel ;02.01.2014;02.01.2014;+61,90;EUR
12
+ 00075757575;Abbuchung Onlinebanking 000009999999 BG/000002451 BICBICBI AT099000000009999999 Asdfjklöasdf Asdfjklöasdfjklöasdf ;02.01.2014;02.01.2014;-104,69;EUR
13
+ 00075757575;Abbuchung Onlinebanking FE/000002450 AT556600055665566556 CD Stadt Efghij Club Dipl.Ing. Max Muster M005566 - Mitgliedsbeitrag 2014 ;02.01.2014;02.01.2014;-39,00;EUR
@@ -0,0 +1 @@
1
+ "Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Shipping Address","Address Status","Item Title","Item ID","Shipping and Handling Amount","Insurance Amount","Sales Tax","Option 1 Name","Option 1 Value","Option 2 Name","Option 2 Value","Reference Txn ID","Invoice Number","Custom Number","Quantity","Receipt ID","Balance","Address Line 1","Address Line 2/District/Neighborhood","Town/City","State/Province/Region/County/Territory/Prefecture/Republic","Zip/Postal Code","Country","Contact Phone Number","Subject","Note","Country Code","Balance Impact"
@@ -0,0 +1,12 @@
1
+ 2014-02-10,2014-02-10,Interest,ISHARES S&P/TSX CAPPED REIT IN,XRE,179,,,12.55,CAD
2
+ 2014-01-16,2014-01-16,Reinvestment,ISHARES GLOBAL AGRICULTURE IND,COW,3,,,-81.57,CAD
3
+ 2014-01-16,2014-01-16,Contribution,CONTRIBUTION,,,,,600.00,CAD
4
+ 2014-01-16,2014-01-16,Interest,ISHARES GLOBAL AGRICULTURE IND,COW,200,,,87.05,CAD
5
+ 2014-01-14,2014-01-14,Reinvestment,BMO NASDAQ 100 EQTY HEDGED TO,ZQQ,2,,,-54.72,CAD
6
+ 2014-01-07,2014-01-10,Sell,BMO NASDAQ 100 EQTY HEDGED TO,ZQQ,-300,27.44,CDN,8222.05,CAD
7
+ 2014-01-07,2014-01-07,Interest,BMO S&P/TSX EQUAL WEIGHT BKS I,ZEB,250,,,14.00,CAD
8
+ 2013-07-02,2013-07-02,Dividend,SELECT SECTOR SPDR FD SHS BEN,XLB,130,,,38.70,USD
9
+ 2013-06-27,2013-06-27,Dividend,ICICI BK SPONSORED ADR,IBN,100,,,66.70,USD
10
+ 2013-06-19,2013-06-24,Buy,ISHARES S&P/TSX CAPPED REIT IN,XRE,300,15.90,CDN,-4779.95,CAD
11
+ 2013-06-17,2013-06-17,Contribution,CONTRIBUTION,,,,,600.00,CAD
12
+ 2013-05-22,2013-05-22,Dividend,NATBK,NA,70,,,58.10,CAD
@@ -0,0 +1,9 @@
1
+ DEBIT,20091224120000[0:GMT],"HOST 037196321563 MO 12/22SLICEHOST",-85.00
2
+ CHECK,20091224120000[0:GMT],"CHECK 2656",-20.00
3
+ DEBIT,20091224120000[0:GMT],"GITHUB 041287430274 CA 12/22GITHUB 04",-7.00
4
+ CREDIT,20091223120000[0:GMT],"Some Company vendorpymt PPD ID: 59728JSL20",3520.00
5
+ CREDIT,20091223120000[0:GMT],"Blarg BLARG REVENUE PPD ID: 00jah78563",1558.52
6
+ DEBIT,20091221120000[0:GMT],"WEBSITE-BALANCE-17DEC09 12 12/17WEBSITE-BAL",-12.23
7
+ DEBIT,20091214120000[0:GMT],"WEBSITE-BALANCE-10DEC09 12 12/10WEBSITE-BAL",-20.96
8
+ CREDIT,20091211120000[0:GMT],"PAYPAL TRANSFER PPD ID: PAYPALSDSL",-116.22
9
+ CREDIT,20091210120000[0:GMT],"Some Company vendorpymt PPD ID: 5KL3832735",2105.00
@@ -0,0 +1,6 @@
1
+ 16-11-2012;Dankort-nota DSB Kobenhavn 15149;16-11-2012;-48,00;26550,33
2
+ 26-10-2012;Dankort-nota Ziggy Cafe 19471;26-10-2012;-79,00;26054,54
3
+ 22-10-2012;Dankort-nota H&M Hennes & M 10681;23-10-2012;497,90;25433,54
4
+ 12-10-2012;Visa kob DKK 995,00 WWW.ASOS.COM 00000 ;12-10-2012;-995,00;27939,54
5
+ 12-09-2012;Dankort-nota B.J. TRADING E 14660;12-09-2012;-3452,90;26164,80
6
+ 27-08-2012;Dankort-nota MATAS - 20319 18230;27-08-2012;-655,00;21127,45
@@ -0,0 +1,3 @@
1
+ 24/12/2009,Check - 0000000122,122,-$76.00,"","$1,750.06"
2
+ 24/12/2009,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
3
+ 24/12/2009,Check - 0000000112,112,-$800.00,"","$1,498.57"
@@ -0,0 +1,9 @@
1
+ 01234567890;22/01/2014;CHEQUE 012345678901234578ABC000 0000 4381974748378178473744441;0000037;-10,00;
2
+ 01234567890;22/01/2014;CHEQUE 012345678901937845500TS1 0000 7439816947047874387438445;0000038;-5,76;
3
+ 01234567890;22/01/2014;CARTE 012345 CB:*0123456 XX XXXXXX XXX 33BORDEAUX;00X0X0X;-105,90;
4
+ 01234567890;22/01/2014;CARTE 012345 CB:*0123456 XXXXXXXXXXX 33SAINT ANDRE D;00X0X0X;-39,99;
5
+ 01234567890;22/01/2014;CARTE 012345 CB:*0123456 XXXXXXX XXXXX 33BORDEAUX;10X9X6X;-36,00;
6
+ 01234567890;22/01/2014;PRLV XXXXXXXX ABONNEMENT XXXXXXXXXXXXXX.NET N.EMETTEUR: 324411;0XX0XXX;-40,00;
7
+ 01234567890;21/01/2014;CARTE 012345 CB:*0123456 XXXXX XX33433ST ANDRE DE C;0POBUES;-47,12;
8
+ 01234567890;21/01/2014;CARTE 012345 CB:*0123456 XXXXXXXXXXXX33433ST ANDRE DE C;0POBUER;-27,02;
9
+ 01234567890;21/01/2014;CARTE 012345 CB:*0123456 XXXXXX XXXXXXXX33ST ANDRE 935/;0POBUEQ;-25,65;
@@ -0,0 +1,3 @@
1
+ 24.12.2009,Check - 0000000122,122,-$76.00,"","$1,750.06"
2
+ 24.12.2009,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
3
+ 24.12.2009,Check - 0000000112,112,-$800.00,"","$1,498.57"
@@ -0,0 +1,5 @@
1
+ 10-Nov-9,-123.12,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER MORTGAGE,0.00,
2
+ 09-Nov-10,123.12,,,SALARY SALARY,NGHSKS46383BGDJKD FOO BAR,432.12,
3
+ 04-Nov-11,-1234.00,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER SAV TO MECU,0.00,
4
+ 04-Nov-9,1234.00,,,TRANSFER CREDIT INTERNET TRANSFER,INTERNET TRANSFER,1234.00,
5
+ 28-Oct-10,-123.12,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER SAV TO MORTGAGE,0.00,
@@ -0,0 +1,3 @@
1
+ 20121115,From1,Acc,T1,IC,Af,"136,13",Incasso,SEPA Incasso, Opm1
2
+ 20121112,Names,NL28 INGB 1200 3244 16,21817,GT,Bij,"375,00", Opm2
3
+ 20091117,Names,NL28 INGB 1200 3244 16,21817,GT,Af,"257,50", Opm3
@@ -0,0 +1,7 @@
1
+ "12/10/2014","Dn Ing Inv","[DN]ING INV/PLA","0.01","credit","Investments","Chequing","",""
2
+ "2/03/2014","Ds Lms Msp Condo","[DS]LMS598 MSP/DIV","331.63","debit","Condo Fees","Chequing","",""
3
+ "2/10/2014","Ib Granville","[IB] 2601 GRANVILLE","100.00","debit","Uncategorized","Chequing","",""
4
+ "2/06/2014","So Pa","[SO]PA 0005191230116379851","140.72","debit","Mortgage & Rent","Chequing","",""
5
+ "2/03/2014","Dn Sun Life","[DN]SUN LIFE MSP/DIV","943.34","credit","Income","Chequing","",""
6
+ "1/30/2014","Transfer to CBT (Savings)","[CW] TF 0004#3409-797","500.00","debit","Transfer","Chequing","",""
7
+ "1/30/2014","Costco","[PR]COSTCO WHOLESAL","559.96","debit","Business Services","Chequing","",""
@@ -0,0 +1,6 @@
1
+ -
2
+ ="0234500012345678";21/11/2015;19/02/2016;36;19/02/2016;1234,37 EUR
3
+
4
+ Date de l'opération;Libellé;Détail de l'écriture;Montant de l'opération;Devise
5
+ 19/02/2016;VIR RECU 508160;VIR RECU 1234567834S DE: Francois REF: 123457891234567894561231 PROVENANCE: DE Allemagne ;50,00;EUR
6
+ 18/02/2016;COTISATION JAZZ;COTISATION JAZZ ;-8,10;EUR
@@ -0,0 +1,16 @@
1
+ 2013/01/17,2013/01/16,2013011702,DEBIT,2226,"VODAFONE PREPAY VISA M AUCKLAND NZL",30.00
2
+ 2013/01/18,2013/01/17,2013011801,DEBIT,2226,"WILSON PARKING AUCKLAND NZL",4.60
3
+ 2013/01/18,2013/01/17,2013011802,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",2.00
4
+ 2013/01/19,2013/01/19,2013011901,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-500.00
5
+ 2013/01/26,2013/01/23,2013012601,DEBIT,2226,"ITUNES NZ CORK IRL",64.99
6
+ 2013/01/26,2013/01/25,2013012602,DEBIT,2226,"VODAFONE FXFLNE BBND R NEWTON NZL",90.26
7
+ 2013/01/29,2013/01/29,2013012901,CREDIT,2101,"PAYMENT RECEIVED THANK YOU ",-27.75
8
+ 2013/01/30,2013/01/29,2013013001,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",3.50
9
+ 2013/02/05,2013/02/03,2013020501,DEBIT,2226,"Z BEACH RD AUCKLAND NZL",129.89
10
+ 2013/02/05,2013/02/03,2013020502,DEBIT,2226,"TOURNAMENT KHYBER PASS AUCKLAND NZL",8.00
11
+ 2013/02/05,2013/02/04,2013020503,DEBIT,2226,"VODAFONE PREPAY VISA M AUCKLAND NZL",30.00
12
+ 2013/02/08,2013/02/07,2013020801,DEBIT,2226,"AKLD TRANSPORT PARKING AUCKLAND NZL",2.50
13
+ 2013/02/08,2013/02/07,2013020802,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",3.50
14
+ 2013/02/12,2013/02/11,2013021201,DEBIT,2226,"AKLD TRANSPORT PARKING AUCKLAND NZL",1.50
15
+ 2013/02/17,2013/02/17,2013021701,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-12.00
16
+ 2013/02/17,2013/02/17,2013021702,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-18.00
@@ -0,0 +1,4 @@
1
+ 07 Nov 2013,Bank credit,Bank credit,,£500.00,£500.00
2
+ 09 Oct 2013,ATM Withdrawal,Withdrawal,£20.00,,£480.00
3
+ 09 Dec 2013,Visa,Supermarket,£19.77,,£460.23
4
+ 10 Dec 2013,ATM Withdrawal 2,ATM Withdrawal 4,£100.00,,£360.23
@@ -0,0 +1,2 @@
1
+ entry1,entry2,entry3
2
+ entry4,entry5,entry6
@@ -0,0 +1,9 @@
1
+ DEBIT,2011/12/24,"HOST 037196321563 MO 12/22SLICEHOST",($85.00)
2
+ CHECK,2010/12/24,"CHECK 2656",($20.00)
3
+ DEBIT,2009/12/24,"GITHUB 041287430274 CA 12/22GITHUB 04",($7.00)
4
+ CREDIT,2008/12/24,"Some Company vendorpymt PPD ID: 59728JSL20",$3520.00
5
+ CREDIT,2007/12/24,"Blarg BLARG REVENUE PPD ID: 00jah78563",$1558.52
6
+ DEBIT,2006/12/24,"WEBSITE-BALANCE-17DEC09 12 12/17WEBSITE-BAL",$.23
7
+ DEBIT,2005/12/24,"WEBSITE-BALANCE-10DEC09 12 12/10WEBSITE-BAL",($0.96)
8
+ CREDIT,2004/12/24,"PAYPAL TRANSFER PPD ID: PAYPALSDSL",($116.22)
9
+ CREDIT,2003/12/24,"Some Company vendorpymt PPD ID: 5KL3832735",$2105.00
@@ -0,0 +1,3 @@
1
+ 02/12/2009,Check - 0000000122,122,-$76.00,"","$1,750.06"
2
+ 02/12/2009,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
3
+ 02/12/2009,Check - 0000000112,112,-$800.00,"","$1,498.57"
@@ -0,0 +1,7 @@
1
+ 11/01/2014,0, Deposit,0,500.00,500.00
2
+ 11/02/2014,101,Check,100.00,0,400.00
3
+ 11/03/2014,102,Check,100.00,0,300.00
4
+ 11/04/2014,103,Check,100.00,0,200.00
5
+ 11/05/2014,104,Check,100.00,0,100.00
6
+ 11/06/2014,105,Check,100.00,0,0.00
7
+ 11/17/2014,0, Deposit,0,700.00,700.00
@@ -0,0 +1,3 @@
1
+ "Date","Note","Amount"
2
+ "2012/3/22","DEPOSIT","50.00"
3
+ "2012/3/23","TRANSFER TO SAVINGS","-10.00"
@@ -0,0 +1,5 @@
1
+ 4/1/2008,Check - 0000000122,122,-$76.00,"","$1,750.06"
2
+ 3/28/2008,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
3
+ 3/27/2008,Check - 0000000112,112,-$800.00,"","$1,498.57"
4
+ 3/26/2008,Check - 0000000251,251,-$88.55,"","$1,298.57"
5
+ 3/26/2008,Check - 0000000251,251,"","+$88.55","$1,298.57"
@@ -0,0 +1 @@
1
+ DEBIT,20121231,"ODESK***BAL-27DEC12 650-12345 CA 12/28",-123.45
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
  require 'rubygems'
@@ -8,18 +7,18 @@ require 'reckon'
8
7
  describe Reckon::App do
9
8
  context 'with chase csv input' do
10
9
  before do
11
- @chase = Reckon::App.new(:string => BANK_CSV)
12
- @chase.learn_from( BANK_LEDGER )
10
+ @chase = Reckon::App.new(string: BANK_CSV)
11
+ @chase.learn_from(BANK_LEDGER)
13
12
  @rows = []
14
- @chase.each_row_backwards { |row| @rows.push( row ) }
13
+ @chase.each_row_backwards { |row| @rows.push(row) }
15
14
  end
16
15
 
17
16
  describe "each_row_backwards" do
18
17
  it "should return rows with hashes" do
19
- @rows[0][:pretty_date].should == "2009/12/10"
18
+ @rows[0][:pretty_date].should == "2009-12-10"
20
19
  @rows[0][:pretty_money].should == " $2105.00"
21
20
  @rows[0][:description].should == "CREDIT; Some Company vendorpymt PPD ID: 5KL3832735"
22
- @rows[1][:pretty_date].should == "2009/12/11"
21
+ @rows[1][:pretty_date].should == "2009-12-11"
23
22
  @rows[1][:pretty_money].should == "-$116.22"
24
23
  @rows[1][:description].should == "CREDIT; PAYPAL TRANSFER PPD ID: PAYPALSDSL"
25
24
  end
@@ -27,53 +26,117 @@ describe Reckon::App do
27
26
 
28
27
  describe "weighted_account_match" do
29
28
  it "should guess the correct account" do
30
- @chase.weighted_account_match( @rows[7] ).first[:account].should == "Expenses:Books"
29
+ row = @rows.find { |n| n[:description] =~ /Book Store/ }
30
+
31
+ result = @chase.matcher.find_similar(row[:description]).first
32
+ expect(result[:account]).to eq("Expenses:Books")
33
+ expect(result[:similarity]).to be > 0.0
31
34
  end
32
35
  end
33
36
  end
34
37
 
35
38
  context 'unattended mode with chase csv input' do
36
- before do
37
- @output_file = StringIO.new
38
- @chase = Reckon::App.new(:string => BANK_CSV, :unattended => true, :output_file => @output_file)
39
- end
39
+ let(:output_file) { StringIO.new }
40
+ let(:chase) {
41
+ Reckon::App.new(
42
+ string: BANK_CSV,
43
+ unattended: true,
44
+ output_file: output_file,
45
+ bank_account: 'Assets:Bank:Checking'
46
+ )
47
+ }
40
48
 
41
49
  describe 'walk backwards' do
42
50
  it 'should assign Income:Unknown and Expenses:Unknown by default' do
43
- @chase.walk_backwards
44
- @output_file.string.scan('Expenses:Unknown').count.should == 6
45
- @output_file.string.scan('Income:Unknown').count.should == 3
51
+ chase.walk_backwards
52
+ expect(output_file.string.scan('Expenses:Unknown').count).to eq(5)
53
+ expect(output_file.string.scan('Income:Unknown').count).to eq(4)
46
54
  end
47
55
 
48
56
  it 'should change default account names' do
49
- @chase = Reckon::App.new(:string => BANK_CSV,
50
- :unattended => true,
51
- :output_file => @output_file,
52
- :default_into_account => 'Expenses:Default',
53
- :default_outof_account => 'Income:Default')
54
- @chase.walk_backwards
55
- @output_file.string.scan('Expenses:Default').count.should == 6
56
- @output_file.string.scan('Income:Default').count.should == 3
57
+ chase = Reckon::App.new(
58
+ string: BANK_CSV,
59
+ unattended: true,
60
+ output_file: output_file,
61
+ default_into_account: 'Expenses:Default',
62
+ default_outof_account: 'Income:Default',
63
+ bank_account: 'Assets:Bank:Checking',
64
+ )
65
+ chase.walk_backwards
66
+ expect(output_file.string.scan('Expenses:Default').count).to eq(5)
67
+ expect(output_file.string.scan('Income:Default').count).to eq(4)
57
68
  end
58
69
 
59
70
  it 'should learn from a ledger file' do
60
- @chase.learn_from( BANK_LEDGER )
61
- @chase.walk_backwards
62
- @output_file.string.scan('Expenses:Books').count.should == 1
71
+ chase.learn_from( BANK_LEDGER )
72
+ chase.walk_backwards
73
+ output_file.string.scan('Expenses:Books').count.should == 1
63
74
  end
64
75
 
65
76
  it 'should learn from an account tokens file and parse regexps' do
66
- @chase = Reckon::App.new(:string => BANK_CSV,
67
- :unattended => true,
68
- :output_file => @output_file,
69
- :account_tokens_file => 'spec/data_fixtures/tokens.yaml')
70
- @chase.walk_backwards
71
- @output_file.string.scan('Expenses:Books').count.should == 1
72
- @output_file.string.scan('Expenses:Websites').count.should == 2
77
+ chase = Reckon::App.new(
78
+ string: BANK_CSV,
79
+ unattended: true,
80
+ output_file: output_file,
81
+ account_tokens_file: fixture_path('tokens.yaml'),
82
+ bank_account: 'Assets:Bank:Checking',
83
+ )
84
+ chase.walk_backwards
85
+ expect(output_file.string.scan('Expenses:Books').count).to eq(1)
86
+ expect(output_file.string.scan('Expenses:Websites').count).to eq(2)
73
87
  end
74
88
  end
75
89
  end
76
90
 
91
+ context "Issue #73 - regression test" do
92
+ it "should categorize transaction correctly" do
93
+ output = StringIO.new
94
+ app = Reckon::App.new(
95
+ file: fixture_path('73-sample.csv'),
96
+ unattended: true,
97
+ account_tokens_file: fixture_path('73-tokens.yml'),
98
+ bank_account: "Liabilities:Credit Cards:Visa",
99
+ contains_header: 1,
100
+ ignore_column: [4],
101
+ date_format: '%m/%d/%Y',
102
+ output_file: output
103
+ )
104
+ app.walk_backwards
105
+
106
+ expect(output.string).to include('Expenses:Automotive:Car Wash')
107
+ end
108
+ end
109
+
110
+ context "Issue #64 - regression test" do
111
+ it 'should work for simple file' do
112
+ rows = []
113
+ app = Reckon::App.new(file: fixture_path('test_money_column.csv'))
114
+ expect { app.each_row_backwards { |n| rows << n } }
115
+ .to output(/Skipping row: 'Date, Note, Amount'/).to_stderr_from_any_process
116
+ expect(rows.length).to eq(2)
117
+ expect(rows[0][:pretty_date]).to eq('2012-03-22')
118
+ expect(rows[0][:pretty_money]).to eq(' $50.00')
119
+ expect(rows[1][:pretty_date]).to eq('2012-03-23')
120
+ expect(rows[1][:pretty_money]).to eq('-$10.00')
121
+ end
122
+ end
123
+
124
+ context 'Issue #51 - regression test' do
125
+ it 'should assign correct accounts with tokens' do
126
+ output = StringIO.new
127
+ Reckon::App.new(
128
+ file: fixture_path('51-sample.csv'),
129
+ unattended: true,
130
+ account_tokens_file: fixture_path('51-tokens.yml'),
131
+ ignore_columns: [5],
132
+ bank_account: 'Assets:Chequing',
133
+ output_file: output
134
+ ).walk_backwards
135
+ expect(output.string).not_to include('Income:Unknown')
136
+ expect(output.string.scan('Expenses:Dining:Resturant').size).to eq(8)
137
+ end
138
+ end
139
+
77
140
  #DATA
78
141
  BANK_CSV = (<<-CSV).strip
79
142
  DEBIT,20091224120000[0:GMT],"HOST 037196321563 MO 12/22SLICEHOST",-85.00
@@ -95,6 +158,5 @@ describe Reckon::App do
95
158
  2004/05/27 Book Store
96
159
  Expenses:Books $20.00
97
160
  Liabilities:MasterCard
98
- LEDGER
99
-
161
+ LEDGER
100
162
  end
@@ -1,53 +1,74 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
2
+ # coding: utf-8
3
3
 
4
- require "spec_helper"
4
+ require_relative "../spec_helper"
5
5
  require 'rubygems'
6
- require 'reckon'
7
-
8
- Reckon::CSVParser.settings[:testing] = true
6
+ require_relative '../../lib/reckon'
9
7
 
10
8
  describe Reckon::CSVParser do
11
- before do
12
- @chase = Reckon::CSVParser.new(:string => CHASE_CSV)
13
- @some_other_bank = Reckon::CSVParser.new(:string => SOME_OTHER_CSV)
14
- @two_money_columns = Reckon::CSVParser.new(:string => TWO_MONEY_COLUMNS_BANK)
15
- @suntrust_csv = Reckon::CSVParser.new(:string => SUNTRUST_CSV)
16
- @simple_csv = Reckon::CSVParser.new(:string => SIMPLE_CSV)
17
- @nationwide = Reckon::CSVParser.new( :string => NATIONWIDE_CSV, :csv_separator => ',', :suffixed => true, :currency => "POUND" )
18
- @german_date = Reckon::CSVParser.new(:string => GERMAN_DATE_EXAMPLE)
19
- @danish_kroner_nordea = Reckon::CSVParser.new(:string => DANISH_KRONER_NORDEA_EXAMPLE, :csv_separator => ';', :comma_separates_cents => true)
20
- @yyyymmdd_date = Reckon::CSVParser.new(:string => YYYYMMDD_DATE_EXAMPLE)
21
- @spanish_date = Reckon::CSVParser.new(:string => SPANISH_DATE_EXAMPLE, :date_format => '%d/%m/%Y')
22
- @english_date = Reckon::CSVParser.new(:string => ENGLISH_DATE_EXAMPLE)
23
- @ing_csv = Reckon::CSVParser.new(:string => ING_CSV, :comma_separates_cents => true )
24
- @austrian_csv = Reckon::CSVParser.new(:string => AUSTRIAN_EXAMPLE, :comma_separates_cents => true, :csv_separator => ';' )
25
- @french_csv = Reckon::CSVParser.new(:string => FRENCH_EXAMPLE, :csv_separator => ';', :comma_separates_cents => true)
26
- @broker_canada = Reckon::CSVParser.new(:string => BROKER_CANADA_EXAMPLE)
27
- @intuit_mint = Reckon::CSVParser.new(:string => INTUIT_MINT_EXAMPLE)
28
- end
29
-
30
- it "should be in testing mode" do
31
- @chase.settings[:testing].should be_true
32
- Reckon::CSVParser.settings[:testing].should be_true
33
- end
9
+ let(:chase) { Reckon::CSVParser.new(file: fixture_path('chase.csv')) }
10
+ let(:some_other_bank) { Reckon::CSVParser.new(file: fixture_path('some_other.csv')) }
11
+ let(:two_money_columns) { Reckon::CSVParser.new(file: fixture_path('two_money_columns.csv')) }
12
+ let(:suntrust_csv) { Reckon::CSVParser.new(file: fixture_path('suntrust.csv')) }
13
+ let(:simple_csv) { Reckon::CSVParser.new(file: fixture_path('simple.csv')) }
14
+ let(:nationwide) { Reckon::CSVParser.new(file: fixture_path('nationwide.csv'), csv_separator: ',', suffixed: true, currency: "POUND") }
15
+ let(:german_date) { Reckon::CSVParser.new(file: fixture_path('german_date_example.csv')) }
16
+ let(:danish_kroner_nordea) { Reckon::CSVParser.new(file: fixture_path('danish_kroner_nordea_example.csv'), csv_separator: ';', comma_separates_cents: true) }
17
+ let(:yyyymmdd_date) { Reckon::CSVParser.new(file: fixture_path('yyyymmdd_date_example.csv')) }
18
+ let(:spanish_date) { Reckon::CSVParser.new(file: fixture_path('spanish_date_example.csv'), date_format: '%d/%m/%Y') }
19
+ let(:english_date) { Reckon::CSVParser.new(file: fixture_path('english_date_example.csv')) }
20
+ let(:ing_csv) { Reckon::CSVParser.new(file: fixture_path('ing.csv'), comma_separates_cents: true ) }
21
+ let(:austrian_csv) { Reckon::CSVParser.new(file: fixture_path('austrian_example.csv'), comma_separates_cents: true, csv_separator: ';' ) }
22
+ let(:french_csv) { Reckon::CSVParser.new(file: fixture_path('french_example.csv'), csv_separator: ';', comma_separates_cents: true) }
23
+ let(:broker_canada) { Reckon::CSVParser.new(file: fixture_path('broker_canada_example.csv')) }
24
+ let(:intuit_mint) { Reckon::CSVParser.new(file: fixture_path('intuit_mint_example.csv')) }
34
25
 
35
26
  describe "parse" do
27
+ it "should use binary encoding if none specified and chardet fails" do
28
+ allow(CharDet).to receive(:detect).and_return({'encoding' => nil})
29
+ app = Reckon::CSVParser.new(file: fixture_path("extratofake.csv"))
30
+ expect(app.send(:try_encoding, "foobarbaz")).to eq("BINARY")
31
+ end
32
+
36
33
  it "should work with foreign character encodings" do
37
- app = Reckon::CSVParser.new(:file => File.expand_path(File.join(File.dirname(__FILE__), "..", "data_fixtures", "extratofake.csv")))
34
+ app = Reckon::CSVParser.new(file: fixture_path("extratofake.csv"))
38
35
  app.columns[0][0..2].should == ["Data", "10/31/2012", "11/01/2012"]
39
- app.columns[2].first.should == "Hist?rico"
36
+ app.columns[2].first.should == "Histórico"
40
37
  end
41
38
 
42
39
  it "should work with other separators" do
43
40
  Reckon::CSVParser.new(:string => "one;two\nthree;four", :csv_separator => ';').columns.should == [['one', 'three'], ['two', 'four']]
44
41
  end
42
+
43
+ it 'should parse quoted lines' do
44
+ file = %q("30.03.2015";"29.03.2015";"09.04.2015";"BARAUSZAHLUNGSENTGELT";"5266 xxxx xxxx 9454";"";"0";"EUR";"0,00";"EUR";"-3,50";"0")
45
+ Reckon::CSVParser.new(string: file, csv_separator: ';', comma_separates_cents: true).columns.length.should == 12
46
+ end
47
+
48
+ it 'should parse csv with BOM' do
49
+ file = File.expand_path(fixture_path("bom_utf8_file.csv"))
50
+ Reckon::CSVParser.new(file: file).columns.length.should == 41
51
+ end
52
+
53
+ describe 'file with invalid csv in header' do
54
+ let(:invalid_file) { fixture_path('invalid_header_example.csv') }
55
+
56
+ it 'should ignore invalid header lines' do
57
+ Reckon::CSVParser.new(file: invalid_file, contains_header: 4)
58
+ end
59
+
60
+ it 'should fail' do
61
+ expect { Reckon::CSVParser.new(file: invalid_file, contains_header: 1) }.to(
62
+ raise_error(CSV::MalformedCSVError)
63
+ )
64
+ end
65
+ end
45
66
  end
46
67
 
47
68
  describe "columns" do
48
69
  it "should return the csv transposed" do
49
- @simple_csv.columns.should == [["entry1", "entry4"], ["entry2", "entry5"], ["entry3", "entry6"]]
50
- @chase.columns.length.should == 4
70
+ simple_csv.columns.should == [["entry1", "entry4"], ["entry2", "entry5"], ["entry3", "entry6"]]
71
+ chase.columns.length.should == 4
51
72
  end
52
73
 
53
74
  it "should be ok with empty lines" do
@@ -58,81 +79,89 @@ describe Reckon::CSVParser do
58
79
  end
59
80
 
60
81
  describe "detect_columns" do
61
- before do
62
- @harder_date_example_csv = Reckon::CSVParser.new(:string => HARDER_DATE_EXAMPLE)
63
- end
82
+ let(:harder_date_example_csv) { Reckon::CSVParser.new(file: fixture_path('harder_date_example.csv')) }
64
83
 
65
84
  it "should detect the money column" do
66
- @chase.money_column_indices.should == [3]
67
- @some_other_bank.money_column_indices.should == [3]
68
- @two_money_columns.money_column_indices.should == [3, 4]
69
- @suntrust_csv.money_column_indices.should == [3, 4]
70
- @nationwide.money_column_indices.should == [3, 4]
71
- @harder_date_example_csv.money_column_indices.should == [1]
72
- @danish_kroner_nordea.money_column_indices.should == [3]
73
- @yyyymmdd_date.money_column_indices.should == [3]
74
- @ing_csv.money_column_indices.should == [6]
75
- @austrian_csv.money_column_indices.should == [4]
76
- @french_csv.money_column_indices.should == [6]
77
- @broker_canada.money_column_indices.should == [8]
78
- @intuit_mint.money_column_indices.should == [3]
85
+ chase.money_column_indices.should == [3]
86
+ some_other_bank.money_column_indices.should == [3]
87
+ two_money_columns.money_column_indices.should == [3, 4]
88
+ suntrust_csv.money_column_indices.should == [3, 4]
89
+ nationwide.money_column_indices.should == [3, 4]
90
+ harder_date_example_csv.money_column_indices.should == [1]
91
+ danish_kroner_nordea.money_column_indices.should == [3]
92
+ yyyymmdd_date.money_column_indices.should == [3]
93
+ ing_csv.money_column_indices.should == [6]
94
+ austrian_csv.money_column_indices.should == [4]
95
+ french_csv.money_column_indices.should == [4]
96
+ broker_canada.money_column_indices.should == [8]
97
+ intuit_mint.money_column_indices.should == [3]
79
98
  end
80
99
 
81
100
  it "should detect the date column" do
82
- @chase.date_column_index.should == 1
83
- @some_other_bank.date_column_index.should == 1
84
- @two_money_columns.date_column_index.should == 0
85
- @harder_date_example_csv.date_column_index.should == 0
86
- @danish_kroner_nordea.date_column_index.should == 0
87
- @yyyymmdd_date.date_column_index.should == 1
88
- @french_csv.date_column_index.should == 2
89
- @broker_canada.date_column_index.should == 0
90
- @intuit_mint.date_column_index.should == 0
101
+ chase.date_column_index.should == 1
102
+ some_other_bank.date_column_index.should == 1
103
+ two_money_columns.date_column_index.should == 0
104
+ harder_date_example_csv.date_column_index.should == 0
105
+ danish_kroner_nordea.date_column_index.should == 0
106
+ yyyymmdd_date.date_column_index.should == 1
107
+ french_csv.date_column_index.should == 1
108
+ broker_canada.date_column_index.should == 0
109
+ intuit_mint.date_column_index.should == 0
91
110
  Reckon::CSVParser.new(:string => '2014-01-13,"22211100000",-10').date_column_index.should == 0
92
111
  end
93
112
 
94
113
  it "should consider all other columns to be description columns" do
95
- @chase.description_column_indices.should == [0, 2]
96
- @some_other_bank.description_column_indices.should == [0, 2]
97
- @two_money_columns.description_column_indices.should == [1, 2, 5]
98
- @harder_date_example_csv.description_column_indices.should == [2, 3, 4, 5, 6, 7]
99
- @danish_kroner_nordea.description_column_indices.should == [1, 2, 4]
100
- @yyyymmdd_date.description_column_indices.should == [0, 2]
114
+ chase.description_column_indices.should == [0, 2]
115
+ some_other_bank.description_column_indices.should == [0, 2]
116
+ two_money_columns.description_column_indices.should == [1, 2, 5]
117
+ harder_date_example_csv.description_column_indices.should == [2, 3, 4, 5, 6, 7]
118
+ danish_kroner_nordea.description_column_indices.should == [1, 2, 4]
119
+ yyyymmdd_date.description_column_indices.should == [0, 2]
120
+ end
121
+ end
122
+
123
+ describe "money_column_indicies" do
124
+ it "should prefer the option over the heuristic" do
125
+ chase = Reckon::CSVParser.new(file: fixture_path('chase.csv'))
126
+ expect(chase.money_column_indices).to eq([3])
127
+
128
+ chase = Reckon::CSVParser.new(file: fixture_path('chase.csv'), money_column: 2)
129
+ expect(chase.money_column_indices).to eq([1])
101
130
  end
102
131
  end
103
132
 
104
133
  describe "money_for" do
105
134
  it "should return the appropriate fields" do
106
- @chase.money_for(1).should == -20
107
- @chase.money_for(4).should == 1558.52
108
- @chase.money_for(7).should == -116.22
109
- @some_other_bank.money_for(1).should == -20
110
- @some_other_bank.money_for(4).should == 1558.52
111
- @some_other_bank.money_for(7).should == -116.22
112
- @two_money_columns.money_for(0).should == -76
113
- @two_money_columns.money_for(1).should == 327.49
114
- @two_money_columns.money_for(2).should == -800
115
- @two_money_columns.money_for(3).should == -88.55
116
- @two_money_columns.money_for(4).should == 88.55
117
- @nationwide.money_for(0).should == 500.00
118
- @nationwide.money_for(1).should == -20.00
119
- @danish_kroner_nordea.money_for(0).should == -48.00
120
- @danish_kroner_nordea.money_for(1).should == -79.00
121
- @danish_kroner_nordea.money_for(2).should == 497.90
122
- @danish_kroner_nordea.money_for(3).should == -995.00
123
- @danish_kroner_nordea.money_for(4).should == -3452.90
124
- @danish_kroner_nordea.money_for(5).should == -655.00
125
- @yyyymmdd_date.money_for(0).should == -123.45
126
- @ing_csv.money_for(0).should == -136.13
127
- @ing_csv.money_for(1).should == 375.00
128
- @austrian_csv.money_for(0).should == -18.00
129
- @austrian_csv.money_for(2).should == 120.00
130
- @french_csv.money_for(0).should == -10.00
131
- @french_csv.money_for(1).should == -5.76
132
- @broker_canada.money_for(0).should == 12.55
133
- @broker_canada.money_for(1).should == -81.57
134
- @intuit_mint.money_for(0).should == 0.01
135
- @intuit_mint.money_for(1).should == -331.63
135
+ chase.money_for(1).should == -20
136
+ chase.money_for(4).should == 1558.52
137
+ chase.money_for(7).should == -116.22
138
+ some_other_bank.money_for(1).should == -20
139
+ some_other_bank.money_for(4).should == 1558.52
140
+ some_other_bank.money_for(7).should == -116.22
141
+ two_money_columns.money_for(0).should == -76
142
+ two_money_columns.money_for(1).should == 327.49
143
+ two_money_columns.money_for(2).should == -800
144
+ two_money_columns.money_for(3).should == -88.55
145
+ two_money_columns.money_for(4).should == 88.55
146
+ nationwide.money_for(0).should == 500.00
147
+ nationwide.money_for(1).should == -20.00
148
+ danish_kroner_nordea.money_for(0).should == -48.00
149
+ danish_kroner_nordea.money_for(1).should == -79.00
150
+ danish_kroner_nordea.money_for(2).should == 497.90
151
+ danish_kroner_nordea.money_for(3).should == -995.00
152
+ danish_kroner_nordea.money_for(4).should == -3452.90
153
+ danish_kroner_nordea.money_for(5).should == -655.00
154
+ yyyymmdd_date.money_for(0).should == -123.45
155
+ ing_csv.money_for(0).should == -136.13
156
+ ing_csv.money_for(1).should == 375.00
157
+ austrian_csv.money_for(0).should == -18.00
158
+ austrian_csv.money_for(2).should == 120.00
159
+ french_csv.money_for(0).should == -10.00
160
+ french_csv.money_for(1).should == -5.76
161
+ broker_canada.money_for(0).should == 12.55
162
+ broker_canada.money_for(1).should == -81.57
163
+ intuit_mint.money_for(0).should == 0.01
164
+ intuit_mint.money_for(1).should == -331.63
136
165
  end
137
166
 
138
167
  it "should handle the comma_separates_cents option correctly" do
@@ -142,71 +171,85 @@ describe Reckon::CSVParser do
142
171
  end
143
172
 
144
173
  it "should return negated values if the inverse option is passed" do
145
- inversed_csv = Reckon::CSVParser.new(:string => INVERSED_CREDIT_CARD, :inverse => true)
174
+ inversed_csv = Reckon::CSVParser.new(file: fixture_path('inversed_credit_card.csv'), inverse: true)
146
175
  inversed_csv.money_for(0).should == -30.00
147
176
  inversed_csv.money_for(3).should == 500.00
148
177
  end
149
178
  end
150
179
 
180
+ describe "date_column_index" do
181
+ it "should prefer the option over the heuristic" do
182
+ chase = Reckon::CSVParser.new(file: fixture_path('chase.csv'))
183
+ expect(chase.date_column_index).to eq(1)
184
+
185
+ chase = Reckon::CSVParser.new(file: fixture_path('chase.csv'), date_column: 3)
186
+ expect(chase.date_column_index).to eq(2)
187
+ end
188
+ end
189
+
151
190
  describe "date_for" do
152
191
  it "should return a parsed date object" do
153
- @chase.date_for(1).year.should == Time.parse("2009/12/24").year
154
- @chase.date_for(1).month.should == Time.parse("2009/12/24").month
155
- @chase.date_for(1).day.should == Time.parse("2009/12/24").day
156
- @some_other_bank.date_for(1).year.should == Time.parse("2010/12/24").year
157
- @some_other_bank.date_for(1).month.should == Time.parse("2010/12/24").month
158
- @some_other_bank.date_for(1).day.should == Time.parse("2010/12/24").day
159
- @german_date.date_for(1).year.should == Time.parse("2009/12/24").year
160
- @german_date.date_for(1).month.should == Time.parse("2009/12/24").month
161
- @german_date.date_for(1).day.should == Time.parse("2009/12/24").day
162
- @danish_kroner_nordea.date_for(0).year.should == Time.parse("2012/11/16").year
163
- @danish_kroner_nordea.date_for(0).month.should == Time.parse("2012/11/16").month
164
- @danish_kroner_nordea.date_for(0).day.should == Time.parse("2012/11/16").day
165
- @yyyymmdd_date.date_for(0).year.should == Time.parse("2012/12/31").year
166
- @yyyymmdd_date.date_for(0).month.should == Time.parse("2012/12/31").month
167
- @yyyymmdd_date.date_for(0).day.should == Time.parse("2012/12/31").day
168
- @spanish_date.date_for(1).year.should == Time.parse("2009/12/02").year
169
- @spanish_date.date_for(1).month.should == Time.parse("2009/12/02").month
170
- @spanish_date.date_for(1).day.should == Time.parse("2009/12/02").day
171
- @english_date.date_for(1).year.should == Time.parse("2009/12/24").year
172
- @english_date.date_for(1).month.should == Time.parse("2009/12/24").month
173
- @english_date.date_for(1).day.should == Time.parse("2009/12/24").day
174
- @nationwide.date_for(1).month.should == 10
175
- @ing_csv.date_for(1).month.should == Time.parse("2012/11/12").month
176
- @ing_csv.date_for(1).day.should == Time.parse("2012/11/12").day
177
- @broker_canada.date_for(5).year.should == 2014
178
- @broker_canada.date_for(5).month.should == 1
179
- @broker_canada.date_for(5).day.should == 7
180
- @intuit_mint.date_for(1).year.should == 2014
181
- @intuit_mint.date_for(1).month.should == 2
182
- @intuit_mint.date_for(1).day.should == 3
192
+ chase.date_for(1).year.should == Time.parse("2009/12/24").year
193
+ chase.date_for(1).month.should == Time.parse("2009/12/24").month
194
+ chase.date_for(1).day.should == Time.parse("2009/12/24").day
195
+ some_other_bank.date_for(1).year.should == Time.parse("2010/12/24").year
196
+ some_other_bank.date_for(1).month.should == Time.parse("2010/12/24").month
197
+ some_other_bank.date_for(1).day.should == Time.parse("2010/12/24").day
198
+ german_date.date_for(1).year.should == Time.parse("2009/12/24").year
199
+ german_date.date_for(1).month.should == Time.parse("2009/12/24").month
200
+ german_date.date_for(1).day.should == Time.parse("2009/12/24").day
201
+ danish_kroner_nordea.date_for(0).year.should == Time.parse("2012/11/16").year
202
+ danish_kroner_nordea.date_for(0).month.should == Time.parse("2012/11/16").month
203
+ danish_kroner_nordea.date_for(0).day.should == Time.parse("2012/11/16").day
204
+ yyyymmdd_date.date_for(0).year.should == Time.parse("2012/12/31").year
205
+ yyyymmdd_date.date_for(0).month.should == Time.parse("2012/12/31").month
206
+ yyyymmdd_date.date_for(0).day.should == Time.parse("2012/12/31").day
207
+ spanish_date.date_for(1).year.should == Time.parse("2009/12/02").year
208
+ spanish_date.date_for(1).month.should == Time.parse("2009/12/02").month
209
+ spanish_date.date_for(1).day.should == Time.parse("2009/12/02").day
210
+ english_date.date_for(1).year.should == Time.parse("2009/12/24").year
211
+ english_date.date_for(1).month.should == Time.parse("2009/12/24").month
212
+ english_date.date_for(1).day.should == Time.parse("2009/12/24").day
213
+ nationwide.date_for(1).month.should == 10
214
+ ing_csv.date_for(1).month.should == Time.parse("2012/11/12").month
215
+ ing_csv.date_for(1).day.should == Time.parse("2012/11/12").day
216
+ broker_canada.date_for(5).year.should == 2014
217
+ broker_canada.date_for(5).month.should == 1
218
+ broker_canada.date_for(5).day.should == 7
219
+ intuit_mint.date_for(1).year.should == 2014
220
+ intuit_mint.date_for(1).month.should == 2
221
+ intuit_mint.date_for(1).day.should == 3
183
222
  end
184
223
  end
185
224
 
186
225
  describe "description_for" do
187
226
  it "should return the combined fields that are not money for date fields" do
188
- @chase.description_for(1).should == "CHECK; CHECK 2656"
189
- @chase.description_for(7).should == "CREDIT; PAYPAL TRANSFER PPD ID: PAYPALSDSL"
227
+ chase.description_for(1).should == "CHECK; CHECK 2656"
228
+ chase.description_for(7).should == "CREDIT; PAYPAL TRANSFER PPD ID: PAYPALSDSL"
190
229
  end
191
230
 
192
231
  it "should not append empty description column" do
193
232
  parser = Reckon::CSVParser.new(:string => '01/09/2015,05354 SUBWAY,8.19,,',:date_format => '%d/%m/%Y')
194
- parser.description_column_indices.should == [1, 4]
195
233
  parser.description_for(0).should == '05354 SUBWAY'
196
234
  end
235
+
236
+ it "should handle nil description" do
237
+ parser = Reckon::CSVParser.new(string: '2015-09-01,test,3.99')
238
+ expect(parser.description_for(1)).to eq("")
239
+ end
197
240
  end
198
241
 
199
242
  describe "pretty_money_for" do
200
243
  it "work with negative and positive numbers" do
201
- @some_other_bank.pretty_money_for(1).should == "-$20.00"
202
- @some_other_bank.pretty_money_for(4).should == " $1558.52"
203
- @some_other_bank.pretty_money_for(7).should == "-$116.22"
204
- @some_other_bank.pretty_money_for(5).should == " $0.23"
205
- @some_other_bank.pretty_money_for(6).should == "-$0.96"
244
+ some_other_bank.pretty_money_for(1).should == "-$20.00"
245
+ some_other_bank.pretty_money_for(4).should == " $1558.52"
246
+ some_other_bank.pretty_money_for(7).should == "-$116.22"
247
+ some_other_bank.pretty_money_for(5).should == " $0.23"
248
+ some_other_bank.pretty_money_for(6).should == "-$0.96"
206
249
  end
207
250
 
208
251
  it "work with other currencies such as €" do
209
- euro_bank = Reckon::CSVParser.new(:string => SOME_OTHER_CSV, :currency => "€", :suffixed => false )
252
+ euro_bank = Reckon::CSVParser.new(file: fixture_path('some_other.csv'), currency: "€", suffixed: false )
210
253
  euro_bank.pretty_money_for(1).should == "-€20.00"
211
254
  euro_bank.pretty_money_for(4).should == " €1558.52"
212
255
  euro_bank.pretty_money_for(7).should == "-€116.22"
@@ -215,7 +258,7 @@ describe Reckon::CSVParser do
215
258
  end
216
259
 
217
260
  it "work with suffixed currencies such as SEK" do
218
- swedish_bank = Reckon::CSVParser.new(:string => SOME_OTHER_CSV, :currency => 'SEK', :suffixed => true )
261
+ swedish_bank = Reckon::CSVParser.new(file: fixture_path('some_other.csv'), currency: 'SEK', suffixed: true )
219
262
  swedish_bank.pretty_money_for(1).should == "-20.00 SEK"
220
263
  swedish_bank.pretty_money_for(4).should == " 1558.52 SEK"
221
264
  swedish_bank.pretty_money_for(7).should == "-116.22 SEK"
@@ -224,180 +267,15 @@ describe Reckon::CSVParser do
224
267
  end
225
268
 
226
269
  it "should work with merge columns" do
227
- @nationwide.pretty_money_for(0).should == " 500.00 POUND"
228
- @nationwide.pretty_money_for(1).should == "-20.00 POUND"
270
+ nationwide.pretty_money_for(0).should == " 500.00 POUND"
271
+ nationwide.pretty_money_for(1).should == "-20.00 POUND"
229
272
  end
230
273
  end
231
274
 
232
- # Data
233
-
234
- SIMPLE_CSV = "entry1,entry2,entry3\nentry4,entry5,entry6"
235
-
236
- CHASE_CSV = (<<-CSV).strip
237
- DEBIT,20091224120000[0:GMT],"HOST 037196321563 MO 12/22SLICEHOST",-85.00
238
- CHECK,20091224120000[0:GMT],"CHECK 2656",-20.00
239
- DEBIT,20091224120000[0:GMT],"GITHUB 041287430274 CA 12/22GITHUB 04",-7.00
240
- CREDIT,20091223120000[0:GMT],"Some Company vendorpymt PPD ID: 59728JSL20",3520.00
241
- CREDIT,20091223120000[0:GMT],"Blarg BLARG REVENUE PPD ID: 00jah78563",1558.52
242
- DEBIT,20091221120000[0:GMT],"WEBSITE-BALANCE-17DEC09 12 12/17WEBSITE-BAL",-12.23
243
- DEBIT,20091214120000[0:GMT],"WEBSITE-BALANCE-10DEC09 12 12/10WEBSITE-BAL",-20.96
244
- CREDIT,20091211120000[0:GMT],"PAYPAL TRANSFER PPD ID: PAYPALSDSL",-116.22
245
- CREDIT,20091210120000[0:GMT],"Some Company vendorpymt PPD ID: 5KL3832735",2105.00
246
- CSV
247
-
248
- SOME_OTHER_CSV = (<<-CSV).strip
249
- DEBIT,2011/12/24,"HOST 037196321563 MO 12/22SLICEHOST",($85.00)
250
- CHECK,2010/12/24,"CHECK 2656",($20.00)
251
- DEBIT,2009/12/24,"GITHUB 041287430274 CA 12/22GITHUB 04",($7.00)
252
- CREDIT,2008/12/24,"Some Company vendorpymt PPD ID: 59728JSL20",$3520.00
253
- CREDIT,2007/12/24,"Blarg BLARG REVENUE PPD ID: 00jah78563",$1558.52
254
- DEBIT,2006/12/24,"WEBSITE-BALANCE-17DEC09 12 12/17WEBSITE-BAL",$.23
255
- DEBIT,2005/12/24,"WEBSITE-BALANCE-10DEC09 12 12/10WEBSITE-BAL",($0.96)
256
- CREDIT,2004/12/24,"PAYPAL TRANSFER PPD ID: PAYPALSDSL",($116.22)
257
- CREDIT,2003/12/24,"Some Company vendorpymt PPD ID: 5KL3832735",$2105.00
258
- CSV
259
-
260
- INVERSED_CREDIT_CARD = (<<-CSV).strip
261
- 2013/01/17,2013/01/16,2013011702,DEBIT,2226,"VODAFONE PREPAY VISA M AUCKLAND NZL",30.00
262
- 2013/01/18,2013/01/17,2013011801,DEBIT,2226,"WILSON PARKING AUCKLAND NZL",4.60
263
- 2013/01/18,2013/01/17,2013011802,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",2.00
264
- 2013/01/19,2013/01/19,2013011901,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-500.00
265
- 2013/01/26,2013/01/23,2013012601,DEBIT,2226,"ITUNES NZ CORK IRL",64.99
266
- 2013/01/26,2013/01/25,2013012602,DEBIT,2226,"VODAFONE FXFLNE BBND R NEWTON NZL",90.26
267
- 2013/01/29,2013/01/29,2013012901,CREDIT,2101,"PAYMENT RECEIVED THANK YOU ",-27.75
268
- 2013/01/30,2013/01/29,2013013001,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",3.50
269
- 2013/02/05,2013/02/03,2013020501,DEBIT,2226,"Z BEACH RD AUCKLAND NZL",129.89
270
- 2013/02/05,2013/02/03,2013020502,DEBIT,2226,"TOURNAMENT KHYBER PASS AUCKLAND NZL",8.00
271
- 2013/02/05,2013/02/04,2013020503,DEBIT,2226,"VODAFONE PREPAY VISA M AUCKLAND NZL",30.00
272
- 2013/02/08,2013/02/07,2013020801,DEBIT,2226,"AKLD TRANSPORT PARKING AUCKLAND NZL",2.50
273
- 2013/02/08,2013/02/07,2013020802,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",3.50
274
- 2013/02/12,2013/02/11,2013021201,DEBIT,2226,"AKLD TRANSPORT PARKING AUCKLAND NZL",1.50
275
- 2013/02/17,2013/02/17,2013021701,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-12.00
276
- 2013/02/17,2013/02/17,2013021702,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-18.00
277
- CSV
278
-
279
- TWO_MONEY_COLUMNS_BANK = (<<-CSV).strip
280
- 4/1/2008,Check - 0000000122,122,-$76.00,"","$1,750.06"
281
- 3/28/2008,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
282
- 3/27/2008,Check - 0000000112,112,-$800.00,"","$1,498.57"
283
- 3/26/2008,Check - 0000000251,251,-$88.55,"","$1,298.57"
284
- 3/26/2008,Check - 0000000251,251,"","+$88.55","$1,298.57"
285
- CSV
286
-
287
- SUNTRUST_CSV = (<<-CSV).strip
288
- 11/01/2014,0, Deposit,0,500.00,500.00
289
- 11/02/2014,101,Check,100.00,0,400.00
290
- 11/03/2014,102,Check,100.00,0,300.00
291
- 11/04/2014,103,Check,100.00,0,200.00
292
- 11/05/2014,104,Check,100.00,0,100.00
293
- 11/06/2014,105,Check,100.00,0,0.00
294
- 11/17/2014,0, Deposit,0,700.00,700.00
295
- CSV
296
-
297
- NATIONWIDE_CSV = (<<-CSV).strip
298
- 07 Nov 2013,Bank credit,Bank credit,,£500.00,£500.00
299
- 09 Oct 2013,ATM Withdrawal,Withdrawal,£20.00,,£480.00
300
- 09 Dec 2013,Visa,Supermarket,£19.77,,£460.23
301
- 10 Dec 2013,ATM Withdrawal 2,ATM Withdrawal 4,£100.00,,£360.23
302
- CSV
303
-
304
- ING_CSV = (<<-CSV).strip
305
- 20121115,From1,Acc,T1,IC,Af,"136,13",Incasso,SEPA Incasso, Opm1
306
- 20121112,Names,NL28 INGB 1200 3244 16,21817,GT,Bij,"375,00", Opm2
307
- 20091117,Names,NL28 INGB 1200 3244 16,21817,GT,Af,"257,50", Opm3
308
- CSV
309
-
310
- HARDER_DATE_EXAMPLE = (<<-CSV).strip
311
- 10-Nov-9,-123.12,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER MORTGAGE,0.00,
312
- 09-Nov-10,123.12,,,SALARY SALARY,NGHSKS46383BGDJKD FOO BAR,432.12,
313
- 04-Nov-11,-1234.00,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER SAV TO MECU,0.00,
314
- 04-Nov-9,1234.00,,,TRANSFER CREDIT INTERNET TRANSFER,INTERNET TRANSFER,1234.00,
315
- 28-Oct-10,-123.12,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER SAV TO MORTGAGE,0.00,
316
- CSV
317
-
318
- GERMAN_DATE_EXAMPLE = (<<-CSV).strip
319
- 24.12.2009,Check - 0000000122,122,-$76.00,"","$1,750.06"
320
- 24.12.2009,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
321
- 24.12.2009,Check - 0000000112,112,-$800.00,"","$1,498.57"
322
- CSV
323
-
324
- DANISH_KRONER_NORDEA_EXAMPLE = (<<-CSV).strip
325
- 16-11-2012;Dankort-nota DSB Kobenhavn 15149;16-11-2012;-48,00;26550,33
326
- 26-10-2012;Dankort-nota Ziggy Cafe 19471;26-10-2012;-79,00;26054,54
327
- 22-10-2012;Dankort-nota H&M Hennes & M 10681;23-10-2012;497,90;25433,54
328
- 12-10-2012;Visa kob DKK 995,00 WWW.ASOS.COM 00000 ;12-10-2012;-995,00;27939,54
329
- 12-09-2012;Dankort-nota B.J. TRADING E 14660;12-09-2012;-3452,90;26164,80
330
- 27-08-2012;Dankort-nota MATAS - 20319 18230;27-08-2012;-655,00;21127,45
331
- CSV
332
-
333
- YYYYMMDD_DATE_EXAMPLE = (<<-CSV).strip
334
- DEBIT,20121231,"ODESK***BAL-27DEC12 650-12345 CA 12/28",-123.45
335
- CSV
336
-
337
- SPANISH_DATE_EXAMPLE = (<<-CSV).strip
338
- 02/12/2009,Check - 0000000122,122,-$76.00,"","$1,750.06"
339
- 02/12/2009,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
340
- 02/12/2009,Check - 0000000112,112,-$800.00,"","$1,498.57"
341
- CSV
342
-
343
- ENGLISH_DATE_EXAMPLE = (<<-CSV).strip
344
- 24/12/2009,Check - 0000000122,122,-$76.00,"","$1,750.06"
345
- 24/12/2009,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
346
- 24/12/2009,Check - 0000000112,112,-$800.00,"","$1,498.57"
347
- CSV
348
-
349
- AUSTRIAN_EXAMPLE = (<<-CSV).strip
350
- 00075757575;Abbuchung Onlinebanking 654321098765 BG/000002462 BICBICBI AT654000000065432109 Thematische Universität Stadt ;22.01.2014;22.01.2014;-18,00;EUR
351
- 00075757575;333222111333222 222111333222 OG/000002461 BICBICBIXXX AT333000000003332221 Telekom Land AG RECHNUNG 11/13 333222111333222 ;17.01.2014;17.01.2014;-9,05;EUR
352
- 00075757575;Helm BG/000002460 10000 00007878787 Muster Dr.Beispiel-Vorname ;15.01.2014;15.01.2014;+120,00;EUR
353
- 00075757575;Gutschrift Dauerauftrag BG/000002459 BICBICBI AT787000000007878787 Muster Dr.Beispiel-Vorname ;15.01.2014;15.01.2014;+22,00;EUR
354
- 00075757575;Bezahlung Bankomat MC/000002458 0001 K1 06.01.UM 18.11 Bahn 8020 FSA\\Ort\10 10 2002200EUR ;07.01.2014;06.01.2014;-37,60;EUR
355
- 00075757575;Bezahlung Bankomat 10.33 MC/000002457 0001 K1 02.01.UM 10.33 Abcdef Electronic\\Wie n\1150 0400444 ;03.01.2014;02.01.2014;-46,42;EUR
356
- 00075757575;050055556666000 OG/000002456 BKAUATWWXXX AT555500000555566665 JKL Telekommm Stadt GmbH JKL Rechnung 555666555 ;03.01.2014;03.01.2014;-17,15;EUR
357
- 00075757575;Abbuchung Einzugsermächtigung OG/000002455 INTERNATIONALER AUTOMOBIL-, 10000 00006655665 ;02.01.2014;02.01.2014;-17,40;EUR
358
- 00075757575;POLIZZE 1/01/0101010 Fondsge010101010101nsverOG/000002454 BICBICBIXXX AT101000000101010101 VERSICHERUNG NAMEDERV AG POLIZZE 1/01/0101010 Fondsgebundene Lebensversicherung - fällig 01.01. 2014 Folg eprämie ;02.01.2014;02.01.2014;-31,71;EUR
359
- 00075757575;POLIZZE 1/01/0101012 Rentenv010101010102- fälOG/000002453 BICBICBIXXX AT101000000101010102 VERSICHERUNG NAMEDERV AG POLIZZE 1/01/0101012 Rentenversicherung - fällig 01.01.20 14 Folgeprämi e ;02.01.2014;02.01.2014;-32,45;EUR
360
- 00075757575;Anlass VD/000002452 BKAUATWWBRN AT808800080880880880 Dipl.Ing.Dr. Berta Beispiel ;02.01.2014;02.01.2014;+61,90;EUR
361
- 00075757575;Abbuchung Onlinebanking 000009999999 BG/000002451 BICBICBI AT099000000009999999 Asdfjklöasdf Asdfjklöasdfjklöasdf ;02.01.2014;02.01.2014;-104,69;EUR
362
- 00075757575;Abbuchung Onlinebanking FE/000002450 AT556600055665566556 CD Stadt Efghij Club Dipl.Ing. Max Muster M005566 - Mitgliedsbeitrag 2014 ;02.01.2014;02.01.2014;-39,00;EUR
363
- CSV
364
-
365
- FRENCH_EXAMPLE = (<<-CSV).strip
366
- 01234567890;22/01/2014;22/01/2014;CHEQUE 012345678901234578ABC000 0000 4381974748378178473744441;0000037;22/01/2014;-10,00;
367
- 01234567890;22/01/2014;22/01/2014;CHEQUE 012345678901937845500TS1 0000 7439816947047874387438445;0000038;22/01/2014;-5,76;
368
- 01234567890;22/01/2014;22/01/2014;CARTE 012345 CB:*0123456 XX XXXXXX XXX 33BORDEAUX;00X0X0X;22/01/2014;-105,90;
369
- 01234567890;22/01/2014;22/01/2014;CARTE 012345 CB:*0123456 XXXXXXXXXXX 33SAINT ANDRE D;00X0X0X;22/01/2014;-39,99;
370
- 01234567890;22/01/2014;22/01/2014;CARTE 012345 CB:*0123456 XXXXXXX XXXXX 33BORDEAUX;10X9X6X;22/01/2014;-36,00;
371
- 01234567890;22/01/2014;22/01/2014;PRLV XXXXXXXX ABONNEMENT XXXXXXXXXXXXXX.NET N.EMETTEUR: 324411;0XX0XXX;22/01/2014;-40,00;
372
- 01234567890;21/01/2014;21/01/2014;CARTE 012345 CB:*0123456 XXXXX XX33433ST ANDRE DE C;0POBUES;21/01/2014;-47,12;
373
- 01234567890;21/01/2014;21/01/2014;CARTE 012345 CB:*0123456 XXXXXXXXXXXX33433ST ANDRE DE C;0POBUER;21/01/2014;-27,02;
374
- 01234567890;21/01/2014;21/01/2014;CARTE 012345 CB:*0123456 XXXXXX XXXXXXXX33ST ANDRE 935/;0POBUEQ;21/01/2014;-25,65;
375
- CSV
376
-
377
- BROKER_CANADA_EXAMPLE = (<<-CSV).strip
378
- 2014-02-10,2014-02-10,Interest,ISHARES S&P/TSX CAPPED REIT IN,XRE,179,,,12.55,CAD
379
- 2014-01-16,2014-01-16,Reinvestment,ISHARES GLOBAL AGRICULTURE IND,COW,3,,,-81.57,CAD
380
- 2014-01-16,2014-01-16,Contribution,CONTRIBUTION,,,,,600.00,CAD
381
- 2014-01-16,2014-01-16,Interest,ISHARES GLOBAL AGRICULTURE IND,COW,200,,,87.05,CAD
382
- 2014-01-14,2014-01-14,Reinvestment,BMO NASDAQ 100 EQTY HEDGED TO,ZQQ,2,,,-54.72,CAD
383
- 2014-01-07,2014-01-10,Sell,BMO NASDAQ 100 EQTY HEDGED TO,ZQQ,-300,27.44,CDN,8222.05,CAD
384
- 2014-01-07,2014-01-07,Interest,BMO S&P/TSX EQUAL WEIGHT BKS I,ZEB,250,,,14.00,CAD
385
- 2013-07-02,2013-07-02,Dividend,SELECT SECTOR SPDR FD SHS BEN,XLB,130,,,38.70,USD
386
- 2013-06-27,2013-06-27,Dividend,ICICI BK SPONSORED ADR,IBN,100,,,66.70,USD
387
- 2013-06-19,2013-06-24,Buy,ISHARES S&P/TSX CAPPED REIT IN,XRE,300,15.90,CDN,-4779.95,CAD
388
- 2013-06-17,2013-06-17,Contribution,CONTRIBUTION,,,,,600.00,CAD
389
- 2013-05-22,2013-05-22,Dividend,NATBK,NA,70,,,58.10,CAD
390
- CSV
391
-
392
- INTUIT_MINT_EXAMPLE = (<<-CSV).strip
393
- "12/10/2014","Dn Ing Inv","[DN]ING INV/PLA","0.01","credit","Investments","Chequing","",""
394
- "2/03/2014","Ds Lms Msp Condo","[DS]LMS598 MSP/DIV","331.63","debit","Condo Fees","Chequing","",""
395
- "2/10/2014","Ib Granville","[IB] 2601 GRANVILLE","100.00","debit","Uncategorized","Chequing","",""
396
- "2/06/2014","So Pa","[SO]PA 0005191230116379851","140.72","debit","Mortgage & Rent","Chequing","",""
397
- "2/03/2014","Dn Sun Life","[DN]SUN LIFE MSP/DIV","943.34","credit","Income","Chequing","",""
398
- "1/30/2014","Transfer to CBT (Savings)","[CW] TF 0004#3409-797","500.00","debit","Transfer","Chequing","",""
399
- "1/30/2014","Costco","[PR]COSTCO WHOLESAL","559.96","debit","Business Services","Chequing","",""
400
- CSV
401
-
402
-
275
+ describe '85 regression test' do
276
+ it 'should detect correct date column' do
277
+ p = Reckon::CSVParser.new(file:fixture_path('85-date-example.csv'))
278
+ expect(p.date_column_index).to eq(2)
279
+ end
280
+ end
403
281
  end