console-blackjack 1.0.9 → 1.1.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.
@@ -1,7 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Shoe do
4
- let(:shoe) { build(:shoe) }
4
+ let(:blackjack) { build(:blackjack) }
5
+ let(:shoe) { build(:shoe, blackjack:) }
6
+
7
+ describe 'CARDS_PER_DECK' do
8
+ it 'returns 52' do
9
+ expect(described_class::CARDS_PER_DECK).to eq(52)
10
+ end
11
+ end
5
12
 
6
13
  describe '.new' do
7
14
  it 'creates a shoe' do
@@ -21,7 +28,7 @@ RSpec.describe Shoe do
21
28
  end
22
29
 
23
30
  context 'with a new regular shoe' do
24
- let(:shoe) { build(:shoe, :new_regular) }
31
+ let(:shoe) { build(:shoe, :new_regular, blackjack:) }
25
32
 
26
33
  it 'returns false' do
27
34
  expect(shoe).to_not be_needs_to_shuffle
@@ -29,7 +36,7 @@ RSpec.describe Shoe do
29
36
  end
30
37
 
31
38
  context 'with 42 cards being dealt' do
32
- let(:shoe) { build(:shoe, :new_regular) }
39
+ let(:shoe) { build(:shoe, :new_regular, blackjack:) }
33
40
 
34
41
  before do
35
42
  42.times { shoe.next_card }
@@ -42,7 +49,7 @@ RSpec.describe Shoe do
42
49
  end
43
50
 
44
51
  describe '#shuffle' do
45
- let(:shoe) { build(:shoe) }
52
+ let(:shoe) { build(:shoe, blackjack:) }
46
53
 
47
54
  it 'calls shuffle' do
48
55
  cards = instance_double(Array)
@@ -54,11 +61,11 @@ RSpec.describe Shoe do
54
61
  end
55
62
 
56
63
  describe '#new_regular' do
57
- let(:shoe) { build(:shoe) }
64
+ let(:shoe) { build(:shoe, blackjack:) }
58
65
 
59
66
  it 'creates a shoe' do
60
67
  shoe.new_regular
61
- expect(shoe.cards.size).to eq(52)
68
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
62
69
  end
63
70
 
64
71
  it 'calls shuffle' do
@@ -69,11 +76,11 @@ RSpec.describe Shoe do
69
76
  end
70
77
 
71
78
  describe '#new_aces' do
72
- let(:shoe) { build(:shoe) }
79
+ let(:shoe) { build(:shoe, blackjack:) }
73
80
 
74
81
  it 'creates a shoe' do
75
82
  shoe.new_aces
76
- expect(shoe.cards.size).to eq(40)
83
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
77
84
  end
78
85
 
79
86
  it 'calls shuffle' do
@@ -84,11 +91,11 @@ RSpec.describe Shoe do
84
91
  end
85
92
 
86
93
  describe '#new_jacks' do
87
- let(:shoe) { build(:shoe) }
94
+ let(:shoe) { build(:shoe, blackjack:) }
88
95
 
89
96
  it 'creates a shoe' do
90
97
  shoe.new_jacks
91
- expect(shoe.cards.size).to eq(40)
98
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
92
99
  end
93
100
 
94
101
  it 'calls shuffle' do
@@ -99,11 +106,11 @@ RSpec.describe Shoe do
99
106
  end
100
107
 
101
108
  describe '#new_aces_jacks' do
102
- let(:shoe) { build(:shoe) }
109
+ let(:shoe) { build(:shoe, blackjack:) }
103
110
 
104
111
  it 'creates a shoe' do
105
112
  shoe.new_aces_jacks
106
- expect(shoe.cards.size).to eq(80)
113
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
107
114
  end
108
115
 
109
116
  it 'calls shuffle' do
@@ -114,11 +121,11 @@ RSpec.describe Shoe do
114
121
  end
115
122
 
116
123
  describe '#new_sevens' do
117
- let(:shoe) { build(:shoe) }
124
+ let(:shoe) { build(:shoe, blackjack:) }
118
125
 
