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