Sha256: 6e9f3ae0fed7c94f5e14f3c86bdfa997cb4745fadc507b761ca47c0c4a6dc659
Contents?: true
Size: 1.09 KB
Versions: 1
Compression:
Stored size: 1.09 KB
Contents
# frozen_string_literal: true require "forwardable" require_relative "safe_operation/version" require_relative "safe_operation/success" require_relative "safe_operation/failure" class SafeOperation extend Forwardable class << self protected(:new) def run success(yield) rescue StandardError => exception failure(exception) end def success(value) new(success: value) end def failure(value) new(failure: value) end end def_delegators :@result, :success?, :value def initialize(success: nil, failure: nil) @result = success ? Success.new(success) : Failure.new(failure) end def value_or(fallback_value) if success? value else fallback_value end end def value_or_else(&fallback_block) if success? value else fallback_block.call(value) end end def and_then(&block) if success? self.class.success(block.call(value)) else self end end def or_else(&block) if success? self else self.class.failure(block.call(value)) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
safe_operation-2.0.0 | lib/safe_operation.rb |