Class: Lutaml::Xsd::Validation::Facets::FractionDigitsFacetValidator

Inherits:
FacetValidator
  • Object
show all
Defined in:
lib/lutaml/xsd/validation/facets/fraction_digits_facet_validator.rb

Overview

Validates values against XSD fractionDigits facet

The fractionDigits facet specifies the maximum number of digits in the fractional part (after decimal point) for decimal types.

Examples:

Validating fraction digits

facet = Lutaml::Xsd::FractionDigits.new(value: "2")
validator = FractionDigitsFacetValidator.new(facet)
validator.valid?("123.45")   # => true (2 fraction digits)
validator.valid?("123.4")    # => true (1 fraction digit)
validator.valid?("123.456")  # => false (3 fraction digits)
validator.error_message("123.456")
# => "Value has 3 fraction digits, exceeds maximum of 2"

Instance Attribute Summary

Attributes inherited from FacetValidator

#facet

Instance Method Summary collapse

Methods inherited from FacetValidator

#facet_value, #initialize

Constructor Details

This class inherits a constructor from Lutaml::Xsd::Validation::Facets::FacetValidator

Instance Method Details

#error_message(value) ⇒ String

Generate error message for fraction digits violation

Parameters:

  • value (String, Numeric)

    The invalid value

Returns:

  • (String)

    Error message describing the violation



42
43
44
45
46
# File 'lib/lutaml/xsd/validation/facets/fraction_digits_facet_validator.rb', line 42

def error_message(value)
  actual_fraction = count_fraction_digits(value)
  "Value has #{actual_fraction} fraction digits, exceeds " \
    "maximum of #{facet_value}"
end

#valid?(value) ⇒ Boolean

Validate value has correct fraction digits

Parameters:

  • value (String, Numeric)

    The value to validate

Returns:

  • (Boolean)

    true if fraction digits <= maximum, false otherwise



29
30
31
32
33
34
35
36
# File 'lib/lutaml/xsd/validation/facets/fraction_digits_facet_validator.rb', line 29

def valid?(value)
  return false if value.nil?

  max_fraction = to_integer(facet_value)
  return false unless max_fraction

  count_fraction_digits(value) <= max_fraction
end