fat_core 1.6.0 → 1.7.1

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,60 @@
1
+ require 'spec_helper'
2
+
3
+ module FatCore
4
+ describe TextFormatter do
5
+ describe 'table output' do
6
+ before :each do
7
+ @aoa =
8
+ [['Ref', 'Date', 'Code', 'Raw', 'Shares', 'Price', 'Info', 'Bool'],
9
+ nil,
10
+ [1, '2013-05-02', 'P', 795_546.20, 795_546.2, 1.1850, 'ZMPEF1', 'T'],
11
+ [2, '2013-05-02', 'P', 118_186.40, 118_186.4, 11.8500, 'ZMPEF1', 'T'],
12
+ [5, '2013-05-02', 'P', 118_186.40, 118_186.4, 11.8500, 'ZMPEF1\'s "Ent"', 'T'],
13
+ [7, '2013-05-20', 'S', 12_000.00, 5046.00, 28.2804, 'ZMEAC', 'F'],
14
+ [8, '2013-05-20', 'S', 85_000.00, 35_742.50, 28.3224, 'ZMEAC', 'T'],
15
+ [9, '2013-05-20', 'S', 33_302.00, 14_003.49, 28.6383, 'ZMEAC', 'T'],
16
+ [10, '2013-05-23', 'S', 8000.00, 3364.00, 27.1083, 'ZMEAC', 'T'],
17
+ [11, '2013-05-23', 'S', 23_054.00, 9694.21, 26.8015, 'ZMEAC', 'F'],
18
+ [12, '2013-05-23', 'S', 39_906.00, 16_780.47, 25.1749, 'ZMEAC', 'T'],
19
+ [13, '2013-05-29', 'S', 13_459.00, 5659.51, 24.7464, 'ZMEAC', 'T'],
20
+ [14, '2013-05-29', 'S', 15_700.00, 6601.85, 24.7790, 'ZMEAC', 'F'],
21
+ [15, '2013-05-29', 'S', 15_900.00, 6685.95, 24.5802, 'ZMEAC', 'T'],
22
+ [16, '2013-05-30', 'S', 6_679.00, 2808.52, 25.0471, 'ZMEAC', 'T']]
23
+ @tab = Table.from_aoa(@aoa).order_by(:date)
24
+ end
25
+
26
+ it 'should be able to output a table with default formatting instructions' do
27
+ txt = TextFormatter.new(@tab).output
28
+ expect(txt.class).to eq(String)
29
+ end
30
+
31
+ it 'should be able to set format and output by method calls' do
32
+ fmt = TextFormatter.new(@tab)
33
+ fmt.format(ref: '5.0', code: 'C', raw: ',0.0', shares: ',0.0',
34
+ price: '0.3R', bool: 'Y', numeric: 'R')
35
+ fmt.format_for(:header, string: 'CB')
36
+ fmt.sum_gfooter(:price, :raw, :shares)
37
+ fmt.gfooter('Grp Std Dev', price: :dev, shares: :dev, bool: :one?)
38
+ fmt.sum_footer(:price, :raw, :shares)
39
+ fmt.footer('Std Dev', price: :dev, shares: :dev, bool: :all?)
40
+ fmt.footer('Any?', bool: :any?)
41
+ txt = fmt.output
42
+ expect(txt.size).to be > 1000
43
+ expect(txt).to match(/\bRef\b/)
44
+ expect(txt).to match(/\bBool\b/)
45
+ expect(txt).to match(/\b2013-05-02\b/)
46
+ expect(txt).to match(/^\|[-+]+\|$/)
47
+ expect(txt).to match(/\D795,546\D/)
48
+ expect(txt).to match(/\D1,031,919\D/)
49
+ expect(txt).to match(/\D1.185\D/)
50
+ expect(txt).to match(/\D24.885\D/)
51
+ expect(txt).to match(/\D00001\D/)
52
+ expect(txt).to match(/\bY\b/)
53
+ expect(txt).to match(/\bP\b/)
54
+ expect(txt).to match(/\bZMPEF1\b/)
55
+ expect(txt).to match(/\bGroup Total\b/)
56
+ expect(txt).to match(/\bGrp Std Dev\b/)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -458,12 +458,19 @@ describe Period do
458
458
  }.to raise_error /unknown chunk sym/
459
459
  end
460
460
 
