# File lib/kafo/data_types/variant.rb, line 4 def initialize(*inner_types) @inner_types = inner_types.map { |t| DataType.new_from_string(t) } end
# File lib/kafo/data_types/variant.rb, line 8 def condition_value(value) type = find_type(value) type ? type.condition_value(value) : super(value) end
# File lib/kafo/data_types/variant.rb, line 13 def dump_default(value) type = find_type(value) type ? type.dump_default(value) : super(value) end
# File lib/kafo/data_types/variant.rb, line 18 def multivalued? @inner_types.any? { |t| t.multivalued? } end
# File lib/kafo/data_types/variant.rb, line 22 def to_s @inner_types.join(' or ') end
# File lib/kafo/data_types/variant.rb, line 26 def typecast(value) type = find_type(value) type ? type.typecast(value) : value end
# File lib/kafo/data_types/variant.rb, line 31 def valid?(value, errors = []) type = find_type(value) if type type.valid?(value, errors) else errors << "#{value} is not one of #{to_s}" false end end
# File lib/kafo/data_types/variant.rb, line 43 def find_type(value) @inner_types.find { |t| t.valid?(t.typecast(value)) } end