nexus_api 1.5.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,18 +31,30 @@ module NexusAPI
31
31
  # PUT /service/rest/beta/repositories/bower/hosted/{repositoryName}
32
32
  # POST /service/rest/beta/repositories/bower/proxy
33
33
  # PUT /service/rest/beta/repositories/bower/proxy/{repositoryName}
34
+ # POST /service/rest/beta/repositories/cocoapods/proxy
35
+ # PUT /service/rest/beta/repositories/cocoapods/proxy/{repositoryName}
34
36
  # POST /service/rest/beta/repositories/conan/proxy
35
37
  # PUT /service/rest/beta/repositories/conan/proxy/{repositoryName}
36
38
  # POST /service/rest/beta/repositories/docker/group
39
+ def create_repository_docker_group(name:, members:, options: {})
40
+ parameters = ParameterBuilder.docker_group(name, members, options)
41
+ create('repositories/docker/group', parameters)
42
+ end
43
+
37
44
  # PUT /service/rest/beta/repositories/docker/group/{repositoryName}
38
45
  # POST /service/rest/beta/repositories/docker/hosted
39
- def create_repository_docker_hosted(name:, port:)
40
- parameters = ParameterBuilder.docker_hosted(name, port)
41
- @connection.post(endpoint: 'repositories/docker/hosted', parameters: parameters, api_version: 'beta')
46
+ def create_repository_docker_hosted(name:, options: {})
47
+ parameters = ParameterBuilder.docker_hosted(name, options)
48
+ create('repositories/docker/hosted', parameters)
42
49
  end
43
50
 
44
51
  # PUT /service/rest/beta/repositories/docker/hosted/{repositoryName}
45
52
  # POST /service/rest/beta/repositories/docker/proxy
53
+ def create_repository_docker_proxy(name:, remote_url:, options: {})
54
+ parameters = ParameterBuilder.docker_proxy(name, remote_url, options)
55
+ create('repositories/docker/proxy', parameters)
56
+ end
57
+
46
58
  # PUT /service/rest/beta/repositories/docker/proxy/{repositoryName}
47
59
  # POST /service/rest/beta/repositories/gitlfs/hosted
48
60
  # PUT /service/rest/beta/repositories/gitlfs/hosted/{repositoryName}
@@ -54,25 +66,47 @@ module NexusAPI
54
66
  # PUT /service/rest/beta/repositories/helm/hosted/{repositoryName}
55
67
  # POST /service/rest/beta/repositories/helm/proxy
56
68
  # PUT /service/rest/beta/repositories/helm/proxy/{repositoryName}
69
+ # POST /service/rest/beta/repositories/maven/group
70
+ def create_repository_maven_group(name:, members:, options: {})
71
+ parameters = ParameterBuilder.maven_group(name, members, options)
72
+ create('repositories/maven/group', parameters)
73
+ end
74
+
75
+ # PUT /service/rest/beta/repositories/maven/group/{repositoryName}
57
76
  # POST /service/rest/beta/repositories/maven/hosted
58
- def create_repository_maven_hosted(name:)
59
- parameters = ParameterBuilder.maven_hosted(name)
60
- @connection.post(endpoint: 'repositories/maven/hosted', parameters: parameters, api_version: 'beta')
77
+ def create_repository_maven_hosted(name:, options: {})
78
+ parameters = ParameterBuilder.maven_hosted(name, options)
79
+ create('repositories/maven/hosted', parameters)
61
80
  end
62
81
 
63
82
  # PUT /service/rest/beta/repositories/maven/hosted/{repositoryName}
64
83
  # POST /service/rest/beta/repositories/maven/proxy
84
+ def create_repository_maven_proxy(name:, remote_url:, options: {})
85
+ parameters = ParameterBuilder.maven_proxy(name, remote_url, options)
86
+ create('repositories/maven/proxy', parameters)
87
+ end
88
+
65
89
  # PUT /service/rest/beta/repositories/maven/proxy/{repositoryName}
66
90
  # POST /service/rest/beta/repositories/npm/group
91
+ def create_repository_npm_group(name:, members:, options: {})
92
+ parameters = ParameterBuilder.npm_group(name, members, options)
93
+ create('repositories/npm/group', parameters)
94
+ end
95
+
67
96
  # PUT /service/rest/beta/repositories/npm/group/{repositoryName}
68
97
  # POST /service/rest/beta/repositories/npm/hosted
