lib/operatic/result.rb in operatic-0.5.0 vs lib/operatic/result.rb in operatic-0.6.0

- old
+ new

@@ -32,18 +32,35 @@ # Set data on the result. def []=(key, value) @data[key] = value end + # Returns an array of success and data. + # + # @example + # result = Result.new.success!(message: 'Hello world') + # + # case result + # in [true, { message: }] + # # Result is a success, do something with the `message` variable. + # in [false, _] + # # Result is a failure, do something else. + # end + # + # @return [Array(Boolean, Hash<Symbol, anything>)] + def deconstruct + [@success, @data] + end + # Mark the result as a failure, optionally attach +data+ via kwargs, and # freeze the object so it cannot be modified further. # # *Note*: Calling {#success!} or {#failure!} more than once will raise a # +FrozenError+. def failure!(**data) - set_data(**data) @success = false + set_data(data) freeze end def failure? !@success @@ -62,12 +79,12 @@ # intent in the consuming code. # # *Note*: Calling {#success!} or {#failure!} more than once will raise a # +FrozenError+. def success!(**data) - set_data(**data) @success = true + set_data(data) freeze end def success? @success @@ -80,10 +97,10 @@ def to_h @data end private - def set_data(**data) + def set_data(data) data.each do |key, value| @data[key] = value end end end