Class: Resonad

Inherits:
Object
  • Object
show all
Extended by:
Mixin
Defined in:
lib/resonad.rb,
lib/resonad/version.rb

Direct Known Subclasses

Failure, Success

Defined Under Namespace

Modules: Mixin Classes: Failure, NonExistentError, NonExistentValue, Success

Constant Summary collapse

NIL_SUCCESS =
Success.new(nil)
NIL_FAILURE =
Failure.new(nil)
VERSION =
'1.2.0'

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Mixin

Failure, Success

Constructor Details

#initialize(*args) ⇒ Resonad

Returns a new instance of Resonad.

Raises:

  • (NotImplementedError)


130
131
132
# File 'lib/resonad.rb', line 130

def initialize(*args)
  raise NotImplementedError, "This is an abstract class. Use Resonad::Success or Resonad::Failure instead."
end

Class Method Details

.rescuing_from(*exception_classes) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
# File 'lib/resonad.rb', line 118

def self.rescuing_from(*exception_classes)
  Success(yield)
rescue Exception => e
  if exception_classes.empty?
    Failure(e) # rescue from all exceptions
  elsif exception_classes.any? { |klass| e.is_a?(klass) }
    Failure(e) # rescue from specified exception type
  else
    raise # reraise unhandled exception
  end
end

Instance Method Details

#and_then(&block) ⇒ Object



149
# File 'lib/resonad.rb', line 149

def and_then(&block); flat_map(&block); end

#bad?Boolean

Returns:

  • (Boolean)


144
# File 'lib/resonad.rb', line 144

def bad?; failure?; end

#failed?Boolean

Returns:

  • (Boolean)


143
# File 'lib/resonad.rb', line 143

def failed?; failure?; end

#failure?Boolean

Returns:

  • (Boolean)


140
141
142
# File 'lib/resonad.rb', line 140

def failure?
  not success?
end

#flat_mapObject

Raises:

  • (NotImplementedError)


146
147
148
# File 'lib/resonad.rb', line 146

def flat_map
  raise NotImplementedError, "should be implemented in subclass"
end

#flat_map_errorObject

Raises:

  • (NotImplementedError)


151
152
153
# File 'lib/resonad.rb', line 151

def flat_map_error
  raise NotImplementedError, "should be implemented in subclass"
end

#ok?Boolean

Returns:

  • (Boolean)


138
# File 'lib/resonad.rb', line 138

def ok?; success?; end

#or_else(&block) ⇒ Object



154
# File 'lib/resonad.rb', line 154

def or_else(&block); flat_map_error(&block); end

#success?Boolean

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


134
135
136
# File 'lib/resonad.rb', line 134

def success?
  raise NotImplementedError, "should be implemented in subclass"
end

#successful?Boolean

Returns:

  • (Boolean)


137
# File 'lib/resonad.rb', line 137

def successful?; success?; end