Sha256: 75376baae978783ba03c2cff351515b5a6eefcae675f5674ff17a31c16d3db4a

Contents?: true

Size: 878 Bytes

Versions: 9

Compression:

Stored size: 878 Bytes

Contents

# frozen_string_literal: true

module BCDD::Result::Contract
  require_relative 'contract/error'
  require_relative 'contract/type_checker'
  require_relative 'contract/interface'
  require_relative 'contract/evaluator'
  require_relative 'contract/disabled'
  require_relative 'contract/for_types'
  require_relative 'contract/for_types_and_values'

  NONE = Evaluator.new(Disabled, Disabled).freeze

  def self.evaluate(data, contract)
    contract ||= NONE

    contract.type_and_value!(data)

    TypeChecker.new(data.type, expectations: contract)
  end

  ToEnsure = ->(spec, config) do
    return Disabled if spec.nil?

    spec.is_a?(::Hash) ? ForTypesAndValues.new(spec, config) : ForTypes.new(Array(spec))
  end

  def self.new(success:, failure:, config:)
    Evaluator.new(ToEnsure[success, config], ToEnsure[failure, config])
  end

  private_constant :ToEnsure
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
bcdd-result-1.1.0 lib/bcdd/result/contract.rb
bcdd-result-1.0.0 lib/bcdd/result/contract.rb
bcdd-result-0.13.0 lib/bcdd/result/contract.rb
bcdd-result-0.12.0 lib/bcdd/result/contract.rb
bcdd-result-0.11.0 lib/bcdd/result/contract.rb
bcdd-result-0.10.0 lib/bcdd/result/contract.rb
bcdd-result-0.9.1 lib/bcdd/result/contract.rb
bcdd-result-0.9.0 lib/bcdd/result/contract.rb
bcdd-result-0.8.0 lib/bcdd/result/contract.rb