Sha256: 590cedc6dcfcd78b86288d5e7c81dd3d4fe2ab5560cd7ea6e80695c00652dbc5

Contents?: true

Size: 1.1 KB

Versions: 6

Compression:

Stored size: 1.1 KB

Contents

module Kafo
  module DataTypes
    class Float < DataType
      def initialize(min = :default, max = :default)
        @min = (min.to_s == 'default') ? :infinite : min.to_i
        @max = (max.to_s == 'default') ? :infinite : max.to_i
      end

      def to_s
        if @min != :infinite && @max == :infinite
          "float (at least #{@min})"
        elsif @min == :infinite && @max != :infinite
          "float (up to #{@max})"
        elsif @min != :infinite && @max != :infinite
          "float (between #{@min} and #{@max})"
        else
          "float"
        end
      end

      def typecast(value)
        value.to_s.match?(/\d+/) ? value.to_f : value
      end

      def valid?(input, errors = [])
        unless input.is_a?(::Float)
          errors << "#{input.inspect} is not a valid float"
          return false
        end

        errors << "#{input} must be at least #{@min}" if @min != :infinite && input < @min
        errors << "#{input} must be up to #{@max}" if @max != :infinite && input > @max

        return errors.empty?
      end
    end

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

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kafo-7.6.0 lib/kafo/data_types/float.rb
kafo-7.5.1 lib/kafo/data_types/float.rb
kafo-7.5.0 lib/kafo/data_types/float.rb
kafo-7.4.0 lib/kafo/data_types/float.rb
kafo-7.3.0 lib/kafo/data_types/float.rb
kafo-7.2.0 lib/kafo/data_types/float.rb