Skip to content

Instantly share code, notes, and snippets.

@SunnyMagadan
Created October 21, 2016 13:36
Show Gist options
  • Save SunnyMagadan/7d182f1f02a9a2172db49c528bb8c274 to your computer and use it in GitHub Desktop.
Save SunnyMagadan/7d182f1f02a9a2172db49c528bb8c274 to your computer and use it in GitHub Desktop.
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