Class: NexusAPI::API

Inherits:
Object
  • Object
show all
Defined in:
lib/nexus_api.rb

Constant Summary collapse

TEAM_CONFIG =
File.join(File.dirname(__dir__), 'team_configs/default.yaml').freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(username:, password:, hostname:, docker_pull_hostname: nil, docker_push_hostname: nil, team_config: nil) ⇒ API

Returns a new instance of API.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/nexus_api.rb', line 20

def initialize(username:, password:, hostname:, docker_pull_hostname: nil, docker_push_hostname: nil, team_config: nil)
  @connection = NexusAPI::NexusConnection.new(
    username: username,
    password: password,
    hostname: hostname,
  )
  if docker_pull_hostname.nil? || docker_push_hostname.nil?
    @docker = nil
  else
    @docker = NexusAPI::DockerManager.new(
      docker: NexusAPI::DockerShell.new,
      options: {
        'username' => username,
        'password' => password,
        'pull_host' => docker_pull_hostname,
        'push_host' => docker_push_hostname,
      }
    )
  end
  team_config ||= TEAM_CONFIG
  @team_config = NexusAPI::ConfigManager.new(config_path: team_config)
end

Instance Attribute Details

#connectionObject

Returns the value of attribute connection.



14
15
16
# File 'lib/nexus_api.rb', line 14

def connection
  @connection
end

#dockerObject

Returns the value of attribute docker.



15
16
17
# File 'lib/nexus_api.rb', line 15

def docker
  @docker
end

#team_configObject

Returns the value of attribute team_config.



16
17
18
# File 'lib/nexus_api.rb', line 16

def team_config
  @team_config
end

Instance Method Details

#associate_tag(name:, sha1:, repository: nil) ⇒ Object

POST /service/rest/v1/tags/associate/tagName



297
298
299
300
301
302
303
304
305
# File 'lib/nexus_api.rb', line 297

def associate_tag(name:, sha1:, repository: nil)
  repository ||= @team_config.tag_repository
  search_query = 
    "?"\
    "wait=true&"\
    "repository=#{repository}&"\
    "sha1=#{sha1}"
  @connection.post(endpoint: "tags/associate/#{name}" + search_query)
end

#create_tag(name:) ⇒ Object

POST /service/rest/v1/tags



282
283
284
285
286
287
# File 'lib/nexus_api.rb', line 282

def create_tag(name:)
  parameters = JSON.dump({
    'name' => name,
  })
  @connection.post(endpoint: 'tags', parameters: parameters)
end

#delete_associated_tag(name:, sha1:, repository: nil) ⇒ Object

DELETE /service/rest/v1/tags/associate/tagName



308
309
310
311
312
313
314
315
# File 'lib/nexus_api.rb', line 308

def delete_associated_tag(name:, sha1:, repository: nil)
  repository ||= @team_config.tag_repository
  search_query =
    "?"\
    "repository=#{repository}&"\
    "sha1=#{sha1}"
  @connection.delete(endpoint: "tags/associate/#{name}" + search_query)
end

#delete_local_docker_image(image:, tag:) ⇒ Object



350
351
352
# File 'lib/nexus_api.rb', line 350

def delete_local_docker_image(image:, tag:)
  @docker.delete(image_name: image, tag: tag) if docker_ready?
end

#delete_script(name:) ⇒ Object

GET /service/rest/v1/script/name PUT /service/rest/v1/script/name DELETE /service/rest/v1/script/name



210
211
212
# File 'lib/nexus_api.rb', line 210

def delete_script(name:)
  @connection.delete(endpoint: "script/#{name}")
end

#delete_tag(name:) ⇒ Object

GET /service/rest/v1/tags/name PUT /service/rest/v1/tags/name DELETE /service/rest/v1/tags/name



292
293
294
# File 'lib/nexus_api.rb', line 292

def delete_tag(name:)
  @connection.delete(endpoint: "tags/#{name}")
end

#docker_ready?Boolean

Returns:

  • (Boolean)


330
331
332
333
334
335
336
# File 'lib/nexus_api.rb', line 330

def docker_ready?
  if @docker.nil?
    raise 'Docker push and pull endpoints not initialized!'
    return false
  end
  true
end

#download(id:, name: nil) ⇒ Object



