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