module Flows::Plugin::OutputContract::Wrapper::Util

Helper methods for {Wrapper} are extracted to this module as singleton methods to not pollute user classes.

@api private

Public Class Methods

contract_for(klass, result) click to toggle source
# File lib/flows/plugin/output_contract/wrapper.rb, line 42
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
transform_result(klass, result) click to toggle source
# File lib/flows/plugin/output_contract/wrapper.rb, line 31
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