119
126
  it 'creates a shoe' do
120
127
  shoe.new_sevens
121
- expect(shoe.cards.size).to eq(40)
128
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
122
129
  end
123
130
 
124
131
  it 'calls shuffle' do
@@ -129,11 +136,11 @@ RSpec.describe Shoe do
129
136
  end
130
137
 
131
138
  describe '#new_eights' do
132
- let(:shoe) { build(:shoe) }
139
+ let(:shoe) { build(:shoe, blackjack:) }
133
140
 
134
141
  it 'creates a shoe' do
135
142
  shoe.new_eights
136
- expect(shoe.cards.size).to eq(40)
143
+ expect(shoe.cards.size).to eq(Shoe::CARDS_PER_DECK)
137
144
  end
138
145
 
139
146
  it 'calls shuffle' do
@@ -144,11 +151,10 @@ RSpec.describe Shoe do
144
151
  end
145
152
 
146
153
  describe '#next_card' do
147
- let(:shoe) { build(:shoe, :new_regular) }
154
+ let(:shoe) { build(:shoe, :new_regular, blackjack:) }
148
155
 
149
156
  it 'removes the next card' do
150
- shoe.next_card
151
- expect(shoe.cards.size).to eq(51)
157
+ expect { shoe.next_card }.to change(shoe.cards, :size).by(-1)
152
158
  end
153
159
 
154
160
  it 'returns a Card' do
@@ -2,10 +2,11 @@
2
2
 
3
3
  RSpec.describe Blackjack do
4
4
  let(:blackjack) { build(:blackjack, shoe: build(:shoe, :new_regular)) }
5
- let(:player_hand) { build(:player_hand, blackjack: blackjack) }
6
- let(:dealer_hand) { build(:dealer_hand, blackjack: blackjack) }
7
- let(:ace) { build(:card, :ace) }
8
- let(:ten) { build(:card, :ten) }
5
+ let(:player_hand) { build(:player_hand, blackjack:) }
6
+ let(:dealer_hand) { build(:dealer_hand, blackjack:) }
7
+ let(:ace) { build(:card, :ace, blackjack:) }
8
+ let(:ten) { build(:card, :ten, blackjack:) }
9
+ let(:input) { StringIO.new }
9
10
 
10
11
  describe '#current_player_hand' do
11
12
  it 'returns the current hand' do
@@ -27,8 +28,8 @@ RSpec.describe Blackjack do
27
28
 
28
29
  describe '#getc' do
29
30
  it 'get a single character from stdin' do
30
- allow($stdin).to receive(:getc).and_return('q')
31
- c = described_class.getc
31
+ allow(input).to receive(:getc).and_return('q')
32
+ c = described_class.getc(input)
32
33
  expect(c).to eq('q')
33
34
  end
34
35
  end
@@ -100,12 +101,19 @@ RSpec.describe Blackjack do
100
101
  end
101
102
 
102
103
  describe '#save_game' do
103
- it 'opens and put save file data' do
104
- file = instance_double('File')
104
+ let(:file) { instance_double(File) }
105
+
106
+ before do
105
107
  allow(File).to receive(:open).with(SAVE_FILE, 'w').and_yield(file)
106
108
  allow(file).to receive(:puts)
109
+ end
110
+
111
+ it 'opens and put save file data' do
107
112
  blackjack.save_game
108
- expect(file).to have_received(:puts).with("#{blackjack.num_decks}|#{blackjack.money}|#{blackjack.current_bet}")
113
+ expected = %i[num_decks deck_type face_type money current_bet].map do |f|
114
+ blackjack.send(f)
115
+ end.join('|')
116
+ expect(file).to have_received(:puts).with(expected)
109
117
  end
110
118
  end
111
119
 
@@ -123,7 +131,7 @@ RSpec.describe Blackjack do
123
131
  context 'with a readabale save file' do
124
132
  before do
125
133
  allow(File).to receive(:readable?).with(SAVE_FILE).and_return(true)
