Class: RuneterraCards::CardSet
- Inherits:
-
Object
- Object
- RuneterraCards::CardSet
- 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
- #cards ⇒ Hash<String,Fixnum> readonly
Class Method Summary collapse
- .from_card_and_counts(set) ⇒ Object deprecated Deprecated.
-
.from_deck_code(deck_code) ⇒ CardSet
Parse a Deck Code.
Instance Method Summary collapse
-
#-(other) ⇒ CardSet
Subtract another CardSet from this one.
- #as_card_and_counts ⇒ Enumerator<CardAndCount> deprecated Deprecated.
-
#count_for_card_code(code) ⇒ Fixnum
Returns how many of the given card are in this CardSet.
-
#initialize(cards) ⇒ CardSet
constructor
A new instance of CardSet.
Constructor Details
#initialize(cards) ⇒ CardSet
Returns a new instance of CardSet.
14 15 16 |
# File 'lib/runeterra_cards/card_set.rb', line 14 def initialize(cards) @cards = cards end |
Instance Attribute Details
#cards ⇒ Hash<String,Fixnum> (readonly)
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.
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
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_counts ⇒ Enumerator<CardAndCount>
Deprecated.
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.
46 47 48 |
# File 'lib/runeterra_cards/card_set.rb', line 46 def count_for_card_code(code) cards[code] || 0 end |