69
- def create_repository_npm_hosted(name:)
70
- parameters = ParameterBuilder.npm_hosted(name)
71
- @connection.post(endpoint: 'repositories/npm/hosted', parameters: parameters, api_version: 'beta')
98
+ def create_repository_npm_hosted(name:, options: {})
99
+ parameters = ParameterBuilder.npm_hosted(name, options)
100
+ create('repositories/npm/hosted', parameters)
72
101
  end
73
102
 
74
103
  # PUT /service/rest/beta/repositories/npm/hosted/{repositoryName}
75
104
  # POST /service/rest/beta/repositories/npm/proxy
105
+ def create_repository_npm_proxy(name:, remote_url:, options: {})
106
+ parameters = ParameterBuilder.npm_proxy(name, remote_url, options)
107
+ create('repositories/npm/proxy', parameters)
108
+ end
109
+
76
110
  # PUT /service/rest/beta/repositories/npm/proxy/{repositoryName}
77
111
  # POST /service/rest/beta/repositories/nuget/group
78
112
  # PUT /service/rest/beta/repositories/nuget/group/{repositoryName}
@@ -83,22 +117,104 @@ module NexusAPI
83
117
  # POST /service/rest/beta/repositories/p2/proxy
84
118
  # PUT /service/rest/beta/repositories/p2/proxy/{repositoryName}
85
119
  # POST /service/rest/beta/repositories/pypi/group
120
+ def create_repository_pypi_group(name:, members:, options: {})
121
+ parameters = ParameterBuilder.pypi_group(name, members, options)
122
+ create('repositories/pypi/group', parameters)
123
+ end
124
+
86
125
  # PUT /service/rest/beta/repositories/pypi/group/{repositoryName}
87
126
  # POST /service/rest/beta/repositories/pypi/hosted
88
- def create_repository_pypi_hosted(name:)
89
- parameters = ParameterBuilder.pypi_hosted(name)
90
- @connection.post(endpoint: 'repositories/pypi/hosted', parameters: parameters, api_version: 'beta')
127
+ def create_repository_pypi_hosted(name:, options: {})
128
+ parameters = ParameterBuilder.pypi_hosted(name, options)
129
+ create('repositories/pypi/hosted', parameters)
91
130
  end
92
131
 
93
132
  # PUT /service/rest/beta/repositories/pypi/hosted/{repositoryName}
94
133
  # POST /service/rest/beta/repositories/pypi/proxy
134
+ def create_repository_pypi_proxy(name:, remote_url:, options: {})
135
+ parameters = ParameterBuilder.pypi_proxy(name, remote_url, options)
136
+ create('repositories/pypi/proxy', parameters)
137
+ end
138
+
95
139
  # PUT /service/rest/beta/repositories/pypi/proxy/{repositoryName}
140
+ # POST /service/rest/beta/repositories/r/group
141
+ # PUT /service/rest/beta/repositories/r/group/{repositoryName}
142
+ # POST /service/rest/beta/repositories/r/hosted
143
+ # PUT /service/rest/beta/repositories/r/hosted/{repositoryName}
144
+ # POST /service/rest/beta/repositories/r/proxy
145
+ # PUT /service/rest/beta/repositories/r/proxy/{repositoryName}
146
+ # POST /service/rest/beta/repositories/raw/group
147
+ def create_repository_raw_group(name:, members:, options: {})
148
+ parameters = ParameterBuilder.raw_group(name, members, options)
149
+ create('repositories/raw/group', parameters)
150
+ end
151
+
152
+ # PUT /service/rest/beta/repositories/raw/group/{repositoryName}
153
+ # POST /service/rest/beta/repositories/raw/hosted
154
+ def create_repository_raw_hosted(name:, options: {})
155
+ parameters = ParameterBuilder.raw_hosted(name, options)
156
+ create('repositories/raw/hosted', parameters)
157
+ end
158
+
159
+ # PUT /service/rest/beta/repositories/raw/hosted/{repositoryName}
160
+ # POST /service/rest/beta/repositories/raw/proxy
161
+ def create_repository_raw_proxy(name:, remote_url:, options: {})
162
+ parameters = ParameterBuilder.raw_proxy(name, remote_url, options)
163
+ create('repositories/raw/proxy', parameters)
164
+ end
165
+
166
+ # PUT /service/rest/beta/repositories/raw/proxy/{repositoryName}
167
+ # POST /service/rest/beta/repositories/rubygems/group
168
+ def create_repository_rubygems_group(name:, members:, options: {})
169
+ parameters = ParameterBuilder.rubygems_group(name, members, options)
170
+ create('repositories/rubygems/group', parameters)
171
+ end
172
+
173
+ # PUT /service/rest/beta/repositories/rubygems/group/{repositoryName}
174
+ # POST /service/rest/beta/repositories/rubygems/hosted
175
+ def create_repository_rubygems_hosted(name:, options: {})
176
+ parameters = ParameterBuilder.rubygems_hosted(name, options)
177
+ create('repositories/rubygems/hosted', parameters)
178
+ end
179
+
180
+ # PUT /service/rest/beta/repositories/rubygems/hosted/{repositoryName}
181
+ # POST /service/rest/beta/repositories/rubygems/proxy
182
+ def create_repository_rubygems_proxy(name:, remote_url:, options: {})
183
+ parameters = ParameterBuilder.rubygems_proxy(name, remote_url, options)
184
+ create('repositories/rubygems/proxy', parameters)
185
+ end
186
+
187
+ # PUT /service/rest/beta/repositories/rubygems/proxy/{repositoryName}
188
+ # POST /service/rest/beta/repositories/yum/group
189
+ def create_repository_yum_group(name:, members:, options: {})
190
+ parameters = ParameterBuilder.yum_group(name, members, options)
191
+ create('repositories/yum/group', parameters)
192
+ end
193
+
194
+ # PUT /service/rest/beta/repositories/yum/group/{repositoryName}
96
195
  # POST /service/rest/beta/repositories/yum/hosted
