Sha256: 347b4d2b8c9e62bd1ccac01df976c551542fdd6f22bde31ab59ca0d7b0b43e3c

Contents?: true

Size: 994 Bytes

Versions: 19

Compression:

Stored size: 994 Bytes

Contents

require 'forwardable'

module Kafo
  module DataTypes
    class Optional < DataType
      extend Forwardable
      def_delegators :@inner_type, :condition_value, :dump_default, :multivalued?, :typecast
      attr_reader :inner_type, :inner_value

      def initialize(inner_type_or_value)
        begin
          @inner_type = DataType.new_from_string(inner_type_or_value)
          @inner_value = nil
        rescue ConfigurationException
          @inner_type = nil
          @inner_value = inner_type_or_value
        end
      end

      def to_s
        if @inner_type
          "#{@inner_type} or undef"
        else
          "#{@inner_value.inspect} or undef"
        end
      end

      def valid?(input, errors = [])
        return true if input.nil?
        return true if @inner_type && @inner_type.valid?(input, errors)
        return true if @inner_value && @inner_value == input
        return false
      end
    end

    DataType.register_type('Optional', Optional)
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
kafo-7.1.0 lib/kafo/data_types/optional.rb
kafo-7.0.0 lib/kafo/data_types/optional.rb
kafo-6.5.0 lib/kafo/data_types/optional.rb
kafo-6.4.1 lib/kafo/data_types/optional.rb
kafo-6.4.0 lib/kafo/data_types/optional.rb
kafo-6.3.0 lib/kafo/data_types/optional.rb
kafo-6.2.1 lib/kafo/data_types/optional.rb
kafo-6.2.0 lib/kafo/data_types/optional.rb
kafo-6.1.2 lib/kafo/data_types/optional.rb
kafo-6.1.1 lib/kafo/data_types/optional.rb
kafo-6.1.0 lib/kafo/data_types/optional.rb
kafo-6.0.0 lib/kafo/data_types/optional.rb
kafo-5.1.0 lib/kafo/data_types/optional.rb
kafo-5.0.1 lib/kafo/data_types/optional.rb
kafo-5.0.0 lib/kafo/data_types/optional.rb
kafo-4.1.0 lib/kafo/data_types/optional.rb
kafo-4.0.1 lib/kafo/data_types/optional.rb
kafo-4.0.0 lib/kafo/data_types/optional.rb
kafo-3.0.0 lib/kafo/data_types/optional.rb