461
- it 'should raise error for too large a chunk' do
461
+ it 'should raise error for too large a chunk and no partials allowed' do
462
462
  expect {
463
- Period.new('2012-12-01', '2012-12-31').chunks(size: :bimonth)
463
+ Period.new('2012-12-01', '2012-12-31').
464
+ chunks(size: :bimonth, partial_first: false, partial_last: false)
464
465
  }.to raise_error /longer than/
465
466
  end
466
467
 
468
+ it 'should return period itself for too large chunk if partials allowed' do
469
+ pd = Period.new('2012-12-01', '2012-12-31')
470
+ expect(pd.chunks(size: :bimonth, partial_first: true).first).to eq(pd)
471
+ expect(pd.chunks(size: :bimonth, partial_last: true).first).to eq(pd)
472
+ end
473
+
467
474
  it 'should not include a partial final chunk by default' do
468
475
  chunks = Period.new('2012-01-01', '2012-03-30').chunks(size: :month)
469
476
  expect(chunks.size).to eq(2)
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Symbol do
4
4
  it 'should be able to convert to a capitalized string' do
5
5
  expect(:i_am_a_symbol.entitle).to eq 'I Am a Symbol'
6
- expect(:i_am_a_symbol.to_string).to eq 'I Am a Symbol'
6
+ expect(:i_am_a_symbol.as_string).to eq 'I Am a Symbol'
7
7
  end
8
8
 
9
9
  it 'should respond to tex_quote' do
@@ -362,14 +362,34 @@ EOS
362
362
  expect(dwtab.column(:g10).type).to eq('Boolean')
363
363
  expect(dwtab.column(:qp10).type).to eq('Boolean')
364
364
  dwo = dwtab.where('qp10 || g10')
365
- dwo = dwo.to_org
366
- dwo.each_with_index do |row, k|
367
- next unless k > 1
368
- expect(row[5]).to match(/\A(T|F)\z/)
365
+ dwo.rows.each do |row|
366
+ expect(row[:qp10].class.to_s).to match(/TrueClass|FalseClass/)
369
367
  end
370
368
  end
371
369
  end
372
370
 
371
+ describe 'indexing' do
372
+ before :all do
373
+ @tab = Table.from_aoh([
374
+ { a: '1', 'Two words' => '2', c: '3,123', d: 'apple' },
375
+ { a: '4', 'Two words' => '5', c: '6,412', d: 'orange' },
376
+ { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }])
377
+ end
378
+
379
+ it 'should be able to index by column head' do
380
+ expect(@tab[:a]).to eq([1, 4, 7])
381
+ expect(@tab[:d]).to eq(%w(apple orange pear))
382
+ expect { @tab[:r] }.to raise_error /not in table/
383
+ end
384
+
385
+ it 'should be able to index by row number' do
386
+ expect(@tab[1]).to eq({a: 1, two_words: 2, c: 3123, d: 'apple'})
387
+ expect(@tab[3]).to eq({a: 7, two_words: 8, c: 9888, d: 'pear'})
388
+ expect { @tab[0] }.to raise_error(/out of range/)
389
+ expect { @tab[4] }.to raise_error(/out of range/)
390
+ end
391
+ end
392
+
373
393
  describe 'column operations' do
374
394
  it 'should be able to sum a column' do
