lib/fhir_models/fhir.rb in fhir_models-4.3.0 vs lib/fhir_models/fhir.rb in fhir_models-5.0.0

- old
+ new

@@ -1,10 +1,23 @@ require 'nokogiri' require 'logger' require 'uri' module FHIR + module ClassMethods + def from_contents(contents) + doc = Nokogiri::XML(contents) + if doc.errors.empty? + versioned_fhir_module::Xml.from_xml(contents) + else + versioned_fhir_module::Json.from_json(contents) + end + end + end + include ClassMethods + extend ClassMethods + def self.logger @logger || default_logger end def self.logger=(logger) @@ -13,26 +26,17 @@ def self.default_logger @default_logger ||= Logger.new(ENV['FHIR_LOGGER'] || $stdout) end - def self.from_contents(contents) - doc = Nokogiri::XML(contents) - if doc.errors.empty? - FHIR::Xml.from_xml(contents) - else - FHIR::Json.from_json(contents) - end - end - # TODO: pull regexes from metadata def self.primitive?(datatype:, value:) # Remaining data types: handle special cases before checking type StructureDefinitions case datatype.downcase when 'boolean' !(value.to_s =~ /\A(true|false)\Z/).nil? - when 'integer' + when 'integer', 'integer64' !(value.to_s =~ /\A(0|[-+]?[1-9][0-9]*)\Z/).nil? when 'string', 'markdown' value.is_a?(String) when 'decimal' !(value.to_s =~ /\A([-+]?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?)\Z/).nil? @@ -73,11 +77,24 @@ value.is_a?(String) && fragment.errors.size.zero? when 'unsignedint' !(value.to_s =~ /\A(0|([1-9][0-9]*))\Z/).nil? when 'positiveint' !(value.to_s =~ /\A+?[1-9][0-9]*\Z/).nil? + when 'canonical', 'url' + !(value.to_s =~ /\S*/).nil? + when 'uuid' + !(value.to_s =~ /urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/).nil? else FHIR.logger.warn "Unable to check #{value} for datatype #{datatype}" false end + end + + # These are needed for the unit tests that call FHIR directly + def self.fhir_version_string + 'R4' + end + + def self.versioned_fhir_module + FHIR::R4 end end