126
- allow(File).to receive(:read).with(SAVE_FILE).and_return('8|2000|1000')
134
+ allow(File).to receive(:read).with(SAVE_FILE).and_return('8|1|1|2000|1000')
127
135
  end
128
136
 
129
137
  it 'loads num_decks from save file data' do
@@ -131,6 +139,11 @@ RSpec.describe Blackjack do
131
139
  expect(blackjack.num_decks).to eq(8)
132
140
  end
133
141
 
142
+ it 'loads face_type from save file data' do
143
+ blackjack.load_game
144
+ expect(blackjack.face_type).to eq(1)
145
+ end
146
+
134
147
  it 'loads money from save file data' do
135
148
  blackjack.load_game
136
149
  expect(blackjack.money).to eq(2000)
@@ -313,7 +326,7 @@ RSpec.describe Blackjack do
313
326
 
314
327
  it 'shows dealer down card' do
315
328
  blackjack.deal_new_hand
316
- expect(dealer_hand.hide_down_card).to be_falsey
329
+ expect(dealer_hand.hide_first_card).to be_falsey
317
330
  end
318
331
 
319
332
  it 'hands are paid' do
@@ -380,7 +393,7 @@ RSpec.describe Blackjack do
380
393
 
381
394
  it 'draws the hands' do
382
395
  blackjack.draw_hands
383
- expected = "\n Dealer:\n 🂪 🂠 ⇒ 10\n\n Player $100.00:\n 🂡 🂪 ⇒ 21 $5.00 ⇐ \n\n"
396
+ expected = "\n Dealer:\n 🂠 🂪 ⇒ 10\n\n Player $100.00:\n 🂡 🂪 ⇒ 21 $5.00 ⇐ \n\n"
384
397
  expect(blackjack).to have_received(:puts).with(expected)
385
398
  end
386
399
  end
@@ -388,7 +401,7 @@ RSpec.describe Blackjack do
388
401
  describe '#new_bet' do
389
402
  before do
390
403
  blackjack.dealer_hand = dealer_hand
391
- allow($stdin).to receive(:gets).and_return('10')
404
+ allow(input).to receive(:gets).and_return('10')
392
405
  allow(described_class).to receive(:getc).and_return('s', 'q')
393
406
  allow(blackjack).to receive(:print)
394
407
  allow(blackjack).to receive(:puts)
@@ -399,33 +412,33 @@ RSpec.describe Blackjack do
399
412
  end
400
413
 
401
414
  it 'clears the screen' do
402
- blackjack.new_bet
415
+ blackjack.new_bet(input)
403
416
  expect(blackjack).to have_received(:clear)
404
417
  end
405
418
 
406
419
  it 'draws hands' do
407
- blackjack.new_bet
420
+ blackjack.new_bet(input)
408
421
  expect(blackjack).to have_received(:draw_hands)
409
422
  end
410
423
 
411
424
  it 'draws the current bet' do
412
- blackjack.new_bet
425
+ blackjack.new_bet(input)
413
426
  expected = " Current Bet: $5.00\n"
414
427
  expect(blackjack).to have_received(:puts).with(expected)
415
428
  end
416
429
 
417
430
  it 'updates current bet' do
418
- blackjack.new_bet
431
+ blackjack.new_bet(input)
419
432
  expect(blackjack.current_bet).to eq(1000)
420
433
  end
421
434
 
422
435
  it 'normalizes the bet' do
423
- blackjack.new_bet
436
+ blackjack.new_bet(input)
424
437
  expect(blackjack).to have_received(:normalize_current_bet)
425
438
  end
426
439
 
427
440
  it 'deals a new hand' do
428
- blackjack.new_bet
441
+ blackjack.new_bet(input)
429
442
  expect(blackjack).to have_received(:deal_new_hand)
430
443
  end
431
444
  end
@@ -446,7 +459,7 @@ RSpec.describe Blackjack do
446
459
 
447
460
  it 'draws the blackjack options' do
448
461
  blackjack.draw_game_options
