module CardsLib::IsSet

Public Class Methods

verify(cards, rules = [:unique, :paired], specs = {}) click to toggle source
# File lib/cards_lib/is_set.rb, line 4
def verify(cards, rules = [:unique, :paired], specs = {})
  max = specs.fetch(:max) {Float::INFINITY}
  min = specs.fetch(:min) { 3 }
  rules.all? {|r| send(r, cards) } && (min..max).include?(cards.count)
end

Private Class Methods

ordered(cards) click to toggle source
# File lib/cards_lib/is_set.rb, line 25
def ordered(cards)
  cards.sort.inject_while?(:ordered?)
end
paired(cards) click to toggle source
# File lib/cards_lib/is_set.rb, line 17
def paired(cards)
  cards.inject_while?(:paired?)
end
suited(cards) click to toggle source
# File lib/cards_lib/is_set.rb, line 21
def suited(cards)
  cards.inject_while?(:suited?)
end
unique(cards) click to toggle source
# File lib/cards_lib/is_set.rb, line 11
def unique(cards)
  cards.combination(2).all? {|a, b| a != b }
end