lib/simple_service/result.rb
module SimpleService
class Result
attr_accessor :value, :recorded_commands
def initialize()
@recorded_commands = Set.new
@verbose_tracking = SimpleService.configuration.verbose_tracking
end
def success!(klass, command_name, result_value)
record_command(klass, command_name, result_value, :success)
end
def failure!(klass, command_name, result_value)
record_command(klass, command_name, result_value, :failure)
end
def append_result(other_result)
self.value = other_result.value
self.recorded_commands += other_result.recorded_commands
end
def commands
self.recorded_commands.map {|rc| rc[:command_name] }
end
def successes
self.recorded_commands.map {|rc| rc.has_key?(:success) }
end
def success?
successes.all?
end
def failure?
!success?
end
private
attr_reader :verbose_tracking
def record_command(klass, command_name, result_value, success_or_failure)
command_attrs = {
class_name: klass.to_s,
command_name: command_name,
}
command_attrs[:received_args] = self.value if verbose_tracking
command_attrs[success_or_failure] = verbose_tracking ? result_value : true
self.recorded_commands << command_attrs
self.value = result_value
end
end
end