nexus_api 1.5.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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