97
- def create_repository_yum_hosted(name:, depth:)
98
- parameters = ParameterBuilder.yum_hosted(name, depth)
99
- @connection.post(endpoint: 'repositories/yum/hosted', parameters: parameters, api_version: 'beta')
196
+ def create_repository_yum_hosted(name:, options: {})
197
+ parameters = ParameterBuilder.yum_hosted(name, options)
198
+ create('repositories/yum/hosted', parameters)
100
199
  end
101
200
 
102
201
  # PUT /service/rest/beta/repositories/yum/hosted/{repositoryName}
202
+ # POST /service/rest/beta/repositories/yum/proxy
203
+ def create_repository_yum_proxy(name:, remote_url:, options: {})
204
+ parameters = ParameterBuilder.yum_proxy(name, remote_url, options)
205
+ create('repositories/yum/proxy', parameters)
206
+ end
207
+
208
+ # PUT /service/rest/beta/repositories/yum/proxy/{repositoryName}
209
+
210
+ private
211
+
212
+ def create(endpoint, parameters)
213
+ @connection.post(
214
+ endpoint: endpoint,
215
+ parameters: parameters,
216
+ api_version: 'beta'
217
+ )
218
+ end
103
219
  end
104
220
  end
@@ -14,7 +14,7 @@ module NexusAPI
14
14
  end
15
15
 
16
16
  def search_all_assets(name:, format: nil, repository: nil, sha1: nil, version: nil)
17
- results = Array.new.tap do |results|
17
+ Array.new.tap do |results|
18
18
  loop do
