module Lutaml::Model::Utils

def camel_case(str)

Convert string to camel case
def camel_case(str)
  return "" if str.nil? || str.empty?
  str.split("/").map { |part| camelize_part(part) }.join("::")
end

def camelize_part(part)

def camelize_part(part)
  part.gsub(/(?:_|-|^)([a-z\d])/i) { $1.upcase }
end

def classify(str)

Convert string to class name
def classify(str)
  str = str.to_s.delete(".")
  str = str.sub(/^[a-z\d]*/) { |match| camel_case(match) || match }
  str.gsub("::", "/").gsub(%r{(?:_|-|(/))([a-z\d]*)}i) do
    word = Regexp.last_match(2)
    substituted = camel_case(word) || word
    Regexp.last_match(1) ? "::#{substituted}" : substituted
  end
end

def snake_case(str)

Convert string to snake case
def snake_case(str)
  str = str.to_s.tr(".", "_")
  return str unless /[A-Z-]|::/.match?(str)
  str.gsub("::", "/")
    .gsub(/([A-Z]+)(?=[A-Z][a-z])|([a-z\d])(?=[A-Z])/) { "#{$1 || $2}_" }
    .tr("-", "_")
    .downcase
end