nexus_api 1.6.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2f708328c5c5cc947266bf002b345c88177e4780a1d25796ec1b918d682439b4
4
- data.tar.gz: 8006685084aaabb5fd3d9db2d87d7b6d3ee838db88eec94320145860ece8a30d
3
+ metadata.gz: 8cef507212dc118ed642feb046f02507b8d3d1dd5f6ef82ea575debf5f9ec435
4
+ data.tar.gz: d2cc63846f5ad0957d06ff7a2d1f894aebc43cd02f1897bdd8781ca13d755cb3
5
5
  SHA512:
6
- metadata.gz: 46adf2cec475f1b3f19a9088f6b9efaec6aaa6b368933889e640b5ffed24c91f3190c5c9a36c7e1de49be9c3225a2444b44cc14b0dc74014c524d5755e6995ae
7
- data.tar.gz: c5e9670c1f4532d5ba268bead70b71bfc5626593b3addd260e80e7bc320faf392910b4db88dab910ba843e4ac9dd05afce04c88e76ea067ba966a02ec3ac6548
6
+ metadata.gz: 5b5ed7626a93a6c8da54c4147dc55d8dd1cf7daa85af4397866a8942489c1ac4374495a66450a26f4f3b54e2ff55eb2f9931252445fd40b610c4f2f2df9475e7
7
+ data.tar.gz: 6b1a560d2f14f54d481c97c776c53980acbd8a99c203aa27ea933a0f90fcabad05257553332804474bd22a2ed23507b8f5d0a2c39e1316c4147b86a59cda9824
@@ -5,6 +5,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
 
8
+ ## [2.0.0](https://github.com/Cisco-AMP/nexus_api/compare/v1.6.1...v2.0.0) - 2020-07-27
9
+ ### Added
10
+ - Fully implemented create methods for group, hosted, and proxy type repository in the following formats:
11
+ - docker
12
+ - maven
13
+ - npm
14
+ - pypi
15
+ - raw
16
+ - rubygems
17
+ - yum
18
+
19
+
20
+ ### Changed
21
+ - Method signature for `NexusAPI::API.create_repository_docker_hosted()`
22
+ - Method signature for `NexusAPI::API.create_repository_maven_hosted()`
23
+ - Method signature for `NexusAPI::API.create_repository_npm_hosted()`
24
+ - Method signature for `NexusAPI::API.create_repository_pypi_hosted()`
25
+ - Method signature for `NexusAPI::API.create_repository_raw_hosted()`
26
+ - Method signature for `NexusAPI::API.create_repository_rubygems_hosted()`
27
+ - Method signature for `NexusAPI::API.create_repository_yum_hosted()`
28
+
29
+
8
30
  ## [1.6.1](https://github.com/Cisco-AMP/nexus_api/compare/v1.6.0...v1.6.1) - 2020-07-20
9
31
  ### Fixed
10
32
  - Parameters for tag creation were being JSON encoded twice resulting in data Nexus could not parse
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nexus_api (1.6.1)
4
+ nexus_api (2.0.0)
5
5
  bundler (~> 2)
6
6
  docker-api (~> 1.34.2)
7
7
  dotenv (~> 2.7.5)
data/README.md CHANGED
@@ -65,35 +65,166 @@ api = NexusAPI::API.new(
65
65
  )
66
66
  # NOTE: All Docker commands will fail if the docker hostnames are not initialized
67
67
 
