Class: Dicey::SumFrequencyCalculators::Runner

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

Overview

The defaultest runner which calculates roll frequencies from command-line dice.

Instance Method Summary collapse

Instance Method Details

#call(arguments, roll_calculators:, format:, result:) ⇒ nil

Transform die definitions to roll frequencies.

Parameters:

  • arguments (Array<String>)

    die definitions

  • roll_calculators (Array<BaseCalculator>)

    list of calculators to use

  • format (#call)

    formatter for output

  • result (Symbol)

    result type selector

Returns:

  • (nil)

Raises:



21
22
23
24
25
26
27
28
29
# File 'lib/dicey/sum_frequency_calculators/runner.rb', line 21

def call(arguments, roll_calculators:, format:, result:, **)
  raise DiceyError, "no dice!" if arguments.empty?

  dice = arguments.flat_map { |definition| die_foundry.cast(definition) }
  frequencies = roll_calculators.find { _1.valid_for?(dice) }&.call(dice, result_type: result)
  raise DiceyError, "no calculator could handle these dice!" unless frequencies

  format.call(frequencies, AbstractDie.describe(dice))
end