Created
October 21, 2016 13:36
-
-
Save SunnyMagadan/7d182f1f02a9a2172db49c528bb8c274 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module OperationResult | |
def Success(value) | |
Results::Success.new(value) | |
end | |
def Failure(value) | |
Results::Failure.new(value) | |
end | |
module Results | |
class Result | |
def initialize(value) | |
@value = value | |
end | |
def success | |
end | |
def failure | |
end | |
def match | |
yield self | |
end | |
end | |
class Success < Result | |
def success | |
yield @value | |
end | |
end | |
class Failure < Result | |
def failure | |
yield @value | |
end | |
end | |
end | |
end | |
class Service | |
include OperationResult | |
def self.call(a) | |
new(a).call | |
end | |
def initialize(a) | |
@a = a | |
end | |
def call | |
if @a | |
Success(@a) | |
else | |
Failure(:some_error) | |
end | |
end | |
end | |
Service.call(1).match do |result| | |
result.success do |value| | |
p "success #{value}" | |
end | |
result.failure do |error| | |
p "error #{error}" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment