Skip to content

Instantly share code, notes, and snippets.

@davetron5000
Created May 4, 2012 20:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davetron5000/2597408 to your computer and use it in GitHub Desktop.
Save davetron5000/2597408 to your computer and use it in GitHub Desktop.
class Result
def self.successful
Result.new(true)
end
def self.failed(message)
Result.new(false,message)
end
attr_reader :message
def initialize(succeeded,message=nil)
@succeeded = succeeded
@message
end
def succeeded?; @succeeded; end
end
class Caller
def call(step,current_result)
if current_result.succeeded?
step.process
else
current_result
end
end
end
class Step1
def process
if worky
Result.successful
else
Result.failed("No worky!")
end
end
end
class Step2
def process
if awesome
Result.successful
else
Result.failed("not Awesome :(")
end
end
end
class Step3
def process
if has_sad?
Result.failed("HAD SAD")
else
Result.successful
end
end
end
caller = Caller.new
result = [Step1,Step2,Step3].reduce(Result.successful) { |acc,step| acc = caller.call(step,acc) }
@geeksam
Copy link

geeksam commented May 4, 2012

I think it's unnecessary to assign to acc in the reduce block.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment