Class: Dry::Monads::Result::Failure

Inherits:
Dry::Monads::Result show all
Includes:
Dry::Monads::RightBiased::Left
Defined in:
lib/dry/monads/result.rb,
lib/dry/monads/maybe.rb,
lib/dry/monads/validated.rb

Overview

Represents a value of a failed operation.

Instance Attribute Summary collapse

Attributes inherited from Dry::Monads::Result

#success

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Dry::Monads::RightBiased::Left

#and, #apply, #bind, #deconstruct, #deconstruct_keys, #discard, #flatten, #fmap, #tee, trace_caller, #value!, #|

Methods inherited from Dry::Monads::Result

#monad, pure, #to_monad, #to_result

Methods included from Transformer

#fmap2, #fmap3

Constructor Details

#initialize(value, trace = RightBiased::Left.trace_caller) ⇒ Failure

Returns a new instance of Failure.

Parameters:

  • value (Object)

    failure value

  • trace (String) (defaults to: RightBiased::Left.trace_caller)

    caller line



170
171
172
173
174
# File 'lib/dry/monads/result.rb', line 170

def initialize(value, trace = RightBiased::Left.trace_caller)
  super()
  @value = value
  @trace = trace
end

Instance Attribute Details

#traceString (readonly)

Line where the value was constructed

Returns:

  • (String)


166
167
168
# File 'lib/dry/monads/result.rb', line 166

def trace
  @trace
end

Class Method Details

.[](*value) ⇒ Object

Shortcut for Failure()

@example
  include Dry::Monads[:result]

  def call
    Failure[:error, :not_found] # => Failure([:error, :not_found])
  end


151
152
153
# File 'lib/dry/monads/result.rb', line 151

def self.[](*value)
  new(value, RightBiased::Left.trace_caller)
end

.to_procProc

Returns a constructor proc

Returns:

  • (Proc)


158
159
160
# File 'lib/dry/monads/result.rb', line 158

def self.to_proc
  @to_proc ||= method(:new).to_proc
end

Instance Method Details

#===(other) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


246
247
248
# File 'lib/dry/monads/result.rb', line 246

def ===(other)
  Failure === other && failure === other.failure
end

#alt_map(proc) ⇒ Result::Failure #alt_mapResult::Failure

Lifts a block/proc over Failure

Overloads:



270
271
272
273
# File 'lib/dry/monads/result.rb', line 270

def alt_map(proc = Undefined, &block)
  f = Undefined.default(proc, block)
  self.class.new(f.(failure), RightBiased::Left.trace_caller)
end

#either(_, g) ⇒ Any

Returns result of applying second function to the internal value.

Examples:

Dry::Monads.Failure(1).either(-> x { x + 1 }, -> x { x + 2 }) # => 3

Parameters:

  • _ (#call)

    Ignored

  • g (#call)

    Function to call

Returns:

  • (Any)

    Return value of ‘g`



258
# File 'lib/dry/monads/result.rb', line 258

def either(_, g) = g.(failure)

#failureObject



177
# File 'lib/dry/monads/result.rb', line 177

def failure = @value

#failure?Boolean

Returns true

Returns:

  • (Boolean)


185
# File 'lib/dry/monads/result.rb', line 185

def failure? = true

#flipResult::Success

Transform to a Success instance

Returns:



233
# File 'lib/dry/monads/result.rb', line 233

def flip = Success.new(@value)

#or(*args) ⇒ Object

If a block is given passes internal value to it and returns the result, otherwise simply returns the first argument.

Examples:

Dry::Monads.Failure(ArgumentError.new('error message')).or(&:message)
# => "error message"

Parameters:

  • args (Array<Object>)

    arguments that will be passed to a block if one was given, otherwise the first value will be returned

Returns:

  • (Object)


201
202
203
204
205
206
207
# File 'lib/dry/monads/result.rb', line 201

def or(*args)
  if block_given?
    yield(@value, *args)
  else
    args[0]
  end
end

#or_fmapResult::Success

A lifted version of ‘#or`. Wraps the passed value or the block result with Result::Success.

Examples:

Dry::Monads.Failure.new('no value').or_fmap('value') # => Success("value")
Dry::Monads.Failure.new('no value').or_fmap { 'value' } # => Success("value")

Parameters:

  • args (Array<Object>)

    arguments will be passed to the underlying ‘#or` call

Returns:



218
# File 'lib/dry/monads/result.rb', line 218

def or_fmap(...) = Success.new(self.or(...))

#result(f, _) ⇒ Object

Apply the first function to value.



182
# File 'lib/dry/monads/result.rb', line 182

def result(f, _) = f.(@value)

#success?Boolean

Returns false

Returns:

  • (Boolean)


188
# File 'lib/dry/monads/result.rb', line 188

def success? = false

#to_maybeMaybe::None

Returns:



367
# File 'lib/dry/monads/maybe.rb', line 367

def to_maybe = Maybe::None.new(trace)

#to_sString Also known as: inspect

Returns:

  • (String)


221
222
223
224
225
226
227
# File 'lib/dry/monads/result.rb', line 221

def to_s
  if Unit.equal?(@value)
    "Failure()"
  else
    "Failure(#{@value.inspect})"
  end
end

#to_validatedValidated::Invalid

Transforms to Validated

Returns:



287
# File 'lib/dry/monads/validated.rb', line 287

def to_validated = Validated::Invalid.new(failure, trace)

#value_or(val = nil) ⇒ Object



236
237
238
239
240
241
242
# File 'lib/dry/monads/result.rb', line 236

def value_or(val = nil)
  if block_given?
    yield(@value)
  else
    val
  end
end