Add puppet/archive module, required for newer puppet/rabbitmq
[mirror/dsa-puppet.git] / 3rdparty / modules / archive / lib / puppet / functions / archive / parse_artifactory_url.rb
diff --git a/3rdparty/modules/archive/lib/puppet/functions/archive/parse_artifactory_url.rb b/3rdparty/modules/archive/lib/puppet/functions/archive/parse_artifactory_url.rb
new file mode 100644 (file)
index 0000000..ab21ad9
--- /dev/null
@@ -0,0 +1,30 @@
+# A function to parse an Artifactory maven 2 repository URL
+Puppet::Functions.create_function(:'archive::parse_artifactory_url') do
+  dispatch :parse_artifactory_url do
+    param 'Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl]', :url
+  end
+
+  def parse_artifactory_url(url)
+    # Regex is for the 'maven-2-default Repository Layout'
+    matchdata = url.match(%r{
+             (?<base_url>.*/artifactory)
+             /
+             (?<repository>[^/]+)
+             /
+             (?<org_path>.+?)
+             /
+             (?<module>[^/]+)
+             /
+             (?<base_rev>[^/]+?)
+             (?:-(?<folder_iteg_rev>SNAPSHOT))?
+             /
+             \k<module>-\k<base_rev>
+             (?:-(?<file_iteg_rev>SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))))?
+             (?:-(?<classifier>[^/]+?))?
+             \.
+             (?<ext>(?:(?!\d))[^\-/]+|7z)
+             }x)
+    return nil unless matchdata
+    Hash[matchdata.names.zip(matchdata.captures)]
+  end
+end