serradura/u-case

Micro::Case contracts

serradura opened this issue · 0 comments

Micro::Case contracts

class Divide < Micro::Case
  attributes :a, :b

  results do |on|
    on.failure(:attributes_must_be_numbers)
    on.failure(:division_by_zero)

    on.success(result: [:division])
  end

  def call!
    return Failure(:attributes_must_be_numbers) unless Kind.of?(Numeric, a, b)

    return Failure(:division_by_zero) if b == 0

    Success result: { division: a / b }
  end
end