lib/cards_lib/card.rb in cards_lib-0.0.5 vs lib/cards_lib/card.rb in cards_lib-0.0.6

- old
+ new

@@ -1,11 +1,13 @@ module CardsLib class Card - def initialize(face) + include Comparable + def initialize(face, ranker = Ranker) raise InvalidCardFace, "face cannot be blank" if face.to_s.empty? @suit = nil @rank = nil + @ranker = ranker if face.is_a? Hash @suit = face.fetch(:suit) { nil } @rank = face.fetch(:rank) { nil } if @rank && @suit str = "" @@ -15,10 +17,11 @@ @face = [@rank, str, @suit].join end else @face = face end + @ranker = ranker.new(rank) end def face @face end @@ -28,11 +31,40 @@ end def rank @rank || @face[0] end + + def <=>(other) + @ranker.<=>(other) + end end class InvalidCardFace < Exception + end + + class Ranker + include Comparable + attr :rank, :ranks, :rank_lookup + def initialize( + rank = nil, + ranks: "A23456789TJQK".split(''), + rank_lookup: ->rank_face{ + r = @ranks.index(rank_face).to_i + 1 + # r = 10 if r > 10 + r + }) + @rank = rank + @ranks = ranks + @rank_lookup = rank_lookup + end + + def <=>(item) + @rank_lookup[self.rank] <=> @rank_lookup[item.rank] + end + + def inspect + @rank + end end end