From 74e3d5461b6a6df6f11df728f6effc6b89074058 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Thu, 20 May 2021 14:03:22 +0500 Subject: [PATCH] Add a way to get latest version of an xsd schema by prefix --- app/lib/xsd_util.rb | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 app/lib/xsd_util.rb diff --git a/app/lib/xsd_util.rb b/app/lib/xsd_util.rb new file mode 100644 index 000000000..99a648841 --- /dev/null +++ b/app/lib/xsd_util.rb @@ -0,0 +1,36 @@ +class XsdUtil + SCHEMA_PATH = 'lib/schemas/'.freeze + + def initialise(schema_path = SCHEMA_PATH) + @schema_path = schema_path + end + + def xsd_schemas + @xsd_schemas ||= Dir.entries(SCHEMA_PATH) + .select { |f| File.file? File.join(SCHEMA_PATH, f) } + end + + def basename(filename) + File.basename(filename, '.xsd') + end + + def prefix(filename) + regex = /([a-zA-Z]+-?[a-zA-Z]+)/ + + basename(filename).match(regex)[0] + end + + def prefixes + xsd_schemas.map { |filename| prefix(filename) }.uniq + end + + def schemas_by_name + prefixes.each_with_object({}) do |prefix, hash| + hash[prefix] = xsd_schemas.select { |filename| filename.include? prefix }.uniq.sort + end + end + + def latest(prefix) + schemas_by_name[prefix].last + end +end