Class: Serviced::Failure

Inherits:
Result
  • Object
show all
Defined in:
lib/serviced/result.rb

Overview

A failed outcome. Carries a machine-readable reason for branching, an optional human-readable message, and an optional error payload (for example an exception or an ActiveModel::Errors object).

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Result

#and_then, #failure?, #map, #on_failure, #on_success, #value

Constructor Details

#initialize(reason = :error, message = nil, error: nil) ⇒ Failure

Returns a new instance of Failure.

Parameters:

  • reason (Symbol) (defaults to: :error)

    machine-readable reason (defaults to :error)

  • message (String, nil) (defaults to: nil)

    human-readable description

  • error (Object, nil) (defaults to: nil)

    structured error payload



131
132
133
134
135
136
137
# File 'lib/serviced/result.rb', line 131

def initialize(reason = :error, message = nil, error: nil)
  super()
  @reason = reason
  @message = message
  @error = error
  freeze
end

Instance Attribute Details

#errorObject? (readonly)

Returns structured error payload (exception, error object, details).

Returns:

  • (Object, nil)

    structured error payload (exception, error object, details)



126
127
128
# File 'lib/serviced/result.rb', line 126

def error
  @error
end

#messageString? (readonly)

Returns human-readable description.

Returns:

  • (String, nil)

    human-readable description



123
124
125
# File 'lib/serviced/result.rb', line 123

def message
  @message
end

#reasonSymbol (readonly)

Returns machine-readable reason, suitable for case/when branching.

Returns:

  • (Symbol)

    machine-readable reason, suitable for case/when branching



120
121
122
# File 'lib/serviced/result.rb', line 120

def reason
  @reason
end

Instance Method Details

#deconstructObject



150
151
152
# File 'lib/serviced/result.rb', line 150

def deconstruct
  [reason, message]
end

#deconstruct_keys(_keys) ⇒ Object



154
155
156
# File 'lib/serviced/result.rb', line 154

def deconstruct_keys(_keys)
  { reason: reason, message: message, error: error }
end

#success?Boolean

Returns:

  • (Boolean)


139
140
141
# File 'lib/serviced/result.rb', line 139

def success?
  false
end

#value!Object

Always raises: a failure has no value to unwrap.



145
146
147
148
# File 'lib/serviced/result.rb', line 145

def value!
  raise InvalidResultAccess,
        "Called #value! on a Failure (reason: #{reason.inspect}, message: #{message.inspect})"
end