nexus_api 1.6.1 → 2.0.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.
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