Sha256: 180d385404cd36221c3af4afd6ebcfd2c7ccd72c44d8a9d9a6e1a106479cb906
Contents?: true
Size: 1.09 KB
Versions: 3
Compression:
Stored size: 1.09 KB
Contents
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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
pathway-0.10.0 | lib/pathway/plugins/responder.rb |
pathway-0.9.1 | lib/pathway/plugins/responder.rb |
pathway-0.9.0 | lib/pathway/plugins/responder.rb |