449
- expected = ' (N) Number of Decks (T) Deck Type (B) Back'
462
+ expected = ' (N) Number of Decks (T) Deck Type (F) Face Type (B) Back'
450
463
  expect(blackjack).to have_received(:puts).with(expected)
451
464
  end
452
465
 
@@ -497,6 +510,37 @@ RSpec.describe Blackjack do
497
510
  end
498
511
  end
499
512
 
513
+ context 'when updating the face type' do
514
+ before do
515
+ allow(described_class).to receive(:getc).and_return('f')
516
+ allow(blackjack).to receive(:clear)
517
+ allow(blackjack).to receive(:draw_hands)
518
+ allow(blackjack).to receive(:new_face_type)
519
+ allow(blackjack).to receive(:draw_bet_options)
520
+ allow(blackjack).to receive(:puts)
521
+ end
522
+
523
+ it 'clears the screen' do
524
+ blackjack.draw_game_options
525
+ expect(blackjack).to have_received(:clear).twice
526
+ end
527
+
528
+ it 'draws the hands' do
529
+ blackjack.draw_game_options
530
+ expect(blackjack).to have_received(:draw_hands).twice
531
+ end
532
+
533
+ it 'updates face type' do
534
+ blackjack.draw_game_options
535
+ expect(blackjack).to have_received(:new_face_type)
536
+ end
537
+
538
+ it 'draws the bet options' do
539
+ blackjack.draw_game_options
540
+ expect(blackjack).to have_received(:draw_bet_options)
541
+ end
542
+ end
543
+
500
544
  context 'when going back to previous menu' do
501
545
  before do
502
546
  allow(described_class).to receive(:getc).and_return('b')
@@ -542,7 +586,7 @@ RSpec.describe Blackjack do
542
586
  describe '#new_num_decks' do
543
587
  before do
544
588
  blackjack.dealer_hand = dealer_hand
545
- allow($stdin).to receive(:gets).and_return('2')
589
+ allow(input).to receive(:gets).and_return('2')
546
590
  allow(described_class).to receive(:getc).and_return('b', 'q')
547
591
  allow(blackjack).to receive(:print)
548
592
  allow(blackjack).to receive(:puts)
@@ -553,22 +597,22 @@ RSpec.describe Blackjack do
553
597
  end
554
598
 
555
599
  it 'clears screen' do
556
- blackjack.new_num_decks
600
+ blackjack.new_num_decks(input)
557
601
  expect(blackjack).to have_received(:clear)
558
602
  end
559
603
 
560
604
  it 'draws hands' do
561
- blackjack.new_num_decks
605
+ blackjack.new_num_decks(input)
562
606
  expect(blackjack).to have_received(:draw_hands)
563
607
  end
564
608
 
565
609
  it 'gets new number of decks' do
566
- blackjack.new_num_decks
610
+ blackjack.new_num_decks(input)
567
611
  expect(blackjack.num_decks).to eq(2)
568
612
  end
569
613
 
570
614
  it 'normalizes number of decks' do
571
- blackjack.new_num_decks
615
+ blackjack.new_num_decks(input)
572
616
  expect(blackjack).to have_received(:normalize_num_decks)
573
617
  end
574
618
  end
@@ -597,6 +641,7 @@ RSpec.describe Blackjack do
597
641
  before do
598
642
  blackjack.dealer_hand = dealer_hand
599
643
  allow(blackjack).to receive(:puts)
644
+ allow(blackjack).to receive(:save_game)
600
645
  end
601
646
 
602
647
  context 'when choosing a new deck type' do
@@ -612,6 +657,7 @@ RSpec.describe Blackjack do
612
657
  allow(blackjack.shoe).to receive(:new_regular)
613
658
  blackjack.new_deck_type
614
659
  expect(blackjack.shoe).to have_received(:new_regular)
660
+ expect(blackjack).to have_received(:save_game)
615
661
  end
616
662
 
617
663
  it 'builds a new aces' do
