From 87d7b3492966457766293a6701d847c256916f21 Mon Sep 17 00:00:00 2001 From: Quigley Malcolm Date: Fri, 22 Nov 2024 00:34:48 -0600 Subject: [PATCH] Update `ex_ttrpg_dev roll` to handle multiple dice specs Previously, only one dice spec could be given, i.e. `ex_ttrpg_dev roll 3d4`. However, now multiple dice specs can be given in a single invocation. That is, one can now do something like ``` $ ./ex_ttrpg_dev roll 10d10,10d12,10d20 10d10: [5, 3, 8, 4, 10, 3, 9, 2, 7, 4] 10d12: [9, 3, 3, 4, 11, 12, 12, 3, 6, 12] 10d20: [7, 3, 7, 4, 6, 1, 16, 3, 16, 6] ``` --- lib/cli.ex | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/cli.ex b/lib/cli.ex index f575006..790a4fb 100644 --- a/lib/cli.ex +++ b/lib/cli.ex @@ -5,6 +5,7 @@ defmodule ExTTRPGDev.CLI do alias ExTTRPGDev.RuleSystems.Abilities alias ExTTRPGDev.RuleSystems.Languages alias ExTTRPGDev.RuleSystems.Skills + alias ExTTRPGDev.CustomParsers @moduledoc """ The CLI for the project @@ -30,7 +31,7 @@ defmodule ExTTRPGDev.CLI do help: "Dice in the format of xdy wherein x is the number of dice, y is the number of sides the dice should have", required: true, - parser: :string + parser: &CustomParsers.dice_parser(&1) ] ] ], @@ -144,9 +145,10 @@ defmodule ExTTRPGDev.CLI do end end - def handle_roll(%Optimus.ParseResult{args: %{dice: dice_str}}) do - Dice.roll(dice_str) - |> IO.inspect(label: "Results") + def handle_roll(%Optimus.ParseResult{args: %{dice: dice}}) do + dice + |> Enum.map(fn dice_spec -> {dice_spec, Dice.roll(dice_spec)} end) + |> Enum.each(fn {dice_spec, results} -> IO.inspect(results, label: dice_spec) end) end def handle_system_subcommands([command | subcommands], %Optimus.ParseResult{