open-build-service-api 0.1.0 → 0.2.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 +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/collections/abstract_collection.rb +27 -0
- data/lib/collections/packages_collection.rb +32 -0
- data/lib/connection.rb +6 -3
- data/lib/exception.rb +3 -1
- data/lib/models/package.rb +48 -0
- data/lib/models/project.rb +27 -3
- data/lib/open-build-service-api.rb +5 -0
- data/lib/version.rb +2 -2
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c5e147324f417fe00b366de7fbf147ba8226703afa23629694849d3432d1aea
|
4
|
+
data.tar.gz: 96295d4f01c7f1988e1c491977d96f45a749abab67cb8559238cb3ef63afae1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef3d73d904f39553846c60741c94aa52e3910140ba17ed352d686482e843aee016229aa20817bcb5f8155a889378e3783cd1e06787946c9d67a9e0339a288090
|
7
|
+
data.tar.gz: 57d6e4b7f432b578a8deb7988ddacddd3a718da08390074fa773e6264cacb071adc1163f8481236c460212116c5605fd98c2ae9b4bd813d05994b071cd2d0ae8
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## Version: 0.2.0 (alpha)
|
2
|
+
|
3
|
+
- Added `#public_key` method to `Project` model to retrieve a project's public key
|
4
|
+
- Added `#delete!` method to `Package` model to allow deletion of packages
|
5
|
+
- Added 'Collections' system to act on a dataset like an Array and use API methods as well
|
6
|
+
- Added `#rebuild!` method to `Package` model to allow rebuilding of packages
|
7
|
+
- Added `#meta` method to `Project` model to obtain a project's meta config file
|
8
|
+
- Added `#meta` method to `Package` model to obtain the meta definition of a package
|
9
|
+
- Added `#reload!` method to `Package` model to reload the cached data of a package
|
10
|
+
- Added `#title` method to `Package` model to obtain the title of a package
|
11
|
+
- Added `#description` method to `Package` model to obtain the description of a package
|
12
|
+
- Improve output of `#inspect` for `Package` model instances
|
13
|
+
|
1
14
|
## Version: 0.1.0 (alpha)
|
2
15
|
|
3
16
|
- Exception `RemoteAPIError` does now store the `error_code` and `error_summary` if it is available
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module OpenBuildServiceAPI
|
2
|
+
class AbstractCollection
|
3
|
+
include Enumerable
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
def_delegators :@data, :each, :count
|
7
|
+
|
8
|
+
def inspect
|
9
|
+
count = 1
|
10
|
+
output = '['
|
11
|
+
|
12
|
+
@data.each do |item|
|
13
|
+
if count == 30
|
14
|
+
output += item.to_s
|
15
|
+
output += ", ..." if @data.count > 30
|
16
|
+
|
17
|
+
break
|
18
|
+
else
|
19
|
+
output += "#{item}, "
|
20
|
+
count += 1
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
output += ']'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module OpenBuildServiceAPI
|
2
|
+
class PackagesCollection < AbstractCollection
|
3
|
+
def initialize(params = {})
|
4
|
+
raise ArgumentError.new('The dataset needs to be provided as an Array.') if params[:data] && !params[:data].is_a?(Array)
|
5
|
+
|
6
|
+
@connection = params[:connection]
|
7
|
+
@project = params[:project]
|
8
|
+
@data = params[:data] ? params[:data] : []
|
9
|
+
end
|
10
|
+
|
11
|
+
def exists?(name)
|
12
|
+
!!find(name)
|
13
|
+
end
|
14
|
+
|
15
|
+
def find(name)
|
16
|
+
begin
|
17
|
+
package_data = Nokogiri::XML(@connection.send_request(:get, "/source/#{CGI.escape(@project.name)}/#{name}").body)
|
18
|
+
Package.new(name: package_data.root.attr('name'), connection: @connection, project: @project)
|
19
|
+
rescue RequestError => err
|
20
|
+
return if err.error_code == 'unknown_package'
|
21
|
+
raise
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def find!(name)
|
26
|
+
package = find(name)
|
27
|
+
|
28
|
+
raise PackageNotFoundError.new("Package '#{name}' does not exist in project '#{@project.name}'.") unless package
|
29
|
+
package
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/connection.rb
CHANGED
@@ -47,6 +47,7 @@ module OpenBuildServiceAPI
|
|
47
47
|
request_method.basic_auth(@username, @password)
|
48
48
|
request_method.body = request_body if request_body
|
49
49
|
|
50
|
+
puts "[DEBUG] #{uri.to_s}" if ENV['OBS_API_LIBRARY_DEBUG']
|
50
51
|
response = request.request(request_method)
|
51
52
|
|
52
53
|
raise InternalServerError.new(response) if response.is_a?(Net::HTTPInternalServerError)
|
@@ -82,11 +83,13 @@ module OpenBuildServiceAPI
|
|
82
83
|
|
83
84
|
if values[index].is_a?(Array)
|
84
85
|
values[index].each do |array_value|
|
85
|
-
|
86
|
-
|
86
|
+
if array_value
|
87
|
+
formatted_params += '&' if formatted_params[-1] != '&' && formatted_params.length > 0
|
88
|
+
formatted_params += "#{CGI.escape(param.to_s)}[]=#{CGI.escape(array_value.to_s)}"
|
89
|
+
end
|
87
90
|
end
|
88
91
|
else
|
89
|
-
formatted_params += "#{CGI.escape(param.to_s)}=#{CGI.escape(values[index].to_s)}"
|
92
|
+
formatted_params += "#{CGI.escape(param.to_s)}=#{CGI.escape(values[index].to_s)}" if values[index]
|
90
93
|
end
|
91
94
|
end
|
92
95
|
|
data/lib/exception.rb
CHANGED
@@ -36,8 +36,10 @@ module OpenBuildServiceAPI
|
|
36
36
|
class ProjectCreationFailedError < APIError; end
|
37
37
|
class ProjectDeletionPermissionError < APIError; end
|
38
38
|
class ProjectAlreadyExistsError < APIError; end
|
39
|
-
class PackageAlreadyExistsError < APIError; end
|
40
39
|
class TargetProjectPermissionError < APIError; end
|
40
|
+
class PackageDeletionPermissionError < APIError; end
|
41
|
+
class PackageAlreadyExistsError < APIError; end
|
42
|
+
class PackageNotFoundError < APIError; end
|
41
43
|
|
42
44
|
# library specific exceptions
|
43
45
|
class GeneralError < Exception; end
|
data/lib/models/package.rb
CHANGED
@@ -12,5 +12,53 @@ module OpenBuildServiceAPI
|
|
12
12
|
def to_s
|
13
13
|
@name
|
14
14
|
end
|
15
|
+
|
16
|
+
def title
|
17
|
+
title = meta.xpath('//package/title')
|
18
|
+
title.empty? ? nil : title[0].text
|
19
|
+
end
|
20
|
+
|
21
|
+
def description
|
22
|
+
description = meta.xpath('//package/description')
|
23
|
+
description.empty? ? nil : description[0].text
|
24
|
+
end
|
25
|
+
|
26
|
+
def meta(opts = {})
|
27
|
+
if !@cached_meta || @meta_reload
|
28
|
+
@cached_meta = @connection.send_request(:get, "/source/#{CGI.escape(@project.name)}/#{CGI.escape(@name)}/_meta").body
|
29
|
+
@meta_reload = false
|
30
|
+
end
|
31
|
+
|
32
|
+
if opts[:no_parse]
|
33
|
+
@cached_meta
|
34
|
+
else
|
35
|
+
Nokogiri::XML(@cached_meta)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def inspect
|
40
|
+
"#<#{self.class.name}:#{"0x00%x" % (object_id << 1)} @name=\"#{@name}\", @project=\"#{@project.name}\">"
|
41
|
+
end
|
42
|
+
|
43
|
+
def rebuild!(repository=nil, arch=nil)
|
44
|
+
@connection.send_request(:post, "/build/#{CGI.escape(@project.name)}", cmd: :rebuild, package: @name, repository: repository, arch: arch)
|
45
|
+
true
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete!(message=nil)
|
49
|
+
begin
|
50
|
+
@connection.send_request(:delete, "/source/#{CGI.escape(@project.name)}/#{CGI.escape(@name)}", comment: message)
|
51
|
+
rescue RequestError => err
|
52
|
+
raise PackageDeletionPermissionError.new("No permission to delete package '#{@name}' in project " \
|
53
|
+
"'#{@project.name}'.") if err.error_code == 'delete_package_no_permission'
|
54
|
+
raise
|
55
|
+
end
|
56
|
+
|
57
|
+
true
|
58
|
+
end
|
59
|
+
|
60
|
+
def reload!
|
61
|
+
@meta_reload = true
|
62
|
+
end
|
15
63
|
end
|
16
64
|
end
|
data/lib/models/project.rb
CHANGED
@@ -12,6 +12,19 @@ module OpenBuildServiceAPI
|
|
12
12
|
@name
|
13
13
|
end
|
14
14
|
|
15
|
+
def meta(opts = {})
|
16
|
+
if !@cached_meta || @meta_reload
|
17
|
+
@cached_meta = @connection.send_request(:get, "/source/#{CGI.escape(@name)}/_meta").body
|
18
|
+
@meta_reload = false
|
19
|
+
end
|
20
|
+
|
21
|
+
if opts[:no_parse]
|
22
|
+
@cached_meta
|
23
|
+
else
|
24
|
+
Nokogiri::XML(@cached_meta)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
15
28
|
def delete!(message=nil)
|
16
29
|
begin
|
17
30
|
@connection.send_request(:delete, "/source/#{CGI.escape(@name)}", comment: message)
|
@@ -26,14 +39,15 @@ module OpenBuildServiceAPI
|
|
26
39
|
def packages
|
27
40
|
return @cached_packages if @cached_packages && !@package_reload
|
28
41
|
@package_reload = false
|
29
|
-
|
42
|
+
|
43
|
+
collection_data = []
|
30
44
|
|
31
45
|
packages = Nokogiri::XML(@connection.send_request(:get, "/source/#{CGI.escape(@name)}").body)
|
32
46
|
packages.xpath('//entry').each do |package|
|
33
|
-
|
47
|
+
collection_data << Package.new(name: package.attr('name'), connection: @connection, project: self)
|
34
48
|
end
|
35
49
|
|
36
|
-
@cached_packages
|
50
|
+
@cached_packages = PackagesCollection.new(connection: @connection, project: self, data: collection_data)
|
37
51
|
end
|
38
52
|
|
39
53
|
def branch_package(source_project, source_package, package_name_after_branch=nil)
|
@@ -55,8 +69,18 @@ module OpenBuildServiceAPI
|
|
55
69
|
end
|
56
70
|
end
|
57
71
|
|
72
|
+
def public_key
|
73
|
+
@cached_public_key if @cached_public_key && !@public_key_reload
|
74
|
+
@public_key_reload = false
|
75
|
+
|
76
|
+
response = @connection.send_request(:get, "/source/#{CGI.escape(@name)}/_pubkey")
|
77
|
+
response.body
|
78
|
+
end
|
79
|
+
|
58
80
|
def reload!
|
59
81
|
@package_reload = true
|
82
|
+
@public_key_reload = true
|
83
|
+
@meta_reload = true
|
60
84
|
end
|
61
85
|
end
|
62
86
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'cgi'
|
2
2
|
require 'date'
|
3
|
+
require 'forwardable'
|
3
4
|
require 'net/http'
|
4
5
|
require 'nokogiri'
|
5
6
|
require_relative 'version'
|
@@ -10,6 +11,10 @@ require_relative 'connection'
|
|
10
11
|
require_relative 'api/about'
|
11
12
|
require_relative 'api/projects'
|
12
13
|
|
14
|
+
# Collections
|
15
|
+
require_relative 'collections/abstract_collection'
|
16
|
+
require_relative 'collections/packages_collection'
|
17
|
+
|
13
18
|
# Models
|
14
19
|
require_relative 'models/package'
|
15
20
|
require_relative 'models/project'
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: open-build-service-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Schnitzer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: date
|
@@ -30,6 +30,26 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 2.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: forwardable
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.2'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.2.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.2'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.2.0
|
33
53
|
- !ruby/object:Gem::Dependency
|
34
54
|
name: nokogiri
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,6 +90,26 @@ dependencies:
|
|
70
90
|
- - ">="
|
71
91
|
- !ruby/object:Gem::Version
|
72
92
|
version: 11.0.1
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rspec
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '3.8'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 3.8.0
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.8'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 3.8.0
|
73
113
|
description: The Open Build Service API wrapped into a Ruby gem.
|
74
114
|
email: webmaster@mschnitzer.de
|
75
115
|
executables: []
|
@@ -80,6 +120,8 @@ files:
|
|
80
120
|
- README.md
|
81
121
|
- lib/api/about.rb
|
82
122
|
- lib/api/projects.rb
|
123
|
+
- lib/collections/abstract_collection.rb
|
124
|
+
- lib/collections/packages_collection.rb
|
83
125
|
- lib/connection.rb
|
84
126
|
- lib/exception.rb
|
85
127
|
- lib/models/package.rb
|