@@ -619,6 +665,7 @@ RSpec.describe Blackjack do
619
665
  allow(blackjack.shoe).to receive(:new_aces)
620
666
  blackjack.new_deck_type
621
667
  expect(blackjack.shoe).to have_received(:new_aces)
668
+ expect(blackjack).to have_received(:save_game)
622
669
  end
623
670
 
624
671
  it 'builds a new jacks' do
@@ -626,6 +673,7 @@ RSpec.describe Blackjack do
626
673
  allow(blackjack.shoe).to receive(:new_jacks)
627
674
  blackjack.new_deck_type
628
675
  expect(blackjack.shoe).to have_received(:new_jacks)
676
+ expect(blackjack).to have_received(:save_game)
629
677
  end
630
678
 
631
679
  it 'builds a new aces_jacks' do
@@ -633,6 +681,7 @@ RSpec.describe Blackjack do
633
681
  allow(blackjack.shoe).to receive(:new_aces_jacks)
634
682
  blackjack.new_deck_type
635
683
  expect(blackjack.shoe).to have_received(:new_aces_jacks)
684
+ expect(blackjack).to have_received(:save_game)
636
685
  end
637
686
 
638
687
  it 'builds a new sevens' do
@@ -640,6 +689,7 @@ RSpec.describe Blackjack do
640
689
  allow(blackjack.shoe).to receive(:new_sevens)
641
690
  blackjack.new_deck_type
642
691
  expect(blackjack.shoe).to have_received(:new_sevens)
692
+ expect(blackjack).to have_received(:save_game)
643
693
  end
644
694
 
645
695
  it 'builds a new eights' do
@@ -647,6 +697,7 @@ RSpec.describe Blackjack do
647
697
  allow(blackjack.shoe).to receive(:new_eights)
648
698
  blackjack.new_deck_type
649
699
  expect(blackjack.shoe).to have_received(:new_eights)
700
+ expect(blackjack).to have_received(:save_game)
650
701
  end
651
702
  end
652
703
 
@@ -656,13 +707,56 @@ RSpec.describe Blackjack do
656
707
  allow(blackjack).to receive(:draw_hands)
657
708
  blackjack.new_deck_type
658
709
  expect(blackjack).to have_received(:draw_hands)
710
+ expect(blackjack).to have_received(:save_game).twice
711
+ end
712
+ end
713
+ end
714
+
715
+ describe '#new_face_type' do
716
+ before do
717
+ blackjack.dealer_hand = dealer_hand
718
+ allow(blackjack).to receive(:puts)
719
+ end
720
+
721
+ context 'when choosing a new face type' do
722
+ it 'draws options' do
723
+ allow(described_class).to receive(:getc).and_return('1')
724
+ blackjack.new_face_type
725
+ expected = ' (1) 🂡 (2) A♠'
726
+ expect(blackjack).to have_received(:puts).with(expected)
727
+ end
728
+
729
+ it 'sets regular faces' do
730
+ allow(described_class).to receive(:getc).and_return('1')
731
+ allow(blackjack).to receive(:save_game)
732
+ allow(blackjack).to receive(:face_type=).with(1)
733
+ blackjack.new_face_type
734
+ expect(blackjack).to have_received(:face_type=).with(1)
735
+ expect(blackjack).to have_received(:save_game)
736
+ end
737
+
738
+ it 'sets alternate faces' do
739
+ allow(described_class).to receive(:getc).and_return('2')
740
+ allow(blackjack).to receive(:save_game)
741
+ allow(blackjack).to receive(:face_type=).with(2)
742
+ blackjack.new_face_type
743
+ expect(blackjack).to have_received(:face_type=).with(2)
744
+ expect(blackjack).to have_received(:save_game)
745
+ end
746
+ end
747
+
748
+ context 'when invalid input' do
749
+ it 'gets the action again' do
750
+ allow(described_class).to receive(:getc).and_return('x', '1')
751
+ allow(blackjack).to receive(:draw_hands)
752
+ blackjack.new_face_type
753
+ expect(blackjack).to have_received(:draw_hands)
659
754
  end
