Sha256: 048c6cf9fe017762c676e156bbb964928337d45f28d9d400830a1f402a83306c

Contents?: true

Size: 874 Bytes

Versions: 3

Compression:

Stored size: 874 Bytes

Contents

require 'delegate'

require 'contextual_exceptions'
using ContextualExceptions::ClassRefinement

module AcpcPokerTypes
  class ChipStack < DelegateClass(Rational)
    exceptions :illegal_number_of_chips

    # @param [#to_i] number_of_chips The number of chips to be made into a stack.
    # @raise (see #assert_valid_value)
    def initialize(number_of_chips=0)
      @value = number_of_chips.to_i

      assert_valid_value

      super @value
    end

    def receive!(number_of_chips)
      @value += number_of_chips

      assert_valid_value

      __setobj__ @value

      self
    end
    def give!(number_of_chips)
      receive!(-number_of_chips)
    end

    private

    # @raise IllegalNumberOfChips
    def assert_valid_value
      raise IllegalNumberOfChips, "\"#{@value.to_s}\" is an invalid value of chips (cannot be negative)" if @value < 0
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
acpc_poker_types-3.1.2 lib/acpc_poker_types/chip_stack.rb
acpc_poker_types-3.1.1 lib/acpc_poker_types/chip_stack.rb
acpc_poker_types-3.1.0 lib/acpc_poker_types/chip_stack.rb