Class: Dicey::SumFrequencyCalculators::BaseCalculator Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/dicey/sum_frequency_calculators/base_calculator.rb

Overview

This class is abstract.

Base frequencies calculator.

Constant Summary collapse

RESULT_TYPES =

Possible values for result_type argument in #call.

i[frequencies probabilities].freeze

Instance Method Summary collapse

Instance Method Details

#call(dice, result_type: :frequencies) ⇒ Hash{Numeric => Numeric}

Returns frequencies of each sum.

Parameters:

Returns:

  • (Hash{Numeric => Numeric})

    frequencies of each sum

Raises:

  • (DiceyError)

    if result_type is invalid

  • (DiceyError)

    if dice list is invalid for the calculator

  • (DiceyError)

    if calculator returned obviously wrong results



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/dicey/sum_frequency_calculators/base_calculator.rb', line 17

def call(dice, result_type: :frequencies)
  unless RESULT_TYPES.include?(result_type)
    raise DiceyError, "#{result_type} is not a valid result type!"
  end
  # Short-circuit for a degenerate case.
  return {} if dice.empty?
  raise DiceyError, "#{self.class} can not handle these dice!" unless valid_for?(dice)

  frequencies = calculate(dice)
  verify_result(frequencies, dice)
  frequencies = sort_result(frequencies)
  transform_result(frequencies, result_type)
end

#valid_for?(dice) ⇒ Boolean

Whether this calculator can be used for the list of dice.

Parameters:

Returns:

  • (Boolean)


35
36
37
# File 'lib/dicey/sum_frequency_calculators/base_calculator.rb', line 35

def valid_for?(dice)
  dice.is_a?(Enumerable) && dice.all?(AbstractDie) && validate(dice)
end