--- /dev/null
+# 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