deck_of_cards_handler 0.1.7 → 0.1.9
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -0
- data/README.md +2 -0
- data/lib/deck_of_cards_handler/card/card.rb +61 -0
- data/lib/deck_of_cards_handler/packet/cuts.rb +32 -1
- data/lib/deck_of_cards_handler/packet/packet.rb +21 -3
- data/lib/deck_of_cards_handler/packet/shuffles.rb +1 -0
- data/lib/deck_of_cards_handler/poker_hands/poker_hand.rb +2 -0
- data/lib/deck_of_cards_handler/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d23ec5d3f1b6987a939dfa98561a8734766fa09b7f1b74d3130225a7df36b5dc
|
|
4
|
+
data.tar.gz: fb7a36ff97dc5080186bdcf318f15cc9595fe3c188506d22cc2545297db789fd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d3130deeeb5baa744e0f94b7896692d5ed2d322ccdd11c6398b9f19a35c1f0923a699c17862ddf2051e97236967db5073a3cafe029818dad06ffe674e94406e
|
|
7
|
+
data.tar.gz: 8433c0d0036299acfcf593b46ef5f17610c49d067a4243d7e617a9d9adc6d410853e9710759a06fa509b98fb02d5cc65ad4e21007c5447573367a6a7b838d764
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
[](https://badge.fury.io/rb/deck_of_cards_handler) [](https://github.com/simonbernard2/deck_of_cards/actions/workflows/ruby.yml)
|
|
2
|
+
|
|
1
3
|
# Deck of cards handler
|
|
2
4
|
|
|
3
5
|
A ruby gem for simulating real-world deck handling: shuffle, cut, deal, cull
|
|
@@ -40,6 +40,46 @@ class Card
|
|
|
40
40
|
Card.black_suits.include?(suit)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
sig { returns(T::Boolean) }
|
|
44
|
+
def clubs?
|
|
45
|
+
suit == "C"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
sig { returns(T::Boolean) }
|
|
49
|
+
def hearts?
|
|
50
|
+
suit == "H"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
sig { returns(T::Boolean) }
|
|
54
|
+
def spades?
|
|
55
|
+
suit == "S"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
sig { returns(T::Boolean) }
|
|
59
|
+
def diamonds?
|
|
60
|
+
suit == "D"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
sig { returns(T::Boolean) }
|
|
64
|
+
def even?
|
|
65
|
+
Card.even_values.include?(value)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
sig { returns(T::Boolean) }
|
|
69
|
+
def odd?
|
|
70
|
+
Card.odd_values.include?(value)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
sig { returns(T::Boolean) }
|
|
74
|
+
def spot?
|
|
75
|
+
Card.spot_values.include?(value)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
sig { returns(T::Boolean) }
|
|
79
|
+
def court?
|
|
80
|
+
Card.court_values.include?(value)
|
|
81
|
+
end
|
|
82
|
+
|
|
43
83
|
sig { returns(String) }
|
|
44
84
|
def to_s
|
|
45
85
|
"#{value} of #{suit}"
|
|
@@ -68,6 +108,7 @@ class Card
|
|
|
68
108
|
|
|
69
109
|
class << self
|
|
70
110
|
extend T::Sig
|
|
111
|
+
|
|
71
112
|
sig { returns(T::Array[String]) }
|
|
72
113
|
def suits
|
|
73
114
|
%w[C H S D].freeze
|
|
@@ -87,5 +128,25 @@ class Card
|
|
|
87
128
|
def values
|
|
88
129
|
%w[A 2 3 4 5 6 7 8 9 10 J Q K].freeze
|
|
89
130
|
end
|
|
131
|
+
|
|
132
|
+
sig { returns(T::Array[String]) }
|
|
133
|
+
def odd_values
|
|
134
|
+
%w[A 3 5 7 9 J K].freeze
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
sig { returns(T::Array[String]) }
|
|
138
|
+
def even_values
|
|
139
|
+
%w[2 4 6 8 10 Q].freeze
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
sig { returns(T::Array[String]) }
|
|
143
|
+
def court_values
|
|
144
|
+
%w[J Q K].freeze
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
sig { returns(T::Array[String]) }
|
|
148
|
+
def spot_values
|
|
149
|
+
%w[A 2 3 4 5 6 7 8 9 10].freeze
|
|
150
|
+
end
|
|
90
151
|
end
|
|
91
152
|
end
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
module Cuts
|
|
6
6
|
extend T::Helpers
|
|
7
7
|
extend T::Sig
|
|
8
|
+
|
|
8
9
|
requires_ancestor { Packet }
|
|
9
10
|
|
|
10
11
|
sig { params(number: Integer).returns(Packet) }
|
|
@@ -21,13 +22,43 @@ module Cuts
|
|
|
21
22
|
self.cards = [cards, top_half.cards].flatten
|
|
22
23
|
end
|
|
23
24
|
|
|
25
|
+
sig { params(piles: T::Array[Packet]).void }
|
|
26
|
+
def reassemble_left_to_right_on_top(piles)
|
|
27
|
+
assembled = reassemble_cards(piles)
|
|
28
|
+
self.cards = assembled + cards
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
sig { params(piles: T::Array[Packet]).void }
|
|
32
|
+
def reassemble_left_to_right_on_bottom(piles)
|
|
33
|
+
assembled = reassemble_cards(piles)
|
|
34
|
+
self.cards += assembled
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
sig { params(piles: T::Array[Packet]).void }
|
|
38
|
+
def reassemble_right_to_left_on_top(piles)
|
|
39
|
+
assembled = reassemble_cards(piles, reverse: true)
|
|
40
|
+
self.cards = assembled + cards
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
sig { params(piles: T::Array[Packet]).void }
|
|
44
|
+
def reassemble_right_to_left_on_bottom(piles)
|
|
45
|
+
assembled = reassemble_cards(piles, reverse: true)
|
|
46
|
+
self.cards += assembled
|
|
47
|
+
end
|
|
48
|
+
|
|
24
49
|
private
|
|
25
50
|
|
|
51
|
+
sig { params(piles: T::Array[Packet], reverse: T::Boolean).returns(T::Array[Card]) }
|
|
52
|
+
def reassemble_cards(piles, reverse: false)
|
|
53
|
+
piles.reverse! if reverse
|
|
54
|
+
piles.reduce([]) { |acc, pile| acc << pile.cut(number: pile.size).cards }.flatten
|
|
55
|
+
end
|
|
56
|
+
|
|
26
57
|
sig { params(number: Integer).returns(T::Boolean) }
|
|
27
58
|
def invalid_number_to_cut_to?(number)
|
|
28
59
|
return true if number.negative?
|
|
29
60
|
return true if number.zero?
|
|
30
|
-
return true if number
|
|
61
|
+
return true if number > cards.size
|
|
31
62
|
|
|
32
63
|
false
|
|
33
64
|
end
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# This represents a packet of cards
|
|
5
5
|
class Packet
|
|
6
6
|
extend T::Sig
|
|
7
|
+
|
|
7
8
|
require "deck_of_cards_handler/packet/shuffles"
|
|
8
9
|
require "deck_of_cards_handler/packet/deals"
|
|
9
10
|
require "deck_of_cards_handler/packet/cuts"
|
|
@@ -14,9 +15,7 @@ class Packet
|
|
|
14
15
|
attr_accessor :cards
|
|
15
16
|
|
|
16
17
|
sig { params(cards: T::Array[Card]).void }
|
|
17
|
-
def initialize(cards:)
|
|
18
|
-
raise ArgumentError if cards.empty?
|
|
19
|
-
|
|
18
|
+
def initialize(cards: [])
|
|
20
19
|
@cards = T.let(cards, T::Array[Card])
|
|
21
20
|
end
|
|
22
21
|
|
|
@@ -105,4 +104,23 @@ class Packet
|
|
|
105
104
|
def to_s
|
|
106
105
|
cards.map(&:to_s)
|
|
107
106
|
end
|
|
107
|
+
|
|
108
|
+
sig do
|
|
109
|
+
returns(
|
|
110
|
+
T.any(
|
|
111
|
+
PokerHands::HighCard,
|
|
112
|
+
PokerHands::OnePair,
|
|
113
|
+
PokerHands::TwoPairs,
|
|
114
|
+
PokerHands::ThreeOfAKind,
|
|
115
|
+
PokerHands::Straight,
|
|
116
|
+
PokerHands::Flush,
|
|
117
|
+
PokerHands::FullHouse,
|
|
118
|
+
PokerHands::FourOfAKind,
|
|
119
|
+
PokerHands::StraightFlush
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
end
|
|
123
|
+
def to_poker_hand
|
|
124
|
+
PokerHands::PokerHand.create(cards:)
|
|
125
|
+
end
|
|
108
126
|
end
|
|
@@ -7,6 +7,7 @@ module PokerHands
|
|
|
7
7
|
extend T::Sig
|
|
8
8
|
extend T::Helpers
|
|
9
9
|
include Comparable
|
|
10
|
+
|
|
10
11
|
abstract!
|
|
11
12
|
|
|
12
13
|
sig { returns(T::Array[Card]) }
|
|
@@ -29,6 +30,7 @@ module PokerHands
|
|
|
29
30
|
|
|
30
31
|
class << self
|
|
31
32
|
extend T::Sig
|
|
33
|
+
|
|
32
34
|
sig { params(string: String).returns(PokerHand) }
|
|
33
35
|
def build_from_string(string:)
|
|
34
36
|
cards = Packet.build_from_string(string:).cards
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: deck_of_cards_handler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Simon Bernard
|
|
@@ -52,7 +52,7 @@ dependencies:
|
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: 0.17.7
|
|
54
54
|
description: |2
|
|
55
|
-
It provides all the moves one could do with a deck of cards.
|
|
55
|
+
It provides all the moves one could do with a deck of playing cards.
|
|
56
56
|
Such as shuffling, cutting, dealing, culling, etc.
|
|
57
57
|
email:
|
|
58
58
|
- simonbernard@gmail.com
|
|
@@ -158,5 +158,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
158
158
|
requirements: []
|
|
159
159
|
rubygems_version: 3.6.9
|
|
160
160
|
specification_version: 4
|
|
161
|
-
summary: A gem that simulates the handling of a deck of cards
|
|
161
|
+
summary: A gem that simulates the handling of a deck of playing cards
|
|
162
162
|
test_files: []
|