deck_of_cards_handler 0.1.7 → 0.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6a1a1dd5335b11ff724511d5d322b9d50f2d58dd3397b02eefdc9cef3f5a552
4
- data.tar.gz: 79619874720f88fc3828ba1562e9171c2ab0d9d6a955bae07e3bed0dd2681453
3
+ metadata.gz: 6906ff341d8f885efe6e8d9489f526e89f860de3473c09480eadea613390c8ea
4
+ data.tar.gz: e128dfd6889392b9c4313b41520c590f21209f7fb1c855430b90cc3b4a820986
5
5
  SHA512:
6
- metadata.gz: 775cde0e2b4948b4052c7e1abb21a377212821016f390942c5cae7a739195f2efcd74b7b7b64f2bd9ced44e0a637fc05f5797faa282850bd1bdf8187854d515e
7
- data.tar.gz: b40aef85c522e65bcd590ed920c9113d16e4a64750d8a6b534fa72be150e01743d46631d3ec8eff434275089d73b2ba1820975dcef958e81a18485e45b6b3336
6
+ metadata.gz: 549cf0b957134db0d190633b022f023b7e19a5a00f28cbfc968a39c39123e384e5d8335f627ae235392dcb1a173a2ad148cee1edef53a5bc9a67a5745ca90c6e
7
+ data.tar.gz: 5ebc5edd4ac1036615fabed26bc89d7fb2eb44c83635801e64c197499e4e55142a59250088debea153fe277022364733cc05c836b917ad1d3dde88a45dc1d8c7
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Gem Version](https://badge.fury.io/rb/deck_of_cards_handler.svg)](https://badge.fury.io/rb/deck_of_cards_handler) [![Test suite](https://github.com/simonbernard2/deck_of_cards/actions/workflows/ruby.yml/badge.svg)](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}"
@@ -87,5 +127,25 @@ class Card
87
127
  def values
88
128
  %w[A 2 3 4 5 6 7 8 9 10 J Q K].freeze
89
129
  end
130
+
131
+ sig { returns(T::Array[String]) }
132
+ def odd_values
133
+ %w[A 3 5 7 9 J K].freeze
134
+ end
135
+
136
+ sig { returns(T::Array[String]) }
137
+ def even_values
138
+ %w[2 4 6 8 10 Q].freeze
139
+ end
140
+
141
+ sig { returns(T::Array[String]) }
142
+ def court_values
143
+ %w[J Q K].freeze
144
+ end
145
+
146
+ sig { returns(T::Array[String]) }
147
+ def spot_values
148
+ %w[A 2 3 4 5 6 7 8 9 10].freeze
149
+ end
90
150
  end
91
151
  end
@@ -21,8 +21,38 @@ module Cuts
21
21
  self.cards = [cards, top_half.cards].flatten
22
22
  end
23
23
 
24
+ sig { params(piles: T::Array[Packet]).void }
25
+ def reassemble_left_to_right_on_top(piles)
26
+ assembled = reassemble_cards(piles)
27
+ self.cards = assembled + cards
28
+ end
29
+
30
+ sig { params(piles: T::Array[Packet]).void }
31
+ def reassemble_left_to_right_on_bottom(piles)
32
+ assembled = reassemble_cards(piles)
33
+ self.cards += assembled
34
+ end
35
+
36
+ sig { params(piles: T::Array[Packet]).void }
37
+ def reassemble_right_to_left_on_top(piles)
38
+ assembled = reassemble_cards(piles, reverse: true)
39
+ self.cards = assembled + cards
40
+ end
41
+
42
+ sig { params(piles: T::Array[Packet]).void }
43
+ def reassemble_right_to_left_on_bottom(piles)
44
+ assembled = reassemble_cards(piles, reverse: true)
45
+ self.cards += assembled
46
+ end
47
+
24
48
  private
25
49
 
50
+ sig { params(piles: T::Array[Packet], reverse: T::Boolean).returns(T::Array[Card]) }
51
+ def reassemble_cards(piles, reverse: false)
52
+ piles.reverse! if reverse
53
+ piles.reduce([]) { |acc, pile| acc << pile.cards }.flatten
54
+ end
55
+
26
56
  sig { params(number: Integer).returns(T::Boolean) }
27
57
  def invalid_number_to_cut_to?(number)
28
58
  return true if number.negative?
@@ -14,9 +14,7 @@ class Packet
14
14
  attr_accessor :cards
15
15
 
16
16
  sig { params(cards: T::Array[Card]).void }
17
- def initialize(cards:)
18
- raise ArgumentError if cards.empty?
19
-
17
+ def initialize(cards: [])
20
18
  @cards = T.let(cards, T::Array[Card])
21
19
  end
22
20
 
@@ -105,4 +103,23 @@ class Packet
105
103
  def to_s
106
104
  cards.map(&:to_s)
107
105
  end
106
+
107
+ sig do
108
+ returns(
109
+ T.any(
110
+ PokerHands::HighCard,
111
+ PokerHands::OnePair,
112
+ PokerHands::TwoPairs,
113
+ PokerHands::ThreeOfAKind,
114
+ PokerHands::Straight,
115
+ PokerHands::Flush,
116
+ PokerHands::FullHouse,
117
+ PokerHands::FourOfAKind,
118
+ PokerHands::StraightFlush
119
+ )
120
+ )
121
+ end
122
+ def to_poker_hand
123
+ PokerHands::PokerHand.create(cards:)
124
+ end
108
125
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeckOfCardsHandler
4
- VERSION = "0.1.7"
4
+ VERSION = "0.1.8"
5
5
  end
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.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Bernard