375
395
  aoh = [
@@ -378,10 +398,10 @@ EOS
378
398
  { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
379
399
  ]
380
400
  tab = Table.from_aoh(aoh)
381
- expect(tab[:a].sum).to eq 12
401
+ expect(tab.column(:a).sum).to eq 12
382
402
  expect(tab[:two_words].sum).to eq 15
383
- expect(tab[:c].sum).to eq 19_423
384
- expect(tab[:d].sum).to eq 'appleorangepear'
403
+ expect(tab.column(:c).sum).to eq 19_423
404
+ expect(tab.column(:d).sum).to eq 'appleorangepear'
385
405
  end
386
406
 
387
407
  it 'should be able to sum a column ignoring nils' do
@@ -391,10 +411,10 @@ EOS
391
411
  { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
392
412
  ]
393
413
  tab = Table.from_aoh(aoh)
394
- expect(tab[:a].sum).to eq 11
395
- expect(tab[:two_words].sum).to eq 15
396
- expect(tab[:c].sum).to eq 16_300
397
- expect(tab[:d].sum).to eq 'appleorangepear'
414
+ expect(tab.column(:a).sum).to eq 11
415
+ expect(tab.column(:two_words).sum).to eq 15
416
+ expect(tab.column(:c).sum).to eq 16_300
417
+ expect(tab.column(:d).sum).to eq 'appleorangepear'
398
418
  end
399
419
 
400
420
  it 'should be able to report its headings' do
@@ -410,8 +430,8 @@ EOS
410
430
  { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
411
431
  ]
412
432
  tab = Table.from_aoh(aoh)
413
- expect(tab[:a].to_a).to eq [1, 4, 7]
414
- expect(tab[:c].to_a).to eq [3123, 6412, 9888]
433
+ expect(tab[:a]).to eq [1, 4, 7]
434
+ expect(tab[:c]).to eq [3123, 6412, 9888]
415
435
  end
416
436
 
417
437
  it 'should be able to sum a column' do
@@ -421,9 +441,9 @@ EOS
421
441
  { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
422
442
  ]
423
443
  tab = Table.from_aoh(aoh)
424
- expect(tab[:a].sum).to eq 12
425
- expect(tab[:c].sum).to eq 19_423
426
- expect(tab[:c].sum.is_a?(Integer)).to be true
444
+ expect(tab.column(:a).sum).to eq 12
445
+ expect(tab.column(:c).sum).to eq 19_423
446
+ expect(tab.column(:c).sum.is_a?(Integer)).to be true
427
447
  end
428
448
 
429
449
  it 'should be able to average a column' do
@@ -433,9 +453,9 @@ EOS
433
453
  { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
434
454
  ]
435
455
  tab = Table.from_aoh(aoh)
436
- expect(tab[:a].avg).to eq 4
437
- expect(tab[:c].avg.round(4)).to eq 6474.3333
438
- expect(tab[:c].avg.class).to eq BigDecimal
456
+ expect(tab.column(:a).avg).to eq 4
457
+ expect(tab.column(:c).avg.round(4)).to eq 6474.3333
458
+ expect(tab.column(:c).avg.class).to eq BigDecimal
439
459
  end
440
460
 
441
461
  it 'should be able to get column minimum' do
@@ -445,10 +465,10 @@ EOS
445
465
  { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
446
466
  ]
447
467
  tab = Table.from_aoh(aoh)
448
- expect(tab[:a].min).to eq 1
449
- expect(tab[:c].min.round(4)).to eq 3123
450
- expect(tab[:c].min.is_a?(Integer)).to be true
451
- expect(tab[:d].min).to eq 'apple'
468
+ expect(tab.column(:a).min).to eq 1
469
+ expect(tab.column(:c).min.round(4)).to eq 3123
470
+ expect(tab.column(:c).min.is_a?(Integer)).to be true
471
+ expect(tab.column(:d).min).to eq 'apple'
452
472
  end
453
473
 
454
474
  it 'should be able to get column maximum' do
@@ -458,68 +478,10 @@ EOS
458
478
  { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
459
479
  ]
460
480
  tab = Table.from_aoh(aoh)
461
- expect(tab[:a].max).to eq 7
462
- expect(tab[:c].max.round(4)).to eq 9888
463
- expect(tab[:c].max.is_a?(Integer)).to be true
464
- expect(tab[:d].max).to eq 'pear'
465
- end
466
- end
467
-
468
- describe 'footers' do
469
- it 'should be able to add a total footer to the table' do
470
- aoh = [
471
- { a: '1', 'Two words' => '2', c: '3,123', d: 'apple' },
472
- { a: '4', 'Two words' => '5', c: '6,412', d: 'orange' },
473
- { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
474
- ]
475
- tab = Table.from_aoh(aoh)
476
- tab.add_sum_footer([:a, :c, :two_words])
477
- expect(tab.footers[:total][:a]).to eq 12
478
- expect(tab.footers[:total][:c]).to eq 19_423
479
- expect(tab.footers[:total][:two_words]).to eq 15
480
- expect(tab.footers[:total][:d]).to be_nil
481
- end
482
-
483
- it 'should be able to add an average footer to the table' do
484
- aoh = [
485
- { a: '1', 'Two words' => '2', c: '3,123', d: 'apple' },
486
- { a: '4', 'Two words' => '5', c: '6,412', d: 'orange' },
487
- { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
488
- ]
489
- tab = Table.from_aoh(aoh)
490
- tab.add_avg_footer([:a, :c, :two_words])
491
- expect(tab.footers[:average][:a]).to eq 4
492
- expect(tab.footers[:average][:c].round(4)).to eq 6474.3333
493
- expect(tab.footers[:average][:two_words]).to eq 5
494
- expect(tab.footers[:average][:d]).to be_nil
495
- end
496
-
497
- it 'should be able to add a minimum footer to the table' do
498
- aoh = [
499
- { a: '1', 'Two words' => '2', c: '3,123', d: 'apple' },
500
- { a: '4', 'Two words' => '5', c: '6,412', d: 'orange' },
501
- { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
502
- ]
503
- tab = Table.from_aoh(aoh)
504
- tab.add_min_footer([:a, :c, :two_words])
505
- expect(tab.footers[:minimum][:a]).to eq 1
506
- expect(tab.footers[:minimum][:c]).to eq 3123
507
- expect(tab.footers[:minimum][:two_words]).to eq 2
508
- expect(tab.footers[:minimum][:d]).to be_nil
509
- end
510
-
511
- it 'should be able to add a maximum footer to the table' do
512
- aoh = [
513
- { a: '1', 'Two words' => '2', c: '3,123', d: 'apple' },
514
- { a: '4', 'Two words' => '5', c: '6,412', d: 'orange' },
515
- { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
516
- ]
517
- tab = Table.from_aoh(aoh)
518
- tab.add_max_footer([:a, :c, :two_words])
519
- expect(tab.footers[:maximum][:a]).to eq 7
520
- expect(tab.footers[:maximum][:c]).to eq 9888
521
- expect(tab.footers[:maximum][:two_words]).to eq 8
522
- expect(tab.footers[:maximum][:d]).to be_nil
481
+ expect(tab.column(:a).max).to eq 7
482
+ expect(tab.column(:c).max.round(4)).to eq 9888
483
+ expect(tab.column(:c).max.is_a?(Integer)).to be true
484
+ expect(tab.column(:d).max).to eq 'pear'
523
485
  end
524
486
  end
525
487
 
@@ -668,8 +630,8 @@ EOS
668
630
  tab1 = Table.from_aoh(aoh)
669
631
  tab2 = tab1.select(:two_words, s: 's * s', nc: 'c + c', c: 'nc+nc')
670
632
  expect(tab2.headers).to eq [:two_words, :s, :nc, :c]
671
- expect(tab2[:s].items).to eq([26450449, 169744, 3316041])
672
- expect(tab2[:c].items).to eq([12492, 25648, 7552])
633
+ expect(tab2[:s]).to eq([26450449, 169744, 3316041])
634
+ expect(tab2[:c]).to eq([12492, 25648, 7552])
673
635
  end
674
636
 
675
637
  it 'should have access to @row and @group vars in evaluating' do
@@ -687,8 +649,8 @@ EOS
687
649
  tab = Table.from_aoh(aoh).order_by(:a, :two_words)
688
650
  tab2 = tab.select(:a, :two_words, number: '@row', group: '@group')
689
651
  expect(tab2.headers).to eq [:a, :two_words, :number, :group]
690
- expect(tab2[:number].items).to eq([1, 2, 3, 4, 5, 6, 7, 8, 9])
691
- expect(tab2[:group].items).to eq([1, 1, 1, 2, 2, 2, 3, 3, 3])
652
+ expect(tab2[:number]).to eq([1, 2, 3, 4, 5, 6, 7, 8, 9])
653
+ expect(tab2[:group]).to eq([1, 1, 1, 2, 2, 2, 3, 3, 3])
692
654
  end
693
655
  end
694
656
 
@@ -715,7 +677,7 @@ EOS
715
677
  [14, '2013-05-29', 'S', 15_700.00, 6601.85, 24.7790, 'ZMEAC', 'F'],
716
678
  [15, '2013-05-29', 'S', 15_900.00, 6685.95, 24.5802, 'ZMEAC', 'T'],
717
679
  [16, '2013-05-30', 'S', 6_679.00, 2808.52, 25.0471, 'ZMEAC', 'T']]
718
- tab = Table.from_aoa(aoa).add_sum_footer([:raw, :shares, :price])
680
+ tab = Table.from_aoa(aoa)
719
681
  tab2 = tab.where('!bool || code == "P"')
720
682
  expect(tab2.rows.size).to eq(5)
721
683
  tab2 = tab.where('code == "S" && raw < 10_000')
@@ -728,7 +690,7 @@ EOS
728
690
  expect(tab2.rows.size).to eq(0)
729
691
  end
730
692
 
731
- it 'where select by row and group' do
693
+ it 'where clause with row and group' do
732
694
  aoa =
733
695
  [['Ref', 'Date', 'Code', 'Raw', 'Shares', 'Price', 'Info', 'Bool'],
734
696
  nil,
@@ -785,8 +747,8 @@ EOS
785
747
  join_tab = @tab_a.join(@tab_b, :id_a, :emp_id_b)
786
748
  expect(join_tab.class).to eq Table
787
749
  expect(join_tab.size).to eq(2)
788
- expect(join_tab[:name].items).to include('Paul')
789
- expect(join_tab[:name].items).to include('Allen')
750
+ expect(join_tab[:name]).to include('Paul')
751
+ expect(join_tab[:name]).to include('Allen')
790
752
  expect(join_tab.headers).to eq([:id, :name, :age, :address, :salary,
791
753
  :join_date, :id_b, :dept])
792
754
  end
@@ -795,8 +757,8 @@ EOS
795
757
  join_tab = @tab_a.join(@tab_b, 'id_a == emp_id_b')
796
758
  expect(join_tab.class).to eq Table
797
759
  expect(join_tab.size).to eq(2)
798
- expect(join_tab[:name].items).to include('Paul')
799
- expect(join_tab[:name].items).to include('Allen')
760
+ expect(join_tab[:name]).to include('Paul')
761
+ expect(join_tab[:name]).to include('Allen')
800
762
  expect(join_tab.headers).to eq([:id, :name, :age, :address, :salary,
801
763
  :join_date, :id_b, :dept, :emp_id])
802
764
  end
@@ -805,12 +767,12 @@ EOS
805
767
  join_tab = @tab_a.left_join(@tab_b, :id_a, :emp_id_b)
806
768
  expect(join_tab.class).to eq Table
807
769
  expect(join_tab.size).to eq(8)
808
- expect(join_tab[:name].items).to include('Paul')
809
- expect(join_tab[:name].items).to include('Allen')
810
- expect(join_tab[:name].items).to include('Teddy')
811
- expect(join_tab[:name].items).to include('Mark')
812
- expect(join_tab[:name].items).to include('David')
813
- expect(join_tab[:name].items).to include('James')
770
+ expect(join_tab[:name]).to include('Paul')
771
+ expect(join_tab[:name]).to include('Allen')
772
+ expect(join_tab[:name]).to include('Teddy')
773
+ expect(join_tab[:name]).to include('Mark')
774
+ expect(join_tab[:name]).to include('David')
775
+ expect(join_tab[:name]).to include('James')
814
776
  expect(join_tab.headers).to eq([:id, :name, :age, :address, :salary,
815
777
  :join_date, :id_b, :dept, :emp_id])
816
778
  end
@@ -819,11 +781,11 @@ EOS
819
781
  join_tab = @tab_a.right_join(@tab_b, :id_a, :emp_id_b)
820
782
  expect(join_tab.class).to eq Table
821
783
  expect(join_tab.size).to eq(3)
822
- expect(join_tab[:name].items).to include('Paul')
823
- expect(join_tab[:name].items).to include('Allen')
824
- expect(join_tab[:dept].items).to include('IT Billing')
825
- expect(join_tab[:dept].items).to include('Engineering')
826
- expect(join_tab[:dept].items).to include('Finance')
784
+ expect(join_tab[:name]).to include('Paul')
785
+ expect(join_tab[:name]).to include('Allen')
786
+ expect(join_tab[:dept]).to include('IT Billing')
787
+ expect(join_tab[:dept]).to include('Engineering')
788
+ expect(join_tab[:dept]).to include('Finance')
827
789
  expect(join_tab.headers).to eq([:id, :name, :age, :address, :salary,
828
790
  :join_date, :id_b, :dept, :emp_id])
829
791
  end
@@ -832,15 +794,15 @@ EOS
832
794
  join_tab = @tab_a.full_join(@tab_b, :id_a, :emp_id_b)
833
795
  expect(join_tab.class).to eq Table
834
796
  expect(join_tab.size).to eq(9)
835
- expect(join_tab[:name].items).to include('Paul')
836
- expect(join_tab[:name].items).to include('Allen')
837
- expect(join_tab[:name].items).to include('Teddy')
838
- expect(join_tab[:name].items).to include('Mark')
839
- expect(join_tab[:name].items).to include('David')
840
- expect(join_tab[:name].items).to include('James')
841
- expect(join_tab[:dept].items).to include('IT Billing')
842
- expect(join_tab[:dept].items).to include('Engineering')
843
- expect(join_tab[:dept].items).to include('Finance')
797
+ expect(join_tab[:name]).to include('Paul')
798
+ expect(join_tab[:name]).to include('Allen')
799
+ expect(join_tab[:name]).to include('Teddy')
800
+ expect(join_tab[:name]).to include('Mark')
801
+ expect(join_tab[:name]).to include('David')
802
+ expect(join_tab[:name]).to include('James')
803
+ expect(join_tab[:dept]).to include('IT Billing')
804
+ expect(join_tab[:dept]).to include('Engineering')
805
+ expect(join_tab[:dept]).to include('Finance')
844
806
  expect(join_tab.headers).to eq([:id, :name, :age, :address, :salary,
845
807
  :join_date, :id_b, :dept, :emp_id])
846
808
  end
@@ -849,15 +811,15 @@ EOS
849
811
  join_tab = @tab_a.cross_join(@tab_b)
850
812
  expect(join_tab.class).to eq Table
851
813
  expect(join_tab.size).to eq(24)
852
- expect(join_tab[:name].items).to include('Paul')
853
- expect(join_tab[:name].items).to include('Allen')
854
- expect(join_tab[:name].items).to include('Teddy')
855
- expect(join_tab[:name].items).to include('Mark')
856
- expect(join_tab[:name].items).to include('David')
857
- expect(join_tab[:name].items).to include('James')
858
- expect(join_tab[:dept].items).to include('IT Billing')
859
- expect(join_tab[:dept].items).to include('Engineering')
860
- expect(join_tab[:dept].items).to include('Finance')
814
+ expect(join_tab[:name]).to include('Paul')
815
+ expect(join_tab[:name]).to include('Allen')
816
+ expect(join_tab[:name]).to include('Teddy')
817
+ expect(join_tab[:name]).to include('Mark')
818
+ expect(join_tab[:name]).to include('David')
819
+ expect(join_tab[:name]).to include('James')
820
+ expect(join_tab[:dept]).to include('IT Billing')
821
+ expect(join_tab[:dept]).to include('Engineering')
822
+ expect(join_tab[:dept]).to include('Finance')
861
823
  expect(join_tab.headers).to eq([:id, :name, :age, :address, :salary,
862
824
  :join_date, :id_b, :dept, :emp_id])
863
825
  end
@@ -1024,48 +986,5 @@ EOS
1024
986
  expect(tab.groups[5].size).to eq(1)
1025
987
  end
1026
988
  end
1027
-
1028
- describe 'output' do
1029
- it 'should be able to return itself as an array of arrays' do
1030
- aoh = [
1031
- { a: '1', 'Two words' => '2', c: '3,123', d: 'apple' },
1032
- { a: '4', 'Two words' => '5', c: '6,412', d: 'orange' },
1033
- { a: '7', 'Two words' => '8', c: '$9,888', d: 'pear' }
1034
- ]
1035
- tab = Table.from_aoh(aoh)
1036
- aoa = tab.to_org
1037
- expect(aoa.class).to eq Array
1038
- expect(aoa[0].class).to eq Array
1039
- expect(aoa[0][0]).to eq 'A'
1040
- end
1041
-
1042
- it 'should be able to output an org babel aoa' do
1043
- # This is what the data looks like when called from org babel code
1044
- # blocks.
1045
- aoa =
1046
- [['Ref', 'Date', 'Code', 'Raw', 'Shares', 'Price', 'Info', 'Bool'],
1047
- nil,
1048
- [1, '2013-05-02', 'P', 795_546.20, 795_546.2, 1.1850, 'ZMPEF1', 'T'],
1049
- [2, '2013-05-02', 'P', 118_186.40, 118_186.4, 11.8500, 'ZMPEF1', 'T'],
1050
- [7, '2013-05-20', 'S', 12_000.00, 5046.00, 28.2804, 'ZMEAC', 'F'],
1051
- [8, '2013-05-20', 'S', 85_000.00, 35_742.50, 28.3224, 'ZMEAC', 'T'],
1052
- [9, '2013-05-20', 'S', 33_302.00, 14_003.49, 28.6383, 'ZMEAC', 'T'],
1053
- [10, '2013-05-23', 'S', 8000.00, 3364.00, 27.1083, 'ZMEAC', 'T'],
1054
- [11, '2013-05-23', 'S', 23_054.00, 9694.21, 26.8015, 'ZMEAC', 'F'],
1055
- [12, '2013-05-23', 'S', 39_906.00, 16_780.47, 25.1749, 'ZMEAC', 'T'],
1056
- [13, '2013-05-29', 'S', 13_459.00, 5659.51, 24.7464, 'ZMEAC', 'T'],
1057
- [14, '2013-05-29', 'S', 15_700.00, 6601.85, 24.7790, 'ZMEAC', 'F'],
1058
- [15, '2013-05-29', 'S', 15_900.00, 6685.95, 24.5802, 'ZMEAC', 'T'],
1059
- [16, '2013-05-30', 'S', 6_679.00, 2808.52, 25.0471, 'ZMEAC', 'T']]
1060
- tg = Table.from_aoa(aoa).add_sum_footer([:raw, :shares, :price])
1061
- aoa = tg.to_org(formats: { raw: '%,', shares: '%,', price: '%,4' })
1062
- expect(aoa[-1][0]).to eq 'Total'
1063
- expect(aoa[-1][1]).to eq ''
1064
- expect(aoa[-1][2]).to eq ''
1065
- expect(aoa[-1][3]).to eq '1,166,733'
1066
- expect(aoa[-1][4]).to eq '1,020,119'
1067
- expect(aoa[-1][5]).to eq '276.5135'
1068
- end
1069
- end
1070
989
  end
1071
990
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fat_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel E. Doherty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-08 00:00:00.000000000 Z
11
+ date: 2017-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov
@@ -208,6 +208,12 @@ files:
208
208
  - lib/fat_core/date.rb
209
209
  - lib/fat_core/enumerable.rb
210
210
  - lib/fat_core/evaluator.rb
211
+ - lib/fat_core/formatters.rb
212
+ - lib/fat_core/formatters/aoa_formatter.rb
213
+ - lib/fat_core/formatters/aoh_formatter.rb
214
+ - lib/fat_core/formatters/formatter.rb
215
+ - lib/fat_core/formatters/org_formatter.rb
216
+ - lib/fat_core/formatters/text_formatter.rb
211
217
  - lib/fat_core/hash.rb
212
218
  - lib/fat_core/kernel.rb
213
219
  - lib/fat_core/latex_eruby.rb
@@ -227,6 +233,11 @@ files:
227
233
  - spec/lib/date_spec.rb
228
234
  - spec/lib/enumerable_spec.rb
229
235
  - spec/lib/evaluator_spec.rb
236
+ - spec/lib/formatters/aoa_formatter_spec.rb
237
+ - spec/lib/formatters/aoh_formatter_spec.rb
238
+ - spec/lib/formatters/formatter_spec.rb
239
+ - spec/lib/formatters/org_formatter_spec.rb
240
+ - spec/lib/formatters/text_formatter_spec.rb
230
241
  - spec/lib/hash_spec.rb
231
242
  - spec/lib/kernel_spec.rb
232
243
  - spec/lib/nil_spec.rb
@@ -270,6 +281,11 @@ test_files:
270
281
  - spec/lib/date_spec.rb
271
282
  - spec/lib/enumerable_spec.rb
272
283
  - spec/lib/evaluator_spec.rb
284
+ - spec/lib/formatters/aoa_formatter_spec.rb
285
+ - spec/lib/formatters/aoh_formatter_spec.rb
286
+ - spec/lib/formatters/formatter_spec.rb
287
+ - spec/lib/formatters/org_formatter_spec.rb
288
+ - spec/lib/formatters/text_formatter_spec.rb
273
289
  - spec/lib/hash_spec.rb
274
290
  - spec/lib/kernel_spec.rb
275
291
  - spec/lib/nil_spec.rb