artifactory 1.1.0 → 1.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/.travis.yml +11 -7
- data/CHANGELOG.md +18 -0
- data/README.md +25 -4
- data/Rakefile +5 -2
- data/artifactory.gemspec +0 -3
- data/lib/artifactory.rb +2 -4
- data/lib/artifactory/client.rb +210 -85
- data/lib/artifactory/configurable.rb +6 -1
- data/lib/artifactory/defaults.rb +52 -3
- data/lib/artifactory/errors.rb +21 -14
- data/lib/artifactory/resources/artifact.rb +132 -58
- data/lib/artifactory/resources/base.rb +120 -6
- data/lib/artifactory/resources/build.rb +2 -1
- data/lib/artifactory/resources/group.rb +5 -72
- data/lib/artifactory/resources/layout.rb +106 -0
- data/lib/artifactory/resources/repository.rb +62 -114
- data/lib/artifactory/resources/system.rb +5 -1
- data/lib/artifactory/resources/user.rb +5 -79
- data/lib/artifactory/util.rb +8 -2
- data/lib/artifactory/version.rb +1 -1
- data/spec/integration/resources/layout_spec.rb +22 -0
- data/spec/integration/resources/repository_spec.rb +7 -0
- data/spec/integration/resources/system_spec.rb +4 -4
- data/spec/support/api_server/repository_endpoints.rb +5 -0
- data/spec/support/api_server/system_endpoints.rb +18 -0
- data/spec/unit/client_spec.rb +17 -98
- data/spec/unit/resources/artifact_spec.rb +99 -13
- data/spec/unit/resources/build_spec.rb +1 -1
- data/spec/unit/resources/group_spec.rb +1 -1
- data/spec/unit/resources/layout_spec.rb +61 -0
- data/spec/unit/resources/repository_spec.rb +31 -47
- data/spec/unit/resources/system_spec.rb +4 -2
- data/spec/unit/resources/user_spec.rb +1 -1
- metadata +16 -40
- data/locales/en.yml +0 -27
|
@@ -25,7 +25,7 @@ module Artifactory
|
|
|
25
25
|
|
|
26
26
|
context 'when the system has no builds' do
|
|
27
27
|
it 'returns an empty array' do
|
|
28
|
-
client.stub(:get).and_raise(Error::
|
|
28
|
+
client.stub(:get).and_raise(Error::HTTPError.new('status' => 404))
|
|
29
29
|
expect(described_class.all).to be_empty
|
|
30
30
|
end
|
|
31
31
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Artifactory
|
|
4
|
+
describe Resource::Layout do
|
|
5
|
+
let(:client) { double(:client) }
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
Artifactory.stub(:client).and_return(client)
|
|
9
|
+
client.stub(:get).and_return(response) if defined?(response)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe '.all' do
|
|
13
|
+
doc = <<-XML
|
|
14
|
+
<config>
|
|
15
|
+
<repoLayouts>
|
|
16
|
+
<repoLayout>
|
|
17
|
+
<name>fake-layout</name>
|
|
18
|
+
</repoLayout>
|
|
19
|
+
</repoLayouts>
|
|
20
|
+
</config>
|
|
21
|
+
XML
|
|
22
|
+
let(:xml) do
|
|
23
|
+
REXML::Document.new(doc)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
before do
|
|
27
|
+
Resource::System.stub(:configuration).and_return(xml)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns the layouts' do
|
|
31
|
+
expect(described_class.all).to be_a(Array)
|
|
32
|
+
expect(described_class.all.first).to be_a(described_class)
|
|
33
|
+
expect(described_class.all.first.name).to eq('fake-layout')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe '.find' do
|
|
38
|
+
doc = <<-XML
|
|
39
|
+
<config>
|
|
40
|
+
<repoLayouts>
|
|
41
|
+
<repoLayout>
|
|
42
|
+
<name>found-layout</name>
|
|
43
|
+
</repoLayout>
|
|
44
|
+
</repoLayouts>
|
|
45
|
+
</config>
|
|
46
|
+
XML
|
|
47
|
+
let(:xml) do
|
|
48
|
+
REXML::Document.new(doc)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
before do
|
|
52
|
+
Resource::System.stub(:configuration).and_return(xml)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'returns the found layout' do
|
|
56
|
+
expect(described_class.find('found-layout')).to be_a(described_class)
|
|
57
|
+
expect(described_class.find('found-layout').name).to eq('found-layout')
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -18,9 +18,9 @@ module Artifactory
|
|
|
18
18
|
]
|
|
19
19
|
end
|
|
20
20
|
before do
|
|
21
|
-
described_class.stub(:find).with(
|
|
22
|
-
described_class.stub(:find).with(
|
|
23
|
-
described_class.stub(:find).with(
|
|
21
|
+
described_class.stub(:find).with('a', client: client).and_return('a')
|
|
22
|
+
described_class.stub(:find).with('b', client: client).and_return('b')
|
|
23
|
+
described_class.stub(:find).with('c', client: client).and_return('c')
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
it 'gets /api/repositories' do
|
|
@@ -38,7 +38,7 @@ module Artifactory
|
|
|
38
38
|
|
|
39
39
|
it 'gets /api/repositories/#{name}' do
|
|
40
40
|
expect(client).to receive(:get).with('/api/repositories/libs-release-local').once
|
|
41
|
-
described_class.find(
|
|
41
|
+
described_class.find('libs-release-local')
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
@@ -68,7 +68,7 @@ module Artifactory
|
|
|
68
68
|
}
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
-
it 'creates a new
|
|
71
|
+
it 'creates a new instance' do
|
|
72
72
|
instance = described_class.from_hash(hash)
|
|
73
73
|
expect(instance.blacked_out).to be_false
|
|
74
74
|
expect(instance.description).to eq('Local repository for in-house libraries')
|
|
@@ -81,14 +81,27 @@ module Artifactory
|
|
|
81
81
|
expect(instance.maximum_unique_snapshots).to eq(0)
|
|
82
82
|
expect(instance.notes).to eq('')
|
|
83
83
|
expect(instance.property_sets).to eq(['artifactory'])
|
|
84
|
+
expect(instance.rclass).to eq('local')
|
|
84
85
|
expect(instance.snapshot_version_behavior).to eq('unique')
|
|
85
86
|
expect(instance.suppress_pom_checks).to be_false
|
|
86
|
-
expect(instance.type).to eq('local')
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
-
describe '#
|
|
90
|
+
describe '#save' do
|
|
91
91
|
let(:client) { double }
|
|
92
|
+
before do
|
|
93
|
+
subject.client = client
|
|
94
|
+
subject.key = 'libs-release-local'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'PUTS the file to the server' do
|
|
98
|
+
expect(client).to receive(:put).with('/api/repositories/libs-release-local', kind_of(String), kind_of(Hash))
|
|
99
|
+
subject.save
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#upload' do
|
|
104
|
+
let(:client) { double(put: {}) }
|
|
92
105
|
before do
|
|
93
106
|
subject.client = client
|
|
94
107
|
subject.key = 'libs-release-local'
|
|
@@ -96,8 +109,9 @@ module Artifactory
|
|
|
96
109
|
|
|
97
110
|
context 'when the artifact is a File' do
|
|
98
111
|
it 'PUTs the file to the server' do
|
|
99
|
-
file = double(
|
|
100
|
-
|
|
112
|
+
file = double(file)
|
|
113
|
+
File.stub(:new).and_return(file)
|
|
114
|
+
expect(client).to receive(:put).with('libs-release-local/remote/path', file, {})
|
|
101
115
|
|
|
102
116
|
subject.upload(file, '/remote/path')
|
|
103
117
|
end
|
|
@@ -105,10 +119,10 @@ module Artifactory
|
|
|
105
119
|
|
|
106
120
|
context 'when the artifact is a file path' do
|
|
107
121
|
it 'PUTs the file at the path to the server' do
|
|
108
|
-
file = double(
|
|
122
|
+
file = double(file)
|
|
109
123
|
path = '/fake/path'
|
|
110
124
|
File.stub(:new).with('/fake/path').and_return(file)
|
|
111
|
-
expect(client).to receive(:put).with('libs-release-local/remote/path',
|
|
125
|
+
expect(client).to receive(:put).with('libs-release-local/remote/path', file, {})
|
|
112
126
|
|
|
113
127
|
subject.upload(path, '/remote/path')
|
|
114
128
|
end
|
|
@@ -116,8 +130,9 @@ module Artifactory
|
|
|
116
130
|
|
|
117
131
|
context 'when matrix properties are given' do
|
|
118
132
|
it 'converts the hash into matrix properties' do
|
|
119
|
-
file = double(
|
|
120
|
-
|
|
133
|
+
file = double(file)
|
|
134
|
+
File.stub(:new).and_return(file)
|
|
135
|
+
expect(client).to receive(:put).with('libs-release-local;branch=master;user=Seth%20Vargo/remote/path', file, {})
|
|
121
136
|
|
|
122
137
|
subject.upload(file, '/remote/path',
|
|
123
138
|
branch: 'master',
|
|
@@ -129,46 +144,15 @@ module Artifactory
|
|
|
129
144
|
context 'when custom headers are given' do
|
|
130
145
|
it 'passes the headers to the client' do
|
|
131
146
|
headers = { 'Content-Type' => 'text/plain' }
|
|
132
|
-
file = double(
|
|
133
|
-
|
|
147
|
+
file = double(file)
|
|
148
|
+
File.stub(:new).and_return(file)
|
|
149
|
+
expect(client).to receive(:put).with('libs-release-local/remote/path', file, headers)
|
|
134
150
|
|
|
135
151
|
subject.upload(file, '/remote/path', {}, headers)
|
|
136
152
|
end
|
|
137
153
|
end
|
|
138
154
|
end
|
|
139
155
|
|
|
140
|
-
describe '#upload_with_checksum' do
|
|
141
|
-
it 'delegates to #upload' do
|
|
142
|
-
expect(subject).to receive(:upload).with(
|
|
143
|
-
'/local/file',
|
|
144
|
-
'/remote/path',
|
|
145
|
-
{ branch: 'master' },
|
|
146
|
-
{
|
|
147
|
-
'X-Checksum-Deploy' => true,
|
|
148
|
-
'X-Checksum-Sha1' => 'ABCD1234',
|
|
149
|
-
},
|
|
150
|
-
)
|
|
151
|
-
subject.upload_with_checksum('/local/file', '/remote/path',
|
|
152
|
-
'ABCD1234',
|
|
153
|
-
{ branch: 'master' },
|
|
154
|
-
)
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
describe '#upload_from_archive' do
|
|
159
|
-
it 'delegates to #upload' do
|
|
160
|
-
expect(subject).to receive(:upload).with(
|
|
161
|
-
'/local/file',
|
|
162
|
-
'/remote/path',
|
|
163
|
-
{},
|
|
164
|
-
{
|
|
165
|
-
'X-Explode-Archive' => true,
|
|
166
|
-
},
|
|
167
|
-
)
|
|
168
|
-
subject.upload_from_archive('/local/file', '/remote/path')
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
|
|
172
156
|
describe '#artifacts' do
|
|
173
157
|
before { subject.key = 'libs-release-local' }
|
|
174
158
|
|
|
@@ -38,7 +38,8 @@ module Artifactory
|
|
|
38
38
|
|
|
39
39
|
context 'when the system is not running' do
|
|
40
40
|
it 'returns false' do
|
|
41
|
-
client.stub(:get)
|
|
41
|
+
client.stub(:get)
|
|
42
|
+
.and_raise(Error::ConnectionError.new(Artifactory.endpoint))
|
|
42
43
|
expect(described_class.ping).to be_false
|
|
43
44
|
end
|
|
44
45
|
end
|
|
@@ -63,7 +64,8 @@ module Artifactory
|
|
|
63
64
|
before { client.stub(:post).and_return(response) }
|
|
64
65
|
|
|
65
66
|
it 'posts /api/system/configuration' do
|
|
66
|
-
|
|
67
|
+
headers = { 'Content-Type' => 'application/xml' }
|
|
68
|
+
expect(client).to receive(:post).with('/api/system/configuration', xml, headers).once
|
|
67
69
|
described_class.update_configuration(xml)
|
|
68
70
|
end
|
|
69
71
|
|
metadata
CHANGED
|
@@ -1,69 +1,41 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: artifactory
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Seth Vargo
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-02
|
|
11
|
+
date: 2014-06-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: httpclient
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ~>
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '2.3'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ~>
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '2.3'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: i18n
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ~>
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.5'
|
|
34
|
-
type: :runtime
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ~>
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0.5'
|
|
41
13
|
- !ruby/object:Gem::Dependency
|
|
42
14
|
name: bundler
|
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
|
44
16
|
requirements:
|
|
45
|
-
- -
|
|
17
|
+
- - ">="
|
|
46
18
|
- !ruby/object:Gem::Version
|
|
47
19
|
version: '0'
|
|
48
20
|
type: :development
|
|
49
21
|
prerelease: false
|
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
23
|
requirements:
|
|
52
|
-
- -
|
|
24
|
+
- - ">="
|
|
53
25
|
- !ruby/object:Gem::Version
|
|
54
26
|
version: '0'
|
|
55
27
|
- !ruby/object:Gem::Dependency
|
|
56
28
|
name: rake
|
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
|
58
30
|
requirements:
|
|
59
|
-
- -
|
|
31
|
+
- - ">="
|
|
60
32
|
- !ruby/object:Gem::Version
|
|
61
33
|
version: '0'
|
|
62
34
|
type: :development
|
|
63
35
|
prerelease: false
|
|
64
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
37
|
requirements:
|
|
66
|
-
- -
|
|
38
|
+
- - ">="
|
|
67
39
|
- !ruby/object:Gem::Version
|
|
68
40
|
version: '0'
|
|
69
41
|
description: A Ruby client for Artifactory
|
|
@@ -72,8 +44,8 @@ executables: []
|
|
|
72
44
|
extensions: []
|
|
73
45
|
extra_rdoc_files: []
|
|
74
46
|
files:
|
|
75
|
-
- .gitignore
|
|
76
|
-
- .travis.yml
|
|
47
|
+
- ".gitignore"
|
|
48
|
+
- ".travis.yml"
|
|
77
49
|
- CHANGELOG.md
|
|
78
50
|
- Gemfile
|
|
79
51
|
- LICENSE
|
|
@@ -91,16 +63,17 @@ files:
|
|
|
91
63
|
- lib/artifactory/resources/base.rb
|
|
92
64
|
- lib/artifactory/resources/build.rb
|
|
93
65
|
- lib/artifactory/resources/group.rb
|
|
66
|
+
- lib/artifactory/resources/layout.rb
|
|
94
67
|
- lib/artifactory/resources/plugin.rb
|
|
95
68
|
- lib/artifactory/resources/repository.rb
|
|
96
69
|
- lib/artifactory/resources/system.rb
|
|
97
70
|
- lib/artifactory/resources/user.rb
|
|
98
71
|
- lib/artifactory/util.rb
|
|
99
72
|
- lib/artifactory/version.rb
|
|
100
|
-
- locales/en.yml
|
|
101
73
|
- spec/integration/resources/artifact_spec.rb
|
|
102
74
|
- spec/integration/resources/build_spec.rb
|
|
103
75
|
- spec/integration/resources/group_spec.rb
|
|
76
|
+
- spec/integration/resources/layout_spec.rb
|
|
104
77
|
- spec/integration/resources/repository_spec.rb
|
|
105
78
|
- spec/integration/resources/system_spec.rb
|
|
106
79
|
- spec/integration/resources/user_spec.rb
|
|
@@ -119,6 +92,7 @@ files:
|
|
|
119
92
|
- spec/unit/resources/base_spec.rb
|
|
120
93
|
- spec/unit/resources/build_spec.rb
|
|
121
94
|
- spec/unit/resources/group_spec.rb
|
|
95
|
+
- spec/unit/resources/layout_spec.rb
|
|
122
96
|
- spec/unit/resources/plugin_spec.rb
|
|
123
97
|
- spec/unit/resources/repository_spec.rb
|
|
124
98
|
- spec/unit/resources/system_spec.rb
|
|
@@ -133,17 +107,17 @@ require_paths:
|
|
|
133
107
|
- lib
|
|
134
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
109
|
requirements:
|
|
136
|
-
- -
|
|
110
|
+
- - ">="
|
|
137
111
|
- !ruby/object:Gem::Version
|
|
138
112
|
version: '0'
|
|
139
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
114
|
requirements:
|
|
141
|
-
- -
|
|
115
|
+
- - ">="
|
|
142
116
|
- !ruby/object:Gem::Version
|
|
143
117
|
version: '0'
|
|
144
118
|
requirements: []
|
|
145
119
|
rubyforge_project:
|
|
146
|
-
rubygems_version: 2.2.
|
|
120
|
+
rubygems_version: 2.2.2
|
|
147
121
|
signing_key:
|
|
148
122
|
specification_version: 4
|
|
149
123
|
summary: Artifactory is a simple, lightweight Ruby client for interacting with the
|
|
@@ -152,6 +126,7 @@ test_files:
|
|
|
152
126
|
- spec/integration/resources/artifact_spec.rb
|
|
153
127
|
- spec/integration/resources/build_spec.rb
|
|
154
128
|
- spec/integration/resources/group_spec.rb
|
|
129
|
+
- spec/integration/resources/layout_spec.rb
|
|
155
130
|
- spec/integration/resources/repository_spec.rb
|
|
156
131
|
- spec/integration/resources/system_spec.rb
|
|
157
132
|
- spec/integration/resources/user_spec.rb
|
|
@@ -170,6 +145,7 @@ test_files:
|
|
|
170
145
|
- spec/unit/resources/base_spec.rb
|
|
171
146
|
- spec/unit/resources/build_spec.rb
|
|
172
147
|
- spec/unit/resources/group_spec.rb
|
|
148
|
+
- spec/unit/resources/layout_spec.rb
|
|
173
149
|
- spec/unit/resources/plugin_spec.rb
|
|
174
150
|
- spec/unit/resources/repository_spec.rb
|
|
175
151
|
- spec/unit/resources/system_spec.rb
|
data/locales/en.yml
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
en:
|
|
2
|
-
artifactory:
|
|
3
|
-
errors:
|
|
4
|
-
bad_request: >
|
|
5
|
-
The Artifactory server declined to server the URL `%{url}'. Here is
|
|
6
|
-
more information from the server:
|
|
7
|
-
|
|
8
|
-
%{body}
|
|
9
|
-
connection_error: >
|
|
10
|
-
The Artifactory server at `%{url}' threw an unexpected error. We do not
|
|
11
|
-
have any additional information to offer, sorry. Here is what the server
|
|
12
|
-
said:
|
|
13
|
-
|
|
14
|
-
%{body}
|
|
15
|
-
forbidden: >
|
|
16
|
-
You are not permitted to access `%{url}'. The Artifactory server
|
|
17
|
-
responded with a 403 Forbidden error.
|
|
18
|
-
method_not_allowed: >
|
|
19
|
-
That HTTP method is not allowed!
|
|
20
|
-
not_found: >
|
|
21
|
-
The requested URL `%{url}' does not exist on the Artifactory server.
|
|
22
|
-
Please confirm you have spelled everything correctly.
|
|
23
|
-
unauthorized: >
|
|
24
|
-
You are not authorized to access `%{url}'. The Artifactory server
|
|
25
|
-
responded with a 401 Unauthorzed. The requested endpoint requires
|
|
26
|
-
authentication - try adding basic authentication to your request and
|
|
27
|
-
try again.
|