Class: OpenEHR::RM::Support::Measurement::MeasurementService

Inherits:
Object
  • Object
show all
Defined in:
lib/openehr/rm/support/measurement.rb

Overview

A minimal UCUM-lite syntactic checker, not a full UCUM parser/conversion table: it validates that a units string is shaped like a UCUM unit (allowed characters, balanced brackets) and treats "equivalent" as exact string equality of two syntactically-valid units strings. It does not perform unit conversion (e.g. "kg" and "1000g" are not recognized as equivalent).

Constant Summary collapse

UCUM_LITE_PATTERN =
/\A[A-Za-z0-9%\/.*\[\]{}'_-]+\z/

Class Method Summary collapse

Class Method Details

.is_valid_units_string?(units) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
20
# File 'lib/openehr/rm/support/measurement.rb', line 15

def self.is_valid_units_string?(units)
  return false unless units.is_a?(String) && !units.empty?
  return false unless units =~ UCUM_LITE_PATTERN

  balanced_brackets?(units, '[', ']') && balanced_brackets?(units, '{', '}')
end

.units_equivalent?(units1, units2) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
25
26
# File 'lib/openehr/rm/support/measurement.rb', line 22

def self.units_equivalent?(units1, units2)
  return false unless is_valid_units_string?(units1) && is_valid_units_string?(units2)

  units1 == units2
end