lib/lutaml/model/type/integer.rb



module Lutaml
  module Model
    module Type
      class Integer < Value
        def self.cast(value)
          return nil if value.nil?
          return 1 if value === true
          return 0 if value === false

          case value
          when ::String
            if value.match?(/^0[0-7]+$/) # Octal
              value.to_i(8)
            elsif value.match?(/^-?\d+(\.\d+)?(e-?\d+)?$/i) # Float/exponential
              Float(value).to_i
            else
              begin
                Integer(value, 10)
              rescue StandardError
                nil
              end
            end
          else
            begin
              Integer(value)
            rescue StandardError
              nil
            end
          end
        end

        # Override serialize to return Integer instead of String
        def self.serialize(value)
          return nil if value.nil?

          cast(value)
        end
      end
    end
  end
end