bcdice/BCDice

View on GitHub
lib/bcdice/common_command/calc/node.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

require "bcdice/arithmetic/node"

module BCDice
  module CommonCommand
    module Calc
      module Node
        class Command
          def initialize(secret:, expr:)
            @secret = secret
            @expr = expr
          end

          def eval(round_type)
            value =
              begin
                @expr.eval(round_type)
              rescue ZeroDivisionError
                "ゼロ除算が発生したため計算できませんでした"
              end

            output =
              if @expr.is_a?(Arithmetic::Node::Parenthesis)
                @expr.output
              else
                "(#{@expr.output})"
              end

            Result.new.tap do |r|
              r.secret = @secret
              r.text = "c#{output} > #{value}"
            end
          end
        end
      end
    end
  end
end