68
+
69
+ # You can create various types of repositories in different formats
70
+ api.create_repository_docker_group(
71
+ name: REPOSITORY_NAME,
72
+ members: REPOSITORY_MEMBERS,
73
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
74
+ )
75
+ api.create_repository_docker_hosted(
76
+ name: REPOSITORY_NAME,
77
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
78
+ )
79
+ api.create_repository_docker_proxy(
80
+ name: REPOSITORY_NAME,
81
+ remote_url: URL_TO_PROXY,
82
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
83
+ )
84
+
85
+ api.create_repository_maven_group(
86
+ name: REPOSITORY_NAME,
87
+ members: REPOSITORY_MEMBERS,
88
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
89
+ )
90
+ api.create_repository_maven_hosted(
91
+ name: REPOSITORY_NAME,
92
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
93
+ )
94
+ api.create_repository_maven_proxy(
95
+ name: REPOSITORY_NAME,
96
+ remote_url: URL_TO_PROXY,
97
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
98
+ )
99
+
100
+ api.create_repository_npm_group(
101
+ name: REPOSITORY_NAME,
102
+ members: REPOSITORY_MEMBERS,
103
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
104
+ )
105
+ api.create_repository_npm_hosted(
106
+ name: REPOSITORY_NAME,
107
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
108
+ )
109
+ api.create_repository_npm_proxy(
110
+ name: REPOSITORY_NAME,
111
+ remote_url: URL_TO_PROXY,
112
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
113
+ )
114
+
115
+ api.create_repository_pypi_group(
116
+ name: REPOSITORY_NAME,
117
+ members: REPOSITORY_MEMBERS,
118
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
119
+ )
120
+ api.create_repository_pypi_hosted(
121
+ name: REPOSITORY_NAME,
122
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
123
+ )
124
+ api.create_repository_pypi_proxy(
125
+ name: REPOSITORY_NAME,
126
+ remote_url: URL_TO_PROXY,
127
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
128
+ )
129
+
130
+ api.create_repository_raw_group(
131
+ name: REPOSITORY_NAME,
132
+ members: REPOSITORY_MEMBERS,
133
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
134
+ )
135
+ api.create_repository_raw_hosted(
136
+ name: REPOSITORY_NAME,
137
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
138
+ )
139
+ api.create_repository_raw_proxy(
140
+ name: REPOSITORY_NAME,
141
+ remote_url: URL_TO_PROXY,
142
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
143
+ )
144
+
145
+ api.create_repository_rubygems_group(
146
+ name: REPOSITORY_NAME,
147
+ members: REPOSITORY_MEMBERS,
148
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
149
+ )
150
+ api.create_repository_rubygems_hosted(
151
+ name: REPOSITORY_NAME,
152
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
153
+ )
154
+ api.create_repository_rubygems_proxy(
155
+ name: REPOSITORY_NAME,
156
+ remote_url: URL_TO_PROXY,
157
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
158
+ )
159
+
160
+ api.create_repository_yum_group(
161
+ name: REPOSITORY_NAME,
162
+ members: REPOSITORY_MEMBERS,
163
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
164
+ )
165
+ api.create_repository_yum_hosted(
166
+ name: REPOSITORY_NAME,
167
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
168
+ )
169
+ api.create_repository_yum_proxy(
170
+ name: REPOSITORY_NAME,
171
+ remote_url: URL_TO_PROXY,
172
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
173
+ )
174
+
175
+
68
176
  # You can query information through the list methods
69
- api.list_assets(repository: REPOSITORY_NAME)
177
+ api.list_all_assets(repository: REPOSITORY_NAME)
178
+ api.list_assets(repository: REPOSITORY_NAME, paginate: BOOLEAN)
70
179
  api.list_asset(id: ASSET_ID)
71
- api.list_components(repository: REPOSITORY_NAME)
180
+
181
+ api.list_all_components(repository: REPOSITORY_NAME)
182
+ api.list_components(repository: REPOSITORY_NAME, paginate: BOOLEAN)
72
183
  api.list_component(id: ASSET_ID)
184
+
73
185
  api.list_privileges
186
+ api.list_privilege(privilege_id: ID)
187
+
74
188
  api.list_repositories
75
189
  api.list_repository_names
190
+
76
191
  api.list_roles
192
+ api.list_role(id: ROLE_ID)
193
+
77
194
  api.list_scripts
78
- api.list_tags
195
+
196
+ api.list_all_tags
197
+ api.list_tags(paginate: BOOLEAN)
198
+
79
199
  api.list_users
80
200
 
201
+
81
202
  # You can search for an asset by its name
82
203
  # Optionally, you can pass in additional fields to filter the results
204
+ api.search_all_assets(
205
+ name: ASSET_NAME,
206
+ format: REPOSITORY_FORMAT, # Optional
207
+ repository: REPOSITORY_NAME, # Optional
208
+ sha1: SHA1, # Optional
209
+ version: VERSION, # Optional
210
+ )
211
+ # You can also paginate through the results if you want to do some additional filtering
83
212
  api.search_asset(
84
213
  name: ASSET_NAME,
85
214
  format: REPOSITORY_FORMAT, # Optional
86
215
  repository: REPOSITORY_NAME, # Optional
87
216
  sha1: SHA1, # Optional
88
217
  version: VERSION, # Optional
218
+ paginate: BOOLEAN # Optional
89
219
  )
90
220
 
221
+
91
222
  # The following endpoints will paginate:
92
223
  # - list_assets
93
224
  # - list_components
94
225
  # - list_tags
95
226
  # - search_asset
96
- # You can use the following methods to automatically gather data from all pages for you:
227
+ # Or you can use the following methods to automatically gather data from all pages for you:
97
228
  # - list_all_assets
98
229
  # - list_all_components
99
230
  # - list_all_tags
