Class: Deck

Inherits:
Hand show all
Defined in:
tomes/components/deck_builder/deck.rb

Overview

A Hand that uses and generates other Hands

Constant Summary collapse

VALID_REFERENCES =
[Integer, Range, Symbol].freeze

Instance Attribute Summary

Attributes inherited from Hand

#cards, #sorting_pattern

Instance Method Summary collapse

Methods inherited from Hand

#all_types, #all_values, #discard, #discard_index, #move, #pop, #receive, #shuffle!, #sort!

Methods included from HandInformation

#empty?, #full?, #include?, #length

Methods included from HandIteration

#each, #index, #map, #select

Instance Method Details

#[](*references) ⇒ Array

Returns both Cards via their indices in #cards and Hands via their key in #hands.

Both can be referenced in a single call.

Parameters:

  • references (Integer, Range, Symbol)

    Integers and Ranges will return cards; Symbols will return Hands.

Returns:

  • (Array)

    The array will always be sorted as [Cards, Hands]



32
33
34
35
36
37
38
39
40
41
42
# File 'tomes/components/deck_builder/deck.rb', line 32

def [](*references)
  results = sort_references(references).map do |reference|
    if reference.is_a?(Integer) || reference.is_a?(Range)
      cards[reference]
    elsif reference.is_a? Symbol
      hands[reference]
    end
  end

  results.flatten
end

#deal(number_of_cards = 1) ⇒ Card, Array

Removes and returns the topmost card in the draw stack.

Parameters:

  • Optional; (number_of_cards)

    defaults to 1.

Returns:



54
55
56
# File 'tomes/components/deck_builder/deck.rb', line 54

def deal(number_of_cards = 1)
  hands[:draw].pop(number_of_cards)
end

#deal_to(*hands, number_of_cards: 1) ⇒ Object

Deals cards to the provided hands.

Parameters:

  • hands (Hands)
  • number_of_cards (Integer) (defaults to: 1)

    Optional keyword argument; defaults to 1.



61
62
63
# File 'tomes/components/deck_builder/deck.rb', line 61

def deal_to(*hands, number_of_cards: 1)
  hands.each { |hand| hand.draw(deal(number_of_cards)) }
end

#generate_hands(number_of_hands, number_of_cards = 5) ⇒ Object

Deals the provided number of cards to the provided number of hands.

Parameters:

  • number_of_hands (Integer)
  • number_of_cards (Integer) (defaults to: 5)

    Optional; defaults to 5.



47
48
49
# File 'tomes/components/deck_builder/deck.rb', line 47

def generate_hands(number_of_hands, number_of_cards = 5)
  Array.new(number_of_hands) { Hand.new(deal(number_of_cards)) }
end