Packages

Elixir library to calculate dice rolls.

Retired package: Deprecated - Project abandoned. For a replacement, please see https://hex.pm/packages/rollex

Current section

Files

Jump to
dicer lib dicer.ex
Raw

lib/dicer.ex

defmodule Dicer do
alias Dicer.Sanitizer
alias Dicer.Validator
alias Dicer.Lexer
alias Dicer.Roller
alias Dicer.Parser
def roll(input, validation_options \\ %{max_dice: 1_000_000, max_sides: 1_000_000})
def roll(input, validation_options) when is_binary(input) and is_map(validation_options) do
input
|> Sanitizer.sanitize
|> Lexer.tokenize
|> Validator.validate(validation_options)
|> Roller.roll_dice
|> Parser.evaluate
end
def roll(_input, _validation_options) do
{:error, ["Not a string!"]}
end
def roll!(input) when is_binary(input) do
result =
input
|> roll
case result do
{:error, messages} ->
raise "\n" <> Enum.join(messages, "\n") <> "\n"
_ ->
result
end
end
def roll!(_input) do
raise "Not a string!"
end
end