Class: RuneterraCards::CardSet

Inherits:
Object
  • Object
show all
Defined in:
lib/runeterra_cards/card_set.rb

Overview

TODO:

The API to this class is very unstable and will change a lot in a coming release.

Represents a collection of cards.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cards) ⇒ CardSet

Returns a new instance of CardSet.

Parameters:

  • cards (Hash<String,Fixnum>)

    A Hash of card codes mapping to card counts


14
15
16
# File 'lib/runeterra_cards/card_set.rb', line 14

def initialize(cards)
  @cards = cards
end

Instance Attribute Details

#cardsHash<String,Fixnum> (readonly)

Returns:

  • (Hash<String,Fixnum>)

11
12
13
# File 'lib/runeterra_cards/card_set.rb', line 11

def cards
  @cards
end

Class Method Details

.from_card_and_counts(set) ⇒ Object

Deprecated.

19
20
21
# File 'lib/runeterra_cards/card_set.rb', line 19

def self.from_card_and_counts(set)
  new(Hash[set.map { |cac| [cac.code, cac.count] }])
end

.from_deck_code(deck_code) ⇒ CardSet

Parse a Deck Code.

Parameters:

  • deck_code (String)

Returns:

Raises:


57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/runeterra_cards/card_set.rb', line 57

def self.from_deck_code(deck_code)
  binary_data = decode_base32(deck_code)
  format, version = decode_format_and_version(binary_data[0])

  raise UnrecognizedVersionError.new(SUPPORTED_VERSION, version) unless version <= SUPPORTED_VERSION

  raise unless format.equal? 1

  int_array = binary_data[1..].unpack('w*')
  cards = assemble_card_list(int_array)
  from_card_and_counts(cards)
end

Instance Method Details

#-(other) ⇒ CardSet

Subtract another CardSet from this one. Items with count 0 are not represented in the returned CardSet, they are removed altogether.

Parameters:

Returns:


27
28
29
30
31
32
33
34
35
# File 'lib/runeterra_cards/card_set.rb', line 27

def -(other)
  remaining_cards =
    cards.each_with_object({}) do |(code, count), result|
      new_count = count - other.count_for_card_code(code)
      result[code] = new_count unless new_count.equal?(0)
    end

  CardSet.new(remaining_cards)
end

#as_card_and_countsEnumerator<CardAndCount>

Deprecated.

Returns:


39
40
41
# File 'lib/runeterra_cards/card_set.rb', line 39

def as_card_and_counts
  cards.map { |code, count| CardAndCount.new(code: code, count: count) }
end

#count_for_card_code(code) ⇒ Fixnum

Returns how many of the given card are in this CardSet.

Parameters:

  • code (String)

    Card code, e.g. “01DE031”

Returns:

  • (Fixnum)

    How many of the card are in this CardSet, or 0 if it isn't present.


46
47
48
# File 'lib/runeterra_cards/card_set.rb', line 46

def count_for_card_code(code)
  cards[code] || 0
end