660
755
  end
661
756
  end
662
757
 
663
758
  describe '#ask_insurance' do
664
759
  before do
665
- # blackjack.dealer_hand = dealer_hand
666
760
  allow(blackjack).to receive(:puts)
667
761
  allow(blackjack).to receive(:insure_hand)
668
762
  allow(blackjack).to receive(:no_insurance)
@@ -722,9 +816,9 @@ RSpec.describe Blackjack do
722
816
  expect(player_hand.payed).to be_truthy
723
817
  end
724
818
 
725
- it 'sets hand status as LOST' do
819
+ it 'sets hand status as :lost' do
726
820
  blackjack.insure_hand
727
- expect(player_hand.status).to eq(LOST)
821
+ expect(player_hand.status).to eq(:lost)
728
822
  end
729
823
 
730
824
  it 'updates blackjack money' do
@@ -760,7 +854,7 @@ RSpec.describe Blackjack do
760
854
 
761
855
  it 'shows dealer down card' do
762
856
  blackjack.no_insurance
763
- expect(dealer_hand.hide_down_card).to be_falsey
857
+ expect(dealer_hand.hide_first_card).to be_falsey
764
858
  end
765
859
 
766
860
  it 'pays hands' do
data/spec/spec_helper.rb CHANGED
@@ -7,12 +7,9 @@ SimpleCov.start do
7
7
  primary_coverage :branch
8
8
  end
9
9
 
10
- require 'coveralls'
11
- Coveralls.wear!
12
-
13
10
  Dir.glob(File.join(File.dirname(__FILE__),
14
11
  "..#{File::SEPARATOR}lib", '**',
15
- '*.rb')).sort.each(&method(:require))
12
+ '*.rb')).each(&method(:require))
16
13
 
17
14
  require 'factory_bot'
18
15
  require 'pry'
data/ss1.png ADDED
Binary file
data/ss2.png ADDED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: console-blackjack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.9
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Donald
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-15 00:00:00.000000000 Z
11
+ date: 2023-02-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Blackjack for your console, full version.
14
14
  email: gdonald@gmail.com
@@ -23,10 +23,8 @@ files:
23
23
  - README.md
24
24
  - Rakefile
25
25
  - bin/console-blackjack
26
- - bj.png
27
26
  - bj.txt
28
- - console-blackjack-1.0.7.gem
29
- - console-blackjack-1.0.8.gem
27
+ - console-blackjack-1.1.0.gem
30
28
  - console-blackjack.gemspec
31
29
  - lib/blackjack.rb
32
30
  - lib/blackjack/card.rb
@@ -54,11 +52,14 @@ files:
54
52
  - spec/lib/blackjack/shoe_spec.rb
55
53
  - spec/lib/blackjack_spec.rb
56
54
  - spec/spec_helper.rb
55
+ - ss1.png
56
+ - ss2.png
57
57
  homepage: https://github.com/gdonald/console-blackjack-ruby
58
58
  licenses:
59
59
  - MIT
60
60
  metadata:
61
61
  source_code_uri: https://github.com/gdonald/console-blackjack-ruby
62
+ rubygems_mfa_required: 'true'
62
63
  post_install_message: |2+
63
64
 
64
65
  Type `console-blackjack` to run!
@@ -70,15 +71,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
71
  requirements:
71
72
  - - ">="
72
73
  - !ruby/object:Gem::Version
73
- version: 2.7.5
74
+ version: '3.1'
74
75
  required_rubygems_version: !ruby/object:Gem::Requirement
75
76
  requirements:
76
77
  - - ">="
77
78
  - !ruby/object:Gem::Version
78
79
  version: '0'
79
80
  requirements: []
80
- rubygems_version: 3.1.6
81
- signing_key:
81
+ rubygems_version: 3.3.7
82
+ signing_key:
82
83
  specification_version: 4
83
84
  summary: Console Blackjack
84
85
  test_files: []
86
+ ...
data/bj.png DELETED
Binary file
Binary file
Binary file