class Contracts::Builtin::Xor
Takes a variable number of contracts. The contract passes if exactly one of those contracts pass. Example: Xor[Integer, Float]
Public Class Methods
Source
# File lib/contracts/builtin_contracts.rb, line 125 def initialize(*vals) super() @vals = vals end
Calls superclass method
Public Instance Methods
Source
# File lib/contracts/builtin_contracts.rb, line 138 def to_s # rubocop:disable Style/StringConcatenation @vals[0, @vals.size-1].map do |x| InspectWrapper.create(x) end.join(", ") + " xor " + InspectWrapper.create(@vals[-1]).to_s # rubocop:enable Style/StringConcatenation end
Source
# File lib/contracts/builtin_contracts.rb, line 130 def valid?(val) results = @vals.map do |contract| res, _ = Contract.valid?(val, contract) res end results.count(true) == 1 end