poker-ranking 1.0.8 → 1.1.0

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.
data/lib/hand.rb CHANGED
@@ -57,6 +57,10 @@ module PokerRanking
57
57
  hand_type.name
58
58
  end
59
59
 
60
+ def cards_used
61
+ hand_type.cards_used.sort_by! { |card| card.value }
62
+ end
63
+
60
64
  def ==(other)
61
65
  cards == other.cards
62
66
  end
@@ -64,6 +68,7 @@ module PokerRanking
64
68
  def data
65
69
  {
66
70
  cards: @cards.map { |card| card.data },
71
+ cards_used: cards_used.map { |card| card.data },
67
72
  rank: rank,
68
73
  value: value,
69
74
  second_value: second_value,
@@ -52,7 +52,46 @@ module PokerRanking
52
52
  kickers[0..number_of_kickers-1]
53
53
  end
54
54
 
55
+ def cards_for_values_and_kickers(*values)
56
+ result = cards.select { |card| not values.include? card.value }
57
+ values.reverse.each do |value|
58
+ result += cards.select { |card| card.value == value }
59
+ end
60
+ result[-5..-1]
61
+ end
62
+
63
+ def straight_value_of(card_set)
64
+ cards_in_straight = cards_in_straight(card_set)
65
+
66
+ cards_in_straight.empty? ? 0 : cards_in_straight[-1].value
67
+ end
68
+
69
+ def cards_in_straight(card_set)
70
+ return [] if card_set.empty?
71
+
72
+ cards_in_streak = []
73
+ cards_in_straight = []
74
+ last_value = 0
55
75
 
76
+ if card_set[-1].rank == 'Ace'
77
+ cards_in_streak << card_set[-1]
78
+ last_value = 1
79
+ end
80
+
81
+ card_set.each do |card|
82
+ if cards_in_streak.empty? or card.value == last_value + 1
83
+ cards_in_streak << card
84
+ elsif card.value > last_value
85
+ cards_in_streak = [card]
86
+ end
87
+ last_value = cards_in_streak[-1].value
88
+
89
+ if cards_in_streak.length >= 5
90
+ cards_in_straight = cards_in_streak.clone
91
+ end
92
+ end
93
+ cards_in_straight
94
+ end
56
95
  end
57
96
  end
58
97
  end
@@ -6,7 +6,7 @@ module PokerRanking
6
6
 
7
7
  def handles?
8
8
  count = { 'Hearts' => 0, 'Clubs' => 0, 'Diamonds' => 0, 'Spades' => 0 }
9
- @cards.each do |card|
9
+ cards.each do |card|
10
10
  count[card.suit] += 1
11
11
  end
12
12
 
@@ -27,7 +27,7 @@ module PokerRanking
27
27
  #only use kickers that are of the suit
28
28
  def kickers
29
29
  kick = []
30
- @cards.reverse.each do |card|
30
+ cards.reverse.each do |card|
31
31
  if card.suit == @flush_suit
32
32
  kick << card.value
33
33
  end
@@ -42,6 +42,10 @@ module PokerRanking
42
42
  def name
43
43
  'flush'
44
44
  end
45
+
46
+ def cards_used
47
+ cards.select { |card| card.suit == @flush_suit }[-5..-1]
48
+ end
45
49
  end
46
50
  end
47
51
  end
@@ -27,6 +27,10 @@ module PokerRanking
27
27
  def name
28
28
  'four of a kind'
29
29
  end
30
+
31
+ def cards_used
32
+ cards_for_values_and_kickers value
33
+ end
30
34
  end
31
35
  end
32
36
  end
@@ -26,6 +26,10 @@ module PokerRanking
26
26
  def name
27
27
  'full house'
28
28
  end
29
+
30
+ def cards_used
31
+ cards_for_values_and_kickers value, second_value
32
+ end
29
33
  end
30
34
  end
31
35
  end
@@ -13,6 +13,10 @@ module PokerRanking
13
13
  def name
14
14
  'high card'
15
15
  end
16
+
17
+ def cards_used
18
+ cards_for_values_and_kickers
19
+ end
16
20
  end
17
21
  end
18
22
  end
@@ -22,6 +22,10 @@ module PokerRanking
22
22
  def name
23
23
  'pair'
24
24
  end
25
+
26
+ def cards_used
27
+ cards_for_values_and_kickers value
28
+ end
25
29
  end
26
30
  end
27
31
  end
@@ -3,7 +3,7 @@ module PokerRanking
3
3
  class Straight < Base
4
4
 
5
5
  def handles?
6
- straight_value > 0
6
+ value > 0
7
7
  end
8
8
 
9
9
  def rank
@@ -11,45 +11,16 @@ module PokerRanking
11
11
  end
12
12
 
13
13
  def value
14
- straight_value
14
+ straight_value_of cards
15
15
  end
16
16
 
17
17
  def name
18
18
  'straight'
19
19
  end
20
20
 
21
- private
22
-
23
- def straight_value
24
- count = 1
25
- last_value = 0
26
- value = 0
27
-
28
- if has_ace()
29
- count += 1
30
- last_value = 1
31
- end
32
-
33
- @cards.each do |card|
34
- if card.value == last_value + 1
35
- count += 1
36
- else
37
- count = 1
38
- end
39
- last_value = card.value
40
-
41
- if count >= 5
42
- value = card.value
43
- end
44
- end
45
- value
21
+ def cards_used
22
+ cards_in_straight(cards)[-5..-1]
46
23
  end
47
-
48
- def has_ace
49
- @cards[-1].rank == 'Ace'
50
- end
51
-
52
-
53
24
  end
54
25
  end
55
26
  end
@@ -14,7 +14,7 @@ module PokerRanking
14
14
 
15
15
  def value
16
16
  SUITS.each do |suit|
17
- value_for_suit = straight_value_for_suit(suit)
17
+ value_for_suit = straight_value_of(cards.select { |card| card.suit == suit })
18
18
  return value_for_suit if value_for_suit > 0
19
19
  end
20
20
  0
@@ -24,41 +24,11 @@ module PokerRanking
24
24
  'straight flush'
25
25
  end
26
26
 
27
- private
28
-
29
- def straight_value_for_suit(suit)
30
- count = 1
31
- last_value = 0
32
- value = 0
33
-
34
- if has_ace_of_suit(suit)
35
- count += 1
36
- last_value = 1
37
- end
38
-
39
- cards.each do |card|
40
- if card.suit == suit
41
- if card.value == last_value + 1
42
- count += 1
43
- else
44
- count = 1
45
- end
46
- last_value = card.value
47
-
48
- if count >= 5
49
- value = card.value
50
- end
51
- end
52
- end
53
- value
54
- end
55
-
56
- def has_ace_of_suit(suit)
57
- cards.each do |card|
58
- return true if card.value == 14 && card.suit == suit
27
+ def cards_used
28
+ SUITS.each do |suit|
29
+ straight_in_suite = cards_in_straight(cards.select { |card| card.suit == suit })
30
+ return straight_in_suite[-5..-1] if straight_in_suite.length >= 5
59
31
  end
60
-
61
- false
62
32
  end
63
33
  end
64
34
  end
@@ -23,6 +23,9 @@ module PokerRanking
23
23
  'three of a kind'
24
24
  end
25
25
 
26
+ def cards_used
27
+ cards_for_values_and_kickers value
28
+ end
26
29
  end
27
30
  end
28
31
  end
@@ -31,12 +31,16 @@ module PokerRanking
31
31
  'two pairs'
32
32
  end
33
33
 
34
+ def cards_used
35
+ cards_for_values_and_kickers value, second_value
36
+ end
37
+
34
38
  private
35
39
 
36
40
  def has_two_pair?
37
41
  pair_count = 0
38
42
  last_value = 0
39
- @cards.each do |card|
43
+ cards.each do |card|
40
44
  if card.value == last_value
41
45
  pair_count += 1
42
46
  end
data/lib/poker_ranking.rb CHANGED
@@ -2,5 +2,5 @@ require_relative 'hand'
2
2
  require_relative 'card'
3
3
 
4
4
  module PokerRanking
5
- VERSION = '1.0.8'
5
+ VERSION = '1.1.0'
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poker-ranking
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -44,6 +44,22 @@ dependencies:
44
44
  - - ! '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: codeclimate-test-reporter
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
47
63
  description: Created for the lean poker project
48
64
  email: rafael@ordog.tk
49
65
  executables: []