@@ -106,9 +237,11 @@ set = Array.new.tap do |set|
106
237
  end
107
238
  end
108
239
 
240
+
109
241
  # You can move all components that are tagged to a new destination
110
242
  api.move_components_to(destination: DESTINATION, tag: TAG)
111
243
 
244
+
112
245
  # You can download an asset by using its asset_id
113
246
  # Optionally, you can rename the file on download
114
247
  api.download(
@@ -116,6 +249,7 @@ api.download(
116
249
  name: NEW_FILE_NAME, # Optional
117
250
  )
118
251
 
252
+
119
253
  # Different asset types require differing information to be uploaded
120
254
  # Optionally, you can tag the component provided the tag already exists
121
255
  api.upload_maven_component(
@@ -154,12 +288,14 @@ api.upload_yum_component(
154
288
  tag: TAG, # Optional
155
289
  )
156
290
 
291
+
157
292
  # Docker is a special case and uses the local Docker daemon
158
293
  # If this daemon is not installed and running these methods will fail
159
294
  # NOTE: Docker login/logout is handled as part of the docker methods
160
295
  api.download_docker_component(image: IMAGE_NAME, tag: DOCKER_TAG)
161
296
  api.upload_docker_component(image: IMAGE_NAME, tag: DOCKER_TAG)
162
297
 
298
+
163
299
  # You can create/delete tags and associate/disassociate them from components
164
300
  # (we use the SHA1 rather than the file name because the Nexus search is inconsistent)
165
301
  api.create_tag(name: TAG)
@@ -167,10 +303,12 @@ api.associate_tag(name: TAG, sha1: SHA1_SUM, repository: REPOSITORY_NAME)
167
303
  api.delete_associated_tag(name: TAG, sha1: SHA1_SUM, repository: REPOSITORY_NAME)
168
304
  api.delete_tag(name: TAG)
169
305
 
306
+
170
307
  # You can query the Nexus status
171
308
  api.status
172
309
  api.status_writable
173
310
 
311
+
174
312
  # Using an asset's URL you can gather its filesize as a String
175
313
  api.get_asset_size(asset_url: URL)
176
314
  ```
data/bin/test CHANGED
@@ -1,2 +1,3 @@
1
1
  #!/usr/bin/env bash
2
- bundle exec rake test
2
+
3
+ bundle exec rspec ${1:+$1}
@@ -36,15 +36,25 @@ module NexusAPI
36
36
  # POST /service/rest/beta/repositories/conan/proxy
37
37
  # PUT /service/rest/beta/repositories/conan/proxy/{repositoryName}
38
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
+
39
44
  # PUT /service/rest/beta/repositories/docker/group/{repositoryName}
40
45
  # POST /service/rest/beta/repositories/docker/hosted
41
- def create_repository_docker_hosted(name:, port:)
42
- parameters = ParameterBuilder.docker_hosted(name, port)
43
- @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)
44
49
  end
45
50
 
46
51
  # PUT /service/rest/beta/repositories/docker/hosted/{repositoryName}
47
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
+
48
58
  # PUT /service/rest/beta/repositories/docker/proxy/{repositoryName}
49
59
  # POST /service/rest/beta/repositories/gitlfs/hosted
50
60
  # PUT /service/rest/beta/repositories/gitlfs/hosted/{repositoryName}
@@ -57,26 +67,46 @@ module NexusAPI
57
67
  # POST /service/rest/beta/repositories/helm/proxy
58
68
  # PUT /service/rest/beta/repositories/helm/proxy/{repositoryName}
59
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
+
60
75
  # PUT /service/rest/beta/repositories/maven/group/{repositoryName}
61
76
  # POST /service/rest/beta/repositories/maven/hosted
62
- def create_repository_maven_hosted(name:)
63
- parameters = ParameterBuilder.maven_hosted(name)
64
- @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)
65
80
  end
66
81
 
67
82
  # PUT /service/rest/beta/repositories/maven/hosted/{repositoryName}
68
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
+
69
89
  # PUT /service/rest/beta/repositories/maven/proxy/{repositoryName}
70
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
+
71
96
  # PUT /service/rest/beta/repositories/npm/group/{repositoryName}
72
97
  # POST /service/rest/beta/repositories/npm/hosted
73
- def create_repository_npm_hosted(name:)
74
- parameters = ParameterBuilder.npm_hosted(name)
75
- @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)
76
101
  end
77
102
 
78
103
  # PUT /service/rest/beta/repositories/npm/hosted/{repositoryName}
79
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
+
80
110
  # PUT /service/rest/beta/repositories/npm/proxy/{repositoryName}
81
111
  # POST /service/rest/beta/repositories/nuget/group
82
112
  # PUT /service/rest/beta/repositories/nuget/group/{repositoryName}
@@ -87,15 +117,25 @@ module NexusAPI
87
117
  # POST /service/rest/beta/repositories/p2/proxy
88
118
  # PUT /service/rest/beta/repositories/p2/proxy/{repositoryName}
89
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
+
90
125
  # PUT /service/rest/beta/repositories/pypi/group/{repositoryName}
91
126
  # POST /service/rest/beta/repositories/pypi/hosted
92
- def create_repository_pypi_hosted(name:)
93
- parameters = ParameterBuilder.pypi_hosted(name)
94
- @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)
95
130
  end
96
131
 
97
132
  # PUT /service/rest/beta/repositories/pypi/hosted/{repositoryName}
98
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
+
99
139
  # PUT /service/rest/beta/repositories/pypi/proxy/{repositoryName}
100
140
  # POST /service/rest/beta/repositories/r/group
101
141
  # PUT /service/rest/beta/repositories/r/group/{repositoryName}
@@ -104,37 +144,77 @@ module NexusAPI
104
144
  # POST /service/rest/beta/repositories/r/proxy
105
145
  # PUT /service/rest/beta/repositories/r/proxy/{repositoryName}
106
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
+
107
152
  # PUT /service/rest/beta/repositories/raw/group/{repositoryName}
108
153
  # POST /service/rest/beta/repositories/raw/hosted
109
- def create_repository_raw_hosted(name:)
110
- parameters = ParameterBuilder.raw_hosted(name)
111
- @connection.post(endpoint: 'repositories/raw/hosted', parameters: parameters, api_version: 'beta')
154
+ def create_repository_raw_hosted(name:, options: {})
155
+ parameters = ParameterBuilder.raw_hosted(name, options)
156
+ create('repositories/raw/hosted', parameters)
112
157
  end
113
158
 
114
159
  # PUT /service/rest/beta/repositories/raw/hosted/{repositoryName}
115
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
+
116
166
  # PUT /service/rest/beta/repositories/raw/proxy/{repositoryName}
117
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
+
118
173
  # PUT /service/rest/beta/repositories/rubygems/group/{repositoryName}
119
174
  # POST /service/rest/beta/repositories/rubygems/hosted
120
- def create_repository_rubygems_hosted(name:)
121
- parameters = ParameterBuilder.rubygems_hosted(name)
122
- @connection.post(endpoint: 'repositories/rubygems/hosted', parameters: parameters, api_version: 'beta')
175
+ def create_repository_rubygems_hosted(name:, options: {})
176
+ parameters = ParameterBuilder.rubygems_hosted(name, options)
177
+ create('repositories/rubygems/hosted', parameters)
123
178
  end
124
179
 
125
180
  # PUT /service/rest/beta/repositories/rubygems/hosted/{repositoryName}
126
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
+
127
187
  # PUT /service/rest/beta/repositories/rubygems/proxy/{repositoryName}
128
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
+
129
194
  # PUT /service/rest/beta/repositories/yum/group/{repositoryName}
130
195
  # POST /service/rest/beta/repositories/yum/hosted
131
- def create_repository_yum_hosted(name:, depth:)
132
- parameters = ParameterBuilder.yum_hosted(name, depth)
133
- @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)
134
199
  end
135
200
 
136
201
  # PUT /service/rest/beta/repositories/yum/hosted/{repositoryName}
137
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
+
138
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
139
219
  end
140
220
  end
@@ -1,4 +1,4 @@
1
1
  module NexusAPI
2
- VERSION = '1.6.1'
2
+ VERSION = '2.0.0'
3
3
  end
4
4
 
@@ -1,114 +1,432 @@
1
1
  module NexusAPI
2
2
  class ParameterBuilder
3
- # Write Policies
4
- ALLOW = 'ALLOW'
5
- ALLOW_ONCE = 'ALLOW_ONCE'
6
- DENY = 'DENY'
7
-
8
- # Version Policy
9
- RELEASE = 'RELEASE'
10
- SNAPSHOT = 'SNAPSHOT'
11
- MIXED = 'MIXED'
12
-
13
- # Layout or Deploy Policy
14
- STRICT = 'STRICT'
15
- 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
16
18
 
17
- def self.docker_hosted(name, port, write_policy: ALLOW_ONCE)
18
- {
19
- 'name' => name,
19
+ def self.docker_hosted(name, options)
20
+ default_options = {
20
21
  'online' => true,
21
22
  'storage' => {
22
23
  'blobStoreName' => 'default',
23
24
  'strictContentTypeValidation' => true,
24
- '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
25
56
  },
26
57
  'docker' => {
27
58
  'v1Enabled' => false,
28
- 'forceBasicAuth' => true,
29
- 'httpPort' => port
59
+ 'forceBasicAuth' => true
60
+ },
61
+ 'dockerProxy' => {
62
+ 'indexType' => 'REGISTRY'
30
63
  }
31
64
  }
65
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
32
66
  end
33
67
 
34
- def self.maven_hosted(name, write_policy: ALLOW_ONCE, version_policy: RELEASE, layout_policy: STRICT)
35
- {
36
- '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 = {
37
82
  'online' => true,
38
83
  'storage' => {
39
84
  'blobStoreName' => 'default',
40
85
  'strictContentTypeValidation' => true,
41
- '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,
42
120
  },
43
121
  'maven' => {
44
- 'versionPolicy' => version_policy,
45
- 'layoutPolicy' => layout_policy
122
+ 'versionPolicy' => 'RELEASE',
123
+ 'layoutPolicy' => 'STRICT'
46
124
  }
47
125
  }
126
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
48
127
  end
49
128
 
50
- def self.npm_hosted(name, write_policy: ALLOW_ONCE)
51
- {
52
- 'name' => name,
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 = {
53
143
  'online' => true,
54
144
  'storage' => {
55
145
  'blobStoreName' => 'default',
56
146
  'strictContentTypeValidation' => true,
57
- 'writePolicy' => write_policy
147
+ 'writePolicy' => 'allow_once'
148
+ },
149
+ 'cleanup' => {
150
+ 'policyNames' => []
58
151
  }
59
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)
60
180
  end
61
181
 
62
- def self.pypi_hosted(name, write_policy: ALLOW_ONCE)
63
- {
64
- 'name' => name,
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 = {
65
196
  'online' => true,
66
197
  'storage' => {
67
198
  'blobStoreName' => 'default',
68
199
  'strictContentTypeValidation' => true,
69
- 'writePolicy' => write_policy
200
+ 'writePolicy' => 'allow_once'
201
+ },
202
+ 'cleanup' => {
203
+ 'policyNames' => []
70
204
  }
71
205
  }
206
+ apply_changes(default: default_options, override: options, name: name)
72
207
  end
73
208
 
74
- def self.raw_hosted(name, write_policy: ALLOW_ONCE)
75
- {
76
- 'name' => name,
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)
245
+ end
246
+
247
+ def self.raw_hosted(name, options)
248
+ default_options = {
77
249
  'online' => true,
78
250
  'storage' => {
79
251
  'blobStoreName' => 'default',
80
252
  'strictContentTypeValidation' => true,
81
- 'writePolicy' => write_policy
253
+ 'writePolicy' => 'allow_once'
254
+ },
255
+ 'cleanup' => {
256
+ 'policyNames' => []
257
+ }
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,
82
283
  }
83
284
  }
285
+ apply_changes(default: default_options, override: options, name: name, url: remote_url)
84
286
  end
85
287
 
86
- def self.rubygems_hosted(name, write_policy: ALLOW_ONCE)
87
- {
88
- 'name' => name,
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)
298
+ end
299
+
300
+ def self.rubygems_hosted(name, options)
301
+ default_options = {
89
302
  'online' => true,
90
303
  'storage' => {
91
304
  'blobStoreName' => 'default',
92
305
  'strictContentTypeValidation' => true,
93
- 'writePolicy' => write_policy
306
+ 'writePolicy' => 'allow_once'
307
+ },
308
+ 'cleanup' => {
309
+ 'policyNames' => []
94
310
  }
95
311
  }
312
+ apply_changes(default: default_options, override: options, name: name)
96
313
  end
97
314
 
98
- def self.yum_hosted(name, depth, write_policy: ALLOW_ONCE, deploy_policy: STRICT)
99
- {
100
- 'name' => name,
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)
351
+ end
352
+
353
+ def self.yum_hosted(name, options)
354
+ default_options = {
101
355
  'online' => true,
102
356
  'storage' => {
103
357
  'blobStoreName' => 'default',
104
358
  'strictContentTypeValidation' => true,
105
- 'writePolicy' => write_policy
359
+ 'writePolicy' => 'allow_once'
360
+ },
361
+ 'cleanup' => {
362
+ 'policyNames' => []
106
363
  },
107
364
  'yum' => {
108
- 'repodataDepth' => depth,
109
- 'deployPolicy' => deploy_policy
365
+ 'repodataDepth' => 3,
366
+ 'deployPolicy' => 'STRICT'
110
367
  }
111
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
112
430
  end
113
431
  end
114
432
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexus_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francis Levesque