Sha256: d3e78d076e16ba5894d3ba6f44323d56e2afd87e979237f06a3a3a4202b85622
Contents?: true
Size: 1.13 KB
Versions: 4
Compression:
Stored size: 1.13 KB
Contents
# frozen_string_literal: true module Pathway module Plugins module Responder module ClassMethods def call(ctx, *params, &bl) result = super(ctx, *params) block_given? ? Responder.respond(result, &bl) : result end end class Responder def self.respond(result, &bl) r = new(result, &bl) r.respond end def initialize(result, &bl) @result, @context, @fails = result, bl.binding.receiver, {} instance_eval(&bl) end def success(&bl) @ok = bl end def failure(type = nil, &bl) if type.nil? @fail_default = bl else @fails[type] = bl end end def respond if @result.success? @context.instance_exec(@result.value, &@ok) elsif Error === @result.error && fail_block = @fails[@result.error.type] @context.instance_exec(@result.error, &fail_block) else @context.instance_exec(@result.error, &@fail_default) end end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems