forked from librariesio/libraries.io
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpuppet.rb
76 lines (67 loc) · 2.22 KB
/
puppet.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
module PackageManager
class Puppet < Base
HAS_VERSIONS = true
HAS_DEPENDENCIES = true
BIBLIOTHECARY_SUPPORT = false
BIBLIOTHECARY_PLANNED = true
URL = 'https://forge.puppet.com'
COLOR = '#302B6D'
def self.project_names
offset = 0
projects = []
while true
results = get_json("https://forgeapi.puppetlabs.com/v3/modules?limit=100&offset=#{offset}")['results'].map { |result| result['slug'] }
break if results == []
projects += results
offset +=100
end
projects
end
def self.project(name)
get_json("https://forgeapi.puppetlabs.com/v3/modules/#{name}")
end
def self.mapping(project)
current_release = project['current_release']
metadata = current_release['metadata']
{
name: project['slug'],
repository_url: metadata['source'],
description: metadata['description'],
keywords_array: current_release['tags'],
licenses: metadata['license']
}
end
def self.versions(project)
project['releases'].map do |release|
{
number: release['version'],
published_at: release['created_at']
}
end
end
def self.dependencies(name, version, _project)
release = get_json("https://forgeapi.puppetlabs.com/v3/releases/#{name}-#{version}")
metadata = release['metadata']
metadata['dependencies'].map do |dependency|
{
project_name: dependency['name'].sub('/', '-'),
requirements: dependency['version_requirement'],
kind: 'runtime',
platform: self.name.demodulize
}
end
end
def self.recent_names
get_json("https://forgeapi.puppetlabs.com/v3/modules?limit=100&sort_by=latest_release")['results'].map { |result| result['slug'] }
end
def self.install_instructions(project, version = nil)
"puppet module install #{project.name}" + (version ? " --version #{version}" : "")
end
def self.package_link(project, version = nil)
"https://forge.puppet.com/#{project.name.sub('-', '/')}" + (version ? "/#{version}" : "")
end
def self.download_url(name, version = nil)
"https://forge.puppet.com/v3/files/#{name}-#{version}.tar.gz"
end
end
end