Sha256: b035863025200cde5d6c7f968715b1c08093df4fb28733ebd82fa72b7846ee61

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module OData4
  module Properties
    # Defines the Decimal OData4 type.
    class Decimal < OData4::Property
      # Returns the property value, properly typecast
      # @return [BigDecimal,nil]
      def value
        if (@value.nil? || @value.empty?) && (strict? && allows_nil?)
          nil
        else
          BigDecimal(@value)
        end
      end

      # Sets the property value
      # @params new_value something BigDecimal() can parse
      def value=(new_value)
        validate(BigDecimal(new_value.to_s))
        @value = new_value.to_s
      end

      # The OData4 type name
      def type
        'Edm.Decimal'
      end

      # Value to be used in URLs.
      # @return [String]
      def url_value
        "#{value.to_f}M"
      end

      private

      def validate(value)
        if value > max_value || value < min_value || value.precs.first > 29
          raise ArgumentError, "Value is outside accepted range: #{min_value} to #{max_value}, or has more than 29 significant digits"
        end
      end

      def min_value
        @min ||= BigDecimal(-7.9 * (10**28), 2)
      end

      def max_value
        @max ||= BigDecimal(7.9 * (10**28), 2)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
odata4-0.7.0 lib/odata4/properties/decimal.rb