Sha256: b7696343aa67491a5280e2ddd4225909c25c85f3ecc5313b0277364da00552e4
Contents?: true
Size: 1.24 KB
Versions: 5
Compression:
Stored size: 1.24 KB
Contents
# frozen_string_literal: true module FiftyTwo class Rank include Comparable CATEGORIES = %i[pip face] attr_reader :value, :name, :category def initialize(value, name = nil, category = :pip) @value = value @name = name || value.to_s @category = category end ALL = [ TWO = Rank.new(2).freeze, THREE = Rank.new(3).freeze, FOUR = Rank.new(4).freeze, FIVE = Rank.new(5).freeze, SIX = Rank.new(6).freeze, SEVEN = Rank.new(7).freeze, EIGHT = Rank.new(8).freeze, NINE = Rank.new(9).freeze, TEN = Rank.new(10).freeze, JACK = Rank.new(11, "jack", :face).freeze, QUEEN = Rank.new(12, "queen", :face).freeze, KING = Rank.new(13, "king", :face).freeze, ACE = Rank.new(14, "ace").freeze ] CATEGORIES.each do |category| define_method("#{category}?") { self.category == category } end ALL.select(&:face?).each do |rank| define_method("#{rank.name}?") { self == rank } end def ace? name == "ace" end def <=>(other) value <=> other.value end def to_s name.titleize end def identifier name.to_i > 0 ? name : name[0].upcase end alias_method :code, :identifier end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
fiftytwo-0.0.5 | lib/fiftytwo/rank.rb |
fiftytwo-0.0.4 | lib/fiftytwo/rank.rb |
fiftytwo-0.0.3 | lib/fiftytwo/rank.rb |
fiftytwo-0.0.2 | lib/fiftytwo/rank.rb |
fiftytwo-0.0.1 | lib/fiftytwo/rank.rb |