19
19
  results.concat(
20
20
  search_asset(
@@ -6,7 +6,7 @@ module NexusAPI
6
6
  end
7
7
 
8
8
  def list_all_tags
9
- tags = Array.new.tap do |tags|
9
+ Array.new.tap do |tags|
10
10
  loop do
11
11
  tags.concat(list_tags(paginate: true))
12
12
  break unless paginate?
@@ -16,9 +16,9 @@ module NexusAPI
16
16
 
17
17
  # POST /service/rest/v1/tags
18
18
  def create_tag(name:)
19
- parameters = JSON.dump({
19
+ parameters = {
20
20
  'name' => name,
21
- })
21
+ }
22
22
  @connection.post(endpoint: 'tags', parameters: parameters)
23
23
  end
24
24
 
@@ -11,17 +11,17 @@ require 'pry'
11
11
  # https://[NEXUS_URL]/#admin/system/api
12
12
  module NexusAPI
13
13
  class API
14
- attr_accessor :connection
15
- attr_accessor :docker
16
- attr_accessor :team_config
14
+ attr_accessor :protocol, :connection, :docker, :team_config
17
15
 
18
16
  TEAM_CONFIG = File.join(File.dirname(__dir__), 'team_configs/default.yaml').freeze
19
17
 
20
- def initialize(username:, password:, hostname:, docker_pull_hostname: nil, docker_push_hostname: nil, team_config: nil)
18
+ def initialize(username:, password:, hostname:, docker_pull_hostname: nil, docker_push_hostname: nil, team_config: nil, protocol: "https")
19
+ @protocol = protocol
21
20
  @connection = NexusAPI::NexusConnection.new(
22
21
  username: username,
23
22
  password: password,
24
23
  hostname: hostname,
24
+ protocol: protocol,
25
25
  )
26
26
  if docker_pull_hostname.nil? || docker_push_hostname.nil?
27
27
  @docker = nil
@@ -9,10 +9,11 @@ module NexusAPI
9
9
 
10
10
  attr_accessor :continuation_token
11
11
 
12
- def initialize(username:, password:, hostname:)
12
+ def initialize(username:, password:, hostname:, protocol:)
13
13
  @username = username
14
14
  @password = password
15
15
  @hostname = hostname
16
+ @protocol = protocol
16
17
  end
17
18
 
18
19
  def get_response(endpoint:, paginate: false, headers: {'Content-Type' => 'application/json'}, api_version: 'v1')
@@ -117,7 +118,7 @@ module NexusAPI
117
118
 
118
119
  def send_request(connection_method, endpoint, parameters: '', headers: {}, api_version: 'v1')
119
120
  parameters = parameters.to_json if headers['Content-Type'] == 'application/json'
120
- url = "https://#{@hostname}/service/rest/#{api_version}/#{endpoint}"
121
+ url = "#{@protocol}://#{@hostname}/service/rest/#{api_version}/#{endpoint}"
121
122
  catch_connection_error do
122
123
  RestClient::Request.execute(
123
124
  method: connection_method,
@@ -1,4 +1,4 @@
1
1
  module NexusAPI
2
- VERSION = '1.5.0'
2
+ VERSION = '2.1.0'
3
3
  end
4
4
 
@@ -1,92 +1,432 @@
1
- require 'json'
2
-
3
1
  module NexusAPI
4
2
  class ParameterBuilder
5
- # Write Policies
6
- ALLOW = 'ALLOW'
7
- ALLOW_ONCE = 'ALLOW_ONCE'
8
- DENY = 'DENY'
9
-
10
- # Version Policy
11
- RELEASE = 'RELEASE'
12
- SNAPSHOT = 'SNAPSHOT'
13
- MIXED = 'MIXED'
14
-
15
- # Layout or Deploy Policy
16
- STRICT = 'STRICT'
17
- PERMISSIVE = 'PERMISSIVE'
3
+ def self.docker_group(name, members, options)
4
+ default_options = {
5
+ 'online' => true,
6
+ 'storage' => {
7
+ 'blobStoreName' => 'default',
8
+ 'strictContentTypeValidation' => true
9
+ },
10
+ 'docker' => {
11
+ 'v1Enabled' => false,
12
+ 'forceBasicAuth' => true
13
+ },
14
+ 'group' => {}
15
+ }
16
+ apply_changes(default: default_options, override: options, name: name, members: members)
17
+ end
18
18
 
19
- def self.docker_hosted(name, port, write_policy: ALLOW_ONCE)
20
- {
21
- 'name' => name,
19
+ def self.docker_hosted(name, options)
20
+ default_options = {
22
21
  'online' => true,
23
22
  'storage' => {
24
23
  'blobStoreName' => 'default',
25
24
  'strictContentTypeValidation' => true,
26
- 'writePolicy' => write_policy
25
+ 'writePolicy' => 'allow_once'
26
+ },
27
+ 'cleanup' => {
28
+ 'policyNames' => []
29
+ },
30
+ 'docker' => {
31
+ 'v1Enabled' => false,
32
+ 'forceBasicAuth' => true
33
+ }
34
+ }
35
+ apply_changes(default: default_options, override: options, name: name)
36
+ end
37
+
38
+ def self.docker_proxy(name, remote_url, options)
39
+ default_options = {
40
+ 'online' => true,
41
+ 'storage' => {
42
+ 'blobStoreName' => 'default',
43
+ 'strictContentTypeValidation' => true
44
+ },
45
+ 'proxy' => {
46
+ 'contentMaxAge' => 1440,
47
+ 'metadataMaxAge' => 1440
48
+ },
49
+ 'negativeCache' => {
50
+ 'enabled' => true,
51
+ 'timeToLive' => 1440
52
+ },
53
+ 'httpClient' => {
54
+ 'blocked' => false,
55
+ 'autoBlock' => true
27
56
  },
28
57
  'docker' => {
29
58
  'v1Enabled' => false,
30
- 'forceBasicAuth' => true,
31
- 'httpPort' => port
59
+ 'forceBasicAuth' => true
60
+ },
61
+ 'dockerProxy' => {
62
+ 'indexType' => 'REGISTRY'
32
63
  }
33
64
  }
65
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
34
66
  end
35
67
 
36
- def self.maven_hosted(name, write_policy: ALLOW_ONCE, version_policy: RELEASE, layout_policy: STRICT)
37
- {
38
- 'name' => name,
68
+ def self.maven_group(name, members, options)
69
+ default_options = {
70
+ 'online' => true,
71
+ 'storage' => {
72
+ 'blobStoreName' => 'default',
73
+ 'strictContentTypeValidation' => true
74
+ },
75
+ 'group' => {}
76
+ }
77
+ apply_changes(default: default_options, override: options, name: name, members: members)
78
+ end
79
+
80
+ def self.maven_hosted(name, options)
81
+ default_options = {
39
82
  'online' => true,
40
83
  'storage' => {
41
84
  'blobStoreName' => 'default',
42
85
  'strictContentTypeValidation' => true,
43
- 'writePolicy' => write_policy
86
+ 'writePolicy' => 'allow_once'
87
+ },
88
+ 'cleanup' => {
89
+ 'policyNames' => []
90
+ },
91
+ 'maven' => {
92
+ 'versionPolicy' => 'RELEASE',
93
+ 'layoutPolicy' => 'STRICT'
94
+ }
95
+ }
96
+ apply_changes(default: default_options, override: options, name: name)
97
+ end
98
+
99
+ def self.maven_proxy(name, remote_url, options)
100
+ default_options = {
101
+ 'online' => true,
102
+ 'storage' => {
103
+ 'blobStoreName' => 'default',
104
+ 'strictContentTypeValidation' => true
105
+ },
106
+ 'cleanup' => {
107
+ 'policyNames' => []
108
+ },
109
+ 'proxy' => {
110
+ 'contentMaxAge' => 1440,
111
+ 'metadataMaxAge' => 1440
112
+ },
113
+ 'negativeCache' => {
114
+ 'enabled' => true,
115
+ 'timeToLive' => 1440
116
+ },
117
+ 'httpClient' => {
118
+ 'blocked' => false,
119
+ 'autoBlock' => true,
44
120
  },
45
121
  'maven' => {
46
- 'versionPolicy' => version_policy,
47
- 'layoutPolicy' => layout_policy
122
+ 'versionPolicy' => 'RELEASE',
123
+ 'layoutPolicy' => 'STRICT'
124
+ }
125
+ }
126
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
127
+ end
128
+
129
+ def self.npm_group(name, members, options)
130
+ default_options = {
131
+ 'online' => true,
132
+ 'storage' => {
133
+ 'blobStoreName' => 'default',
134
+ 'strictContentTypeValidation' => true
135
+ },
136
+ 'group' => {}
137
+ }
138
+ apply_changes(default: default_options, override: options, name: name, members: members)
139
+ end
140
+
141
+ def self.npm_hosted(name, options)
142
+ default_options = {
143
+ 'online' => true,
144
+ 'storage' => {
145
+ 'blobStoreName' => 'default',
146
+ 'strictContentTypeValidation' => true,
147
+ 'writePolicy' => 'allow_once'
148
+ },
149
+ 'cleanup' => {
150
+ 'policyNames' => []
151
+ }
152
+ }
153
+ apply_changes(default: default_options, override: options, name: name)
154
+ end
155
+
156
+ def self.npm_proxy(name, remote_url, options)
157
+ default_options = {
158
+ 'online' => true,
159
+ 'storage' => {
160
+ 'blobStoreName' => 'default',
161
+ 'strictContentTypeValidation' => true
162
+ },
163
+ 'cleanup' => {
164
+ 'policyNames' => []
165
+ },
166
+ 'proxy' => {
167
+ 'contentMaxAge' => 1440,
168
+ 'metadataMaxAge' => 1440
169
+ },
170
+ 'negativeCache' => {
171
+ 'enabled' => true,
172
+ 'timeToLive' => 1440
173
+ },
174
+ 'httpClient' => {
175
+ 'blocked' => false,
176
+ 'autoBlock' => true,
177
+ },
178
+ }
179
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
180
+ end
181
+
182
+ def self.pypi_group(name, members, options)
183
+ default_options = {
184
+ 'online' => true,
185
+ 'storage' => {
186
+ 'blobStoreName' => 'default',
187
+ 'strictContentTypeValidation' => true
188
+ },
189
+ 'group' => {}
190
+ }
191
+ apply_changes(default: default_options, override: options, name: name, members: members)
192
+ end
193
+
194
+ def self.pypi_hosted(name, options)
195
+ default_options = {
196
+ 'online' => true,
197
+ 'storage' => {
198
+ 'blobStoreName' => 'default',
199
+ 'strictContentTypeValidation' => true,
200
+ 'writePolicy' => 'allow_once'
201
+ },
202
+ 'cleanup' => {
203
+ 'policyNames' => []
48
204
  }
49
205
  }
206
+ apply_changes(default: default_options, override: options, name: name)
207
+ end
208
+
209
+ def self.pypi_proxy(name, remote_url, options)
210
+ default_options = {
211
+ 'online' => true,
212
+ 'storage' => {
213
+ 'blobStoreName' => 'default',
214
+ 'strictContentTypeValidation' => true
215
+ },
216
+ 'cleanup' => {
217
+ 'policyNames' => []
218
+ },
219
+ 'proxy' => {
220
+ 'contentMaxAge' => 1440,
221
+ 'metadataMaxAge' => 1440
222
+ },
223
+ 'negativeCache' => {
224
+ 'enabled' => true,
225
+ 'timeToLive' => 1440
226
+ },
227
+ 'httpClient' => {
228
+ 'blocked' => false,
229
+ 'autoBlock' => true,
230
+ },
231
+ }
232
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
233
+ end
234
+
235
+ def self.raw_group(name, members, options)
236
+ default_options = {
237
+ 'online' => true,
238
+ 'storage' => {
239
+ 'blobStoreName' => 'default',
240
+ 'strictContentTypeValidation' => true
241
+ },
242
+ 'group' => {}
243
+ }
244
+ apply_changes(default: default_options, override: options, name: name, members: members)
50
245
  end
51
246
 
52
- def self.npm_hosted(name, write_policy: ALLOW_ONCE)
53
- {
54
- 'name' => name,
247
+ def self.raw_hosted(name, options)
248
+ default_options = {
55
249
  'online' => true,
56
250
  'storage' => {
57
251
  'blobStoreName' => 'default',
58
252
  'strictContentTypeValidation' => true,
59
- 'writePolicy' => write_policy
253
+ 'writePolicy' => 'allow_once'
254
+ },
255
+ 'cleanup' => {
256
+ 'policyNames' => []
60
257
  }
61
258
  }
259
+ apply_changes(default: default_options, override: options, name: name)
260
+ end
261
+
262
+ def self.raw_proxy(name, remote_url, options)
263
+ default_options = {
264
+ 'online' => true,
265
+ 'storage' => {
266
+ 'blobStoreName' => 'default',
267
+ 'strictContentTypeValidation' => true
268
+ },
269
+ 'cleanup' => {
270
+ 'policyNames' => []
271
+ },
272
+ 'proxy' => {
273
+ 'contentMaxAge' => 1440,
274
+ 'metadataMaxAge' => 1440
275
+ },
276
+ 'negativeCache' => {
277
+ 'enabled' => true,
278
+ 'timeToLive' => 1440
279
+ },
280
+ 'httpClient' => {
281
+ 'blocked' => false,
282
+ 'autoBlock' => true,
283
+ }
284
+ }
285
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
286
+ end
287
+
288
+ def self.rubygems_group(name, members, options)
289
+ default_options = {
290
+ 'online' => true,
291
+ 'storage' => {
292
+ 'blobStoreName' => 'default',
293
+ 'strictContentTypeValidation' => true
294
+ },
295
+ 'group' => {}
296
+ }
297
+ apply_changes(default: default_options, override: options, name: name, members: members)
62
298
  end
63
299
 
64
- def self.pypi_hosted(name, write_policy: ALLOW_ONCE)
65
- {
66
- 'name' => name,
300
+ def self.rubygems_hosted(name, options)
301
+ default_options = {
67
302
  'online' => true,
68
303
  'storage' => {
69
304
  'blobStoreName' => 'default',
70
305
  'strictContentTypeValidation' => true,
71
- 'writePolicy' => write_policy
306
+ 'writePolicy' => 'allow_once'
307
+ },
308
+ 'cleanup' => {
309
+ 'policyNames' => []
72
310
  }
73
311
  }
312
+ apply_changes(default: default_options, override: options, name: name)
313
+ end
314
+
315
+ def self.rubygems_proxy(name, remote_url, options)
316
+ default_options = {
317
+ 'online' => true,
318
+ 'storage' => {
319
+ 'blobStoreName' => 'default',
320
+ 'strictContentTypeValidation' => true
321
+ },
322
+ 'cleanup' => {
323
+ 'policyNames' => []
324
+ },
325
+ 'proxy' => {
326
+ 'contentMaxAge' => 1440,
327
+ 'metadataMaxAge' => 1440
328
+ },
329
+ 'negativeCache' => {
330
+ 'enabled' => true,
331
+ 'timeToLive' => 1440
332
+ },
333
+ 'httpClient' => {
334
+ 'blocked' => false,
335
+ 'autoBlock' => true,
336
+ },
337
+ }
338
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
339
+ end
340
+
341
+ def self.yum_group(name, members, options)
342
+ default_options = {
343
+ 'online' => true,
344
+ 'storage' => {
345
+ 'blobStoreName' => 'default',
346
+ 'strictContentTypeValidation' => true
347
+ },
348
+ 'group' => {}
349
+ }
350
+ apply_changes(default: default_options, override: options, name: name, members: members)
74
351
  end
75
352
 
76
- def self.yum_hosted(name, depth, write_policy: ALLOW_ONCE, deploy_policy: STRICT)
77
- {
78
- 'name' => name,
353
+ def self.yum_hosted(name, options)
354
+ default_options = {
79
355
  'online' => true,
80
356
  'storage' => {
81
357
  'blobStoreName' => 'default',
82
358
  'strictContentTypeValidation' => true,
83
- 'writePolicy' => write_policy
359
+ 'writePolicy' => 'allow_once'
360
+ },
361
+ 'cleanup' => {
362
+ 'policyNames' => []
84
363
  },
85
364
  'yum' => {
86
- 'repodataDepth' => depth,
87
- 'deployPolicy' => deploy_policy
365
+ 'repodataDepth' => 3,
366
+ 'deployPolicy' => 'STRICT'
88
367
  }
89
368
  }
369
+ apply_changes(default: default_options, override: options, name: name)
370
+ end
371
+
372
+ def self.yum_proxy(name, remote_url, options)
373
+ default_options = {
374
+ 'online' => true,
375
+ 'storage' => {
376
+ 'blobStoreName' => 'default',
377
+ 'strictContentTypeValidation' => true
378
+ },
379
+ 'cleanup' => {
380
+ 'policyNames' => []
381
+ },
382
+ 'proxy' => {
383
+ 'contentMaxAge' => 1440,
384
+ 'metadataMaxAge' => 1440
385
+ },
386
+ 'negativeCache' => {
387
+ 'enabled' => true,
388
+ 'timeToLive' => 1440
389
+ },
390
+ 'httpClient' => {
391
+ 'blocked' => false,
392
+ 'autoBlock' => true,
393
+ },
394
+ }
395
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
396
+ end
397
+
398
+
399
+ private
400
+
401
+ def self.deep_merge(default_hash, hash)
402
+ full_hash = {}
403
+
404
+ default_hash.each do |key, value|
405
+ if hash[key].nil?
406
+ full_hash[key] = value
407
+ else
408
+ if value.is_a?(Hash)
409
+ full_hash[key] = deep_merge(value, hash[key])
410
+ else
411
+ full_hash[key] = hash[key]
412
+ end
413
+ hash.delete(key)
414
+ end
415
+ end
416
+
417
+ hash.each do |key, value|
418
+ full_hash[key] = value
419
+ end
420
+
421
+ return full_hash
422
+ end
423
+
424
+ def self.apply_changes(default:, override:, name:, url: nil, members: nil)
425
+ options = deep_merge(default, override)
426
+ options['name'] = name
427
+ options['proxy']['remoteUrl'] = url unless url.nil?
428
+ options['group']['memberNames'] = members unless members.nil?
429
+ return options
90
430
  end
91
431
  end
92
432
  end