Sha256: b44f3c8aeb1ec62e83171a3552be2f0bcacccd16e6ad1633f5404590839a086e
Contents?: true
Size: 1.61 KB
Versions: 3
Compression:
Stored size: 1.61 KB
Contents
module Flows module Plugin module OutputContract # Contains wrappers for initializer and `#call` methods. # # @api private module Wrapper def initialize(*args, &block) super(*args, &block) klass = self.class raise NoContractError, klass if klass.success_contracts.empty? && !klass.skip_output_contract_flag end def call(*args, &block) result = super(*args, &block) klass = self.class return result if klass.skip_output_contract_flag Util.transform_result(klass, result) result end # Helper methods for {Wrapper} are extracted to this # module as singleton methods to not pollute user classes. # # @api private module Util class << self def transform_result(klass, result) contract = Util.contract_for(klass, result) data = result.send(:data) transformed_result = contract.transform(data) raise ContractError.new(klass, result, transformed_result.error) if transformed_result.err? result.send(:'data=', transformed_result.unwrap) end def contract_for(klass, result) raise ResultTypeError.new(klass, result) unless result.is_a?(Flows::Result) status = result.status contracts = result.ok? ? klass.success_contracts : klass.failure_contracts contracts[status] || raise(StatusError.new(klass, result, contracts.keys)) end end end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
flows-0.6.0 | lib/flows/plugin/output_contract/wrapper.rb |
flows-0.5.1 | lib/flows/plugin/output_contract/wrapper.rb |
flows-0.5.0 | lib/flows/plugin/output_contract/wrapper.rb |