ab21ad9f8a994c2b642bcccf22a575764cb4591d
[mirror/dsa-puppet.git] / 3rdparty / modules / archive / lib / puppet / functions / archive / parse_artifactory_url.rb
1 # A function to parse an Artifactory maven 2 repository URL
2 Puppet::Functions.create_function(:'archive::parse_artifactory_url') do
3   dispatch :parse_artifactory_url do
4     param 'Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl]', :url
5   end
6
7   def parse_artifactory_url(url)
8     # Regex is for the 'maven-2-default Repository Layout'
9     matchdata = url.match(%r{
10              (?<base_url>.*/artifactory)
11              /
12              (?<repository>[^/]+)
13              /
14              (?<org_path>.+?)
15              /
16              (?<module>[^/]+)
17              /
18              (?<base_rev>[^/]+?)
19              (?:-(?<folder_iteg_rev>SNAPSHOT))?
20              /
21              \k<module>-\k<base_rev>
22              (?:-(?<file_iteg_rev>SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))))?
23              (?:-(?<classifier>[^/]+?))?
24              \.
25              (?<ext>(?:(?!\d))[^\-/]+|7z)
26              }x)
27     return nil unless matchdata
28     Hash[matchdata.names.zip(matchdata.captures)]
29   end
30 end