Sha256: 79b3cf2b9d38ece89e16642c839b00e883e44835e9601a57f999d610e9ea59f5
Contents?: true
Size: 1.25 KB
Versions: 2
Compression:
Stored size: 1.25 KB
Contents
# frozen_string_literal: true module FiftyTwo module HasCards extend Enumerable attr_reader :cards delegate :shuffle!, :sort!, :<<, :[], :each, :map, :count, :first, :last, to: :cards CardUnavailableError = Class.new(StandardError) def initialize(cards = []) @cards = cards end def draw cards.shift end def render map(&:render).join(" ") end def locate(identifier) cards.find { |c| c.identifier == identifier.upcase } end def transfer(card, destination = nil) card = locate(card) unless card.is_a?(FiftyTwo::Card) raise CardUnavailableError if card.nil? raise CardUnavailableError unless cards.include?(card) (destination || card.deck) << cards.delete(card) end FiftyTwo::Suit::ALL.each do |suit| define_method(suit.name) { select(suit.name) } end FiftyTwo::Suit::Color::ALL.each do |color| define_method(color.name.pluralize) { select(color.name) } end [*FiftyTwo::Rank::CATEGORIES, :jack, :king, :queen, :ace].each do |category| define_method(category.to_s.pluralize) { select(category) } end private def select(identifier) self.class.new(cards.select { |c| c.send("#{identifier}?") }) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
fiftytwo-0.0.2 | lib/fiftytwo/has_cards.rb |
fiftytwo-0.0.1 | lib/fiftytwo/has_cards.rb |