354
355
356
357
358
359
360
361
362
363
364
365
366
# File 'lib/nexus_api.rb', line 354

def download(id:, name: nil)
  asset = list_asset(id: id)
  return false if asset == '' || asset.empty?
  return false if asset["downloadUrl"].nil?
  url = asset["downloadUrl"]
  response = @connection.download(url: url)
  if name
    File.write(name, response.body)
  else
    File.write(url.split('/').last, response.body)
  end
  true
end

#download_docker_component(image:, tag:) ⇒ Object



338
339
340
# File 'lib/nexus_api.rb', line 338

def download_docker_component(image:, tag:)
  @docker.download(image_name: image, tag: tag) if docker_ready?
end

#get_asset_size(asset_url:) ⇒ Object

—CUSTOM FUNCTIONS—



326
327
328
# File 'lib/nexus_api.rb', line 326

def get_asset_size(asset_url:)
  @connection.content_length(asset_url: asset_url)
end

#list_asset(id:) ⇒ Object

GET /service/rest/v1/assets/id



52
53
54
# File 'lib/nexus_api.rb', line 52

def list_asset(id:)
  @connection.get_response(endpoint: "assets/#{id}")
end

#list_assets(repository: nil, paginate: false) ⇒ Object

—ASSETS— GET /service/rest/v1/assets



46
47
48
49
# File 'lib/nexus_api.rb', line 46

def list_assets(repository: nil, paginate: false)
  repository ||= @team_config.assets_repository
  @connection.get_response(endpoint: "assets?repository=#{repository}", paginate: paginate)
end

#list_component(id:) ⇒ Object

GET /service/rest/v1/components/id



134
135
136
# File 'lib/nexus_api.rb', line 134

def list_component(id:)
  @connection.get_response(endpoint: "components/#{id}")
end

#list_components(repository: nil, paginate: false) ⇒ Object

—COMPONENTS— GET /service/rest/v1/components



65
66
67
68
# File 'lib/nexus_api.rb', line 65

def list_components(repository: nil, paginate: false)
  repository ||= @team_config.components_repository
  @connection.get_response(endpoint: "components?repository=#{repository}", paginate: paginate)
end

#list_repositoriesObject

—REPOSITORIES— (This endpoint does not paginate) GET /service/rest/v1/repositories



178
179
180
# File 'lib/nexus_api.rb', line 178

def list_repositories
  @connection.get_response(endpoint: 'repositories')
end

#list_repository_namesObject



182
183
184
# File 'lib/nexus_api.rb', line 182

def list_repository_names
  list_repositories.map { |repo| repo['name'] }
end

#list_scriptsObject

—SCRIPT— GET /service/rest/v1/script



197
198
199
# File 'lib/nexus_api.rb', line 197

def list_scripts
  @connection.get_response(endpoint: "script")
end

#list_tags(paginate: false) ⇒ Object

—TAGS— GET /service/rest/v1/tags



277
278
279
# File 'lib/nexus_api.rb', line 277

def list_tags(paginate: false)
  @connection.get_response(endpoint: 'tags', paginate: paginate)
end

#local_docker_image_exists?(image:, tag:) ⇒ Boolean

Returns:

  • (Boolean)


346
347
348
# File 'lib/nexus_api.rb', line 346

def local_docker_image_exists?(image:, tag:)
  @docker.exists?(image_name: image, tag: tag) if docker_ready?
end

#paginate?Boolean

Returns:

  • (Boolean)


368
369
370
# File 'lib/nexus_api.rb', line 368

def paginate?
  @connection.paginate?
end

#run_script(name:) ⇒ Object

POST /service/rest/v1/script/name/run



215
216
217
# File 'lib/nexus_api.rb', line 215

def run_script(name:)
  @connection.post(endpoint: "script/#{name}/run", headers: {'Content-Type' => 'text/plain'})
end

#search_asset(name:, format: nil, repository: nil, sha1: nil, version: nil, paginate: false) ⇒ Object

GET /service/rest/v1/search/assets



224
225
226
227
228
229
230
231
232
# File 'lib/nexus_api.rb', line 224

def search_asset(name:, format: nil, repository: nil, sha1: nil, version: nil, paginate: false)
  repository ||= @team_config.search_repository
  endpoint = "search/assets?q=#{name}"
  endpoint += "&format=#{format}" unless format.nil?
  endpoint += "&repository=#{repository}" unless repository.nil?
  endpoint += "&sha1=#{sha1}" unless sha1.nil?
  endpoint += "&version=#{version}" unless version.nil?
  @connection.get_response(endpoint: endpoint, paginate: paginate)
end

#statusObject

—STATUS— GET /service/rest/v1/status



261
262
263
# File 'lib/nexus_api.rb', line 261

def status
  @connection.get(endpoint: 'status')
end

#status_writableObject

GET /service/rest/v1/status/writable



266
267
268
# File 'lib/nexus_api.rb', line 266

def status_writable
  @connection.get(endpoint: 'status/writable')
end

#upload_docker_component(image:, tag:) ⇒ Object



342
343
344
# File 'lib/nexus_api.rb', line 342

def upload_docker_component(image:, tag:)
  @docker.upload(image_name: image, tag: tag) if docker_ready?
end

#upload_maven_component(filename:, group_id:, artifact_id:, version:, repository: nil, tag: nil) ⇒ Object

POST /service/rest/v1/components



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/nexus_api.rb', line 71

def upload_maven_component(filename:, group_id:, artifact_id:, version:, repository: nil, tag: nil)
  repository ||= @team_config.maven_repository
  parameters = {
    'maven2.groupId' => group_id,
    'maven2.artifactId' => artifact_id,
    'maven2.version' => version,
    'maven2.asset1' => File.open(filename, 'r'),
    'maven2.asset1.extension' => filename.split('.').last,
  }
  parameters['maven2.tag'] = tag if tag
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
end

#upload_npm_component(filename:, repository: nil, tag: nil) ⇒ Object



84
85
86
87
88
89
90
91
# File 'lib/nexus_api.rb', line 84

def upload_npm_component(filename:, repository: nil, tag: nil)
  repository ||= @team_config.npm_repository
  parameters = {
    'npm.asset' => File.open(filename, 'r'),
  }
  parameters['npm.tag'] = tag if tag
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
end

#upload_pypi_component(filename:, repository: nil, tag: nil) ⇒ Object



93
94
95
96
97
98
99
100
# File 'lib/nexus_api.rb', line 93

def upload_pypi_component(filename:, repository: nil, tag: nil)
  repository ||= @team_config.pypi_repository
  parameters = {
    'pypi.asset' => File.open(filename, 'r'),
  }
  parameters['pypi.tag'] = tag if tag
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
end

#upload_raw_component(filename:, directory:, repository: nil, tag: nil) ⇒ Object



102
103
104
105
106
107
108
109
110
111
# File 'lib/nexus_api.rb', line 102

def upload_raw_component(filename:, directory:, repository: nil, tag: nil)
  repository ||= @team_config.raw_repository
  parameters = {
    'raw.directory' => directory,
    'raw.asset1' => File.open(filename, 'r'),
    'raw.asset1.filename' => filename.split('/').last,
  }
  parameters['raw.tag'] = tag if tag
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
end

#upload_rubygems_component(filename:, repository: nil, tag: nil) ⇒ Object



113
114
115
116
117
118
119
120
# File 'lib/nexus_api.rb', line 113

def upload_rubygems_component(filename:, repository: nil, tag: nil)
  repository ||= @team_config.rubygems_repository
  parameters = {
    'rubygems.asset' => File.open(filename, 'r'),
  }
  parameters['rubygems.tag'] = tag if tag
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
end

#upload_script(filename:) ⇒ Object

POST /service/rest/v1/script



202
203
204
205
# File 'lib/nexus_api.rb', line 202

def upload_script(filename:)
  file = File.read(filename)
  @connection.post(endpoint: "script", parameters: file)
end

#upload_yum_component(filename:, directory:, repository: nil, tag: nil) ⇒ Object



122
123
124
125
126
127
128
129
130
131
# File 'lib/nexus_api.rb', line 122

def upload_yum_component(filename:, directory:, repository: nil, tag: nil)
  repository ||= @team_config.yum_repository
  parameters = {
    'yum.directory' => directory,
    'yum.asset' => File.open(filename, 'r'),
    'yum.asset.filename' => filename.split('/').last,
  }
  parameters['yum.tag'] = tag if tag
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
end