nexus_cli 1.0.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -1
- data/.travis.yml +5 -0
- data/Gemfile +40 -0
- data/Guardfile +27 -0
- data/README.md +20 -23
- data/Thorfile +66 -0
- data/VERSION +1 -1
- data/{pro → features/pro}/nexus_custom_metadata.feature +0 -0
- data/{pro → features/pro}/nexus_pro.feature +0 -0
- data/features/support/env.rb +41 -32
- data/lib/nexus_cli.rb +26 -10
- data/lib/nexus_cli/base_remote.rb +32 -0
- data/lib/nexus_cli/configuration.rb +24 -5
- data/lib/nexus_cli/connection.rb +81 -0
- data/lib/nexus_cli/mixins/artifact_actions.rb +186 -0
- data/lib/nexus_cli/mixins/global_settings_actions.rb +64 -0
- data/lib/nexus_cli/mixins/logging_actions.rb +45 -0
- data/lib/nexus_cli/{nexus_pro_remote.rb → mixins/pro/custom_metadata_actions.rb} +5 -199
- data/lib/nexus_cli/mixins/pro/smart_proxy_actions.rb +214 -0
- data/lib/nexus_cli/mixins/repository_actions.rb +245 -0
- data/lib/nexus_cli/mixins/user_actions.rb +125 -0
- data/lib/nexus_cli/remote/oss_remote.rb +11 -0
- data/lib/nexus_cli/remote/pro_remote.rb +59 -0
- data/lib/nexus_cli/remote_factory.rb +24 -0
- data/lib/nexus_cli/tasks.rb +3 -3
- data/spec/fixtures/nexus.config +4 -0
- data/spec/spec_helper.rb +14 -2
- data/spec/{configuration_spec.rb → unit/nexus_cli/configuration_spec.rb} +0 -0
- data/spec/{oss_remote_spec.rb → unit/nexus_cli/oss_remote_spec.rb} +15 -5
- data/spec/{pro_remote_spec.rb → unit/nexus_cli/pro_remote_spec.rb} +6 -1
- metadata +32 -17
- data/Gemfile.lock +0 -65
- data/lib/nexus_cli/kernel.rb +0 -33
- data/lib/nexus_cli/nexus_oss_remote.rb +0 -636
- data/lib/nexus_cli/nexus_remote_factory.rb +0 -65
@@ -0,0 +1,214 @@
|
|
1
|
+
module NexusCli
|
2
|
+
# @author Kyle Allan <kallan@riotgames.com>
|
3
|
+
module SmartProxyActions
|
4
|
+
|
5
|
+
# Gets Smart Proxy related information about the
|
6
|
+
# given [repository_id].
|
7
|
+
#
|
8
|
+
# @param repository_id [String] the repository to get information about
|
9
|
+
#
|
10
|
+
# @return [String] a String of XML about the given repository
|
11
|
+
def get_pub_sub(repository_id)
|
12
|
+
response = nexus.get(nexus_url("service/local/smartproxy/pub-sub/#{repository_id}"))
|
13
|
+
case response.status
|
14
|
+
when 200
|
15
|
+
return response.content
|
16
|
+
else
|
17
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Enables artifact publishing for the given [repository_id].
|
22
|
+
#
|
23
|
+
# @param repository_id [String] the repository to enable artifact publishing on
|
24
|
+
#
|
25
|
+
# @return [Boolean] true if the artifact is now publishing artifacts, false otherwise
|
26
|
+
def enable_artifact_publish(repository_id)
|
27
|
+
params = {:repositoryId => repository_id}
|
28
|
+
params[:publish] = true
|
29
|
+
artifact_publish(repository_id, params)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Disables artifact publishing for the given [repository_id].
|
33
|
+
#
|
34
|
+
# @param repository_id [String] the repository to disable artifact publishing on
|
35
|
+
#
|
36
|
+
# @return [Boolean] true if the artifact is now disabled for publishing artifacts, false otherwise
|
37
|
+
def disable_artifact_publish(repository_id)
|
38
|
+
params = {:repositoryId => repository_id}
|
39
|
+
params[:publish] = false
|
40
|
+
artifact_publish(repository_id, params)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Enables artifact subscribing for the given [repository_id].
|
44
|
+
#
|
45
|
+
# @param repository_id [String] the repository to enable artifact subscribe on
|
46
|
+
# @param preemptive_fetch [Boolean] true if the repository should prefetch artifacts, false otherwise
|
47
|
+
#
|
48
|
+
# @return [Boolean] true if the repository is now subscribing, false otherwise
|
49
|
+
def enable_artifact_subscribe(repository_id, preemptive_fetch)
|
50
|
+
raise NotProxyRepositoryException.new(repository_id) unless Nokogiri::XML(get_repository_info(repository_id)).xpath("/repository/data/repoType").first.content == "proxy"
|
51
|
+
|
52
|
+
params = {:repositoryId => repository_id}
|
53
|
+
params[:subscribe] = true
|
54
|
+
params[:preemptiveFetch] = preemptive_fetch
|
55
|
+
artifact_subscribe(repository_id, params)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Disables artifact subscribing for the given [repository_id].
|
59
|
+
#
|
60
|
+
# @param repository_id [String] the repository to disable artifact subscribing on
|
61
|
+
#
|
62
|
+
# @return [Boolean] true if the repository is disabled, false otherwise
|
63
|
+
def disable_artifact_subscribe(repository_id)
|
64
|
+
raise NotProxyRepositoryException.new(repository_id) unless Nokogiri::XML(get_repository_info(repository_id)).xpath("/repository/data/repoType").first.content == "proxy"
|
65
|
+
|
66
|
+
params = {:repositoryId => repository_id}
|
67
|
+
params[:subscribe] = false
|
68
|
+
artifact_subscribe(repository_id, params)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Enables Smart Proxy on the Nexus server.
|
72
|
+
#
|
73
|
+
# @param host=nil [String] an optional host to listen on for Smart Proxy
|
74
|
+
# @param port=nil [Fixnum] an optional port to listen on for Smart Proxy
|
75
|
+
#
|
76
|
+
# @return [Boolean] true if Smart Proxy is enabled, false otherwise
|
77
|
+
def enable_smart_proxy(host=nil, port=nil)
|
78
|
+
params = {:enabled => true}
|
79
|
+
params[:host] = host unless host.nil?
|
80
|
+
params[:port] = port unless port.nil?
|
81
|
+
smart_proxy(params)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Disables Smart Proxy on the Nexus server.
|
85
|
+
#
|
86
|
+
#
|
87
|
+
# @return [Boolean] true if Smart Proxy is disabled, false otherwise
|
88
|
+
def disable_smart_proxy
|
89
|
+
params = {:enabled => false}
|
90
|
+
smart_proxy(params)
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
# Gets the current Smart Proxy settings of the Nexus server.
|
95
|
+
#
|
96
|
+
#
|
97
|
+
# @return [String] a String of JSON with information about Smart Proxy
|
98
|
+
def get_smart_proxy_settings
|
99
|
+
response = nexus.get(nexus_url("service/local/smartproxy/settings"), :header => DEFAULT_ACCEPT_HEADER)
|
100
|
+
case response.status
|
101
|
+
when 200
|
102
|
+
return response.content
|
103
|
+
else
|
104
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# @deprecated this method might not be used.
|
109
|
+
def get_smart_proxy_key
|
110
|
+
response = nexus.get(nexus_url("service/local/smartproxy/settings"), :header => DEFAULT_ACCEPT_HEADER)
|
111
|
+
case response.status
|
112
|
+
when 200
|
113
|
+
return response.content
|
114
|
+
else
|
115
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Adds a trusted key to Nexus for use with Smart Proxy. By default,
|
120
|
+
# the [certificate] parameter will point to a path of a certificate file. As an
|
121
|
+
# alternative, call with path=false to pass a certificate in directly.
|
122
|
+
#
|
123
|
+
# @param certificate [String] a path to or the actual certificate String
|
124
|
+
# @param description [String] a brief description of the key; usually the name of the server the key belongs to
|
125
|
+
# @param path=true [Boolean] by default uses [certificate] as a path to a file, when false, [certificate] is treated as a String
|
126
|
+
#
|
127
|
+
# @return [Boolean] true when the certificate is added, false otherwise
|
128
|
+
def add_trusted_key(certificate, description, path=true)
|
129
|
+
params = {:description => description}
|
130
|
+
params[:certificate] = path ? File.read(File.expand_path(certificate)) : certificate
|
131
|
+
response = nexus.post(nexus_url("service/local/smartproxy/trusted-keys"), :body => create_add_trusted_key_json(params), :header => DEFAULT_CONTENT_TYPE_HEADER)
|
132
|
+
case response.status
|
133
|
+
when 201
|
134
|
+
return true
|
135
|
+
else
|
136
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# Deletes a trusted key from the Nexus server.
|
141
|
+
#
|
142
|
+
# @param key_id [String] the key to delete
|
143
|
+
#
|
144
|
+
# @return [Boolean] true if the key has been deleted, false otherwise
|
145
|
+
def delete_trusted_key(key_id)
|
146
|
+
response = nexus.delete(nexus_url("service/local/smartproxy/trusted-keys/#{key_id}"))
|
147
|
+
case response.status
|
148
|
+
when 204
|
149
|
+
return true
|
150
|
+
else
|
151
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# Gets information about the current list of trusted keys
|
156
|
+
# in the Nexus server. A large amount of JSON will be printed
|
157
|
+
# because this resource returns the actual certificates.
|
158
|
+
#
|
159
|
+
# @return [String] a String of JSON from Nexus about the current list of trusted keys
|
160
|
+
def get_trusted_keys
|
161
|
+
response = nexus.get(nexus_url("service/local/smartproxy/trusted-keys"), :header => DEFAULT_ACCEPT_HEADER)
|
162
|
+
case response.status
|
163
|
+
when 200
|
164
|
+
return response.content
|
165
|
+
else
|
166
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
private
|
171
|
+
|
172
|
+
def create_add_trusted_key_json(params)
|
173
|
+
JSON.dump(:data => params)
|
174
|
+
end
|
175
|
+
|
176
|
+
def create_smart_proxy_settings_json(params)
|
177
|
+
JSON.dump(:data => params)
|
178
|
+
end
|
179
|
+
|
180
|
+
def create_pub_sub_json(params)
|
181
|
+
JSON.dump(:data => params)
|
182
|
+
end
|
183
|
+
|
184
|
+
def artifact_subscribe(repository_id, params)
|
185
|
+
response = nexus.put(nexus_url("service/local/smartproxy/pub-sub/#{sanitize_for_id(repository_id)}"), :body => create_pub_sub_json(params), :header => DEFAULT_CONTENT_TYPE_HEADER)
|
186
|
+
case response.status
|
187
|
+
when 200
|
188
|
+
return true
|
189
|
+
else
|
190
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
def artifact_publish(repository_id, params)
|
195
|
+
response = nexus.put(nexus_url("service/local/smartproxy/pub-sub/#{sanitize_for_id(repository_id)}"), :body => create_pub_sub_json(params), :header => DEFAULT_CONTENT_TYPE_HEADER)
|
196
|
+
case response.status
|
197
|
+
when 200
|
198
|
+
return true
|
199
|
+
else
|
200
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def smart_proxy(params)
|
205
|
+
response = nexus.put(nexus_url("service/local/smartproxy/settings"), :body => create_smart_proxy_settings_json(params), :header => DEFAULT_CONTENT_TYPE_HEADER)
|
206
|
+
case response.status
|
207
|
+
when 200
|
208
|
+
return true
|
209
|
+
else
|
210
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
@@ -0,0 +1,245 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module NexusCli
|
4
|
+
# @author Kyle Allan <kallan@riotgames.com>
|
5
|
+
module RepositoryActions
|
6
|
+
|
7
|
+
# Creates a repository that the Nexus uses to hold artifacts.
|
8
|
+
#
|
9
|
+
# @param name [String] the name of the repository to create
|
10
|
+
# @param proxy [Boolean] true if this is a proxy repository
|
11
|
+
# @param url [String] the url for the proxy repository to point to
|
12
|
+
# @param id [String] the id of repository
|
13
|
+
# @param policy [String] repository policy (RELEASE|SNAPSHOT)
|
14
|
+
# @param provider [String] repo provider (maven2 by default)
|
15
|
+
#
|
16
|
+
# @return [Boolean] returns true on success
|
17
|
+
def create_repository(name, proxy, url, id, policy, provider)
|
18
|
+
json = if proxy
|
19
|
+
create_proxy_repository_json(name, url, id, policy, provider)
|
20
|
+
else
|
21
|
+
create_hosted_repository_json(name, id, policy, provider)
|
22
|
+
end
|
23
|
+
response = nexus.post(nexus_url("service/local/repositories"), :body => json, :header => DEFAULT_CONTENT_TYPE_HEADER)
|
24
|
+
case response.status
|
25
|
+
when 201
|
26
|
+
return true
|
27
|
+
when 400
|
28
|
+
raise CreateRepsitoryException.new(response.content)
|
29
|
+
else
|
30
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Deletes the given repository
|
35
|
+
#
|
36
|
+
# @param name [String] the name of the repositroy to delete, transformed
|
37
|
+
# into an id.
|
38
|
+
#
|
39
|
+
# @return [Boolean] true if the repository is deleted, false otherwise.
|
40
|
+
def delete_repository(name)
|
41
|
+
response = nexus.delete(nexus_url("service/local/repositories/#{sanitize_for_id(name)}"))
|
42
|
+
case response.status
|
43
|
+
when 204
|
44
|
+
return true
|
45
|
+
when 404
|
46
|
+
raise RepositoryDoesNotExistException
|
47
|
+
else
|
48
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Find information about the repository with the given
|
53
|
+
# [name].
|
54
|
+
#
|
55
|
+
# @param name [String] the name of the repository, transformed
|
56
|
+
# into an id.
|
57
|
+
#
|
58
|
+
# @return [String] A String of XML with information about the desired
|
59
|
+
# repository.
|
60
|
+
def get_repository_info(name)
|
61
|
+
response = nexus.get(nexus_url("service/local/repositories/#{sanitize_for_id(name)}"))
|
62
|
+
case response.status
|
63
|
+
when 200
|
64
|
+
return response.content
|
65
|
+
when 404
|
66
|
+
raise RepositoryNotFoundException
|
67
|
+
when 503
|
68
|
+
raise CouldNotConnectToNexusException
|
69
|
+
else
|
70
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Creates a group repository with the given name.
|
75
|
+
#
|
76
|
+
# @param name [String] the name to give the new repository
|
77
|
+
# @param id [String] an alternative id to use for the new repository
|
78
|
+
# @param provider [String] the type of Maven provider for this repository
|
79
|
+
#
|
80
|
+
# @return [Boolean] true if the group repository is created, false otherwise
|
81
|
+
def create_group_repository(name, id, provider)
|
82
|
+
response = nexus.post(nexus_url("service/local/repo_groups"), :body => create_group_repository_json(name, id, provider), :header => DEFAULT_CONTENT_TYPE_HEADER)
|
83
|
+
case response.status
|
84
|
+
when 201
|
85
|
+
return true
|
86
|
+
when 400
|
87
|
+
raise CreateRepsitoryException.new(response.content)
|
88
|
+
else
|
89
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Gets information about the given group repository with
|
94
|
+
# the given [group_id].
|
95
|
+
#
|
96
|
+
# @param group_id [String] the id of the group repository to find
|
97
|
+
#
|
98
|
+
# @return [String] a JSON String of information about the given group repository
|
99
|
+
def get_group_repository(group_id)
|
100
|
+
response = nexus.get(nexus_url("service/local/repo_groups/#{sanitize_for_id(group_id)}"), :header => DEFAULT_ACCEPT_HEADER)
|
101
|
+
case response.status
|
102
|
+
when 200
|
103
|
+
return response.content
|
104
|
+
when 404
|
105
|
+
raise RepositoryNotFoundException
|
106
|
+
else
|
107
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Checks if a the given [repository_to_check] is a member
|
112
|
+
# of the given group repository - [group_ip].
|
113
|
+
#
|
114
|
+
# @param group_id [String] the group repository to look in
|
115
|
+
# @param repository_to_check [String] the repository that might be a member of the group
|
116
|
+
#
|
117
|
+
# @return [Boolean] true if the [repository_to_check] is a member of group repository, false otherwise
|
118
|
+
def repository_in_group?(group_id, repository_to_check)
|
119
|
+
group_repository = JSON.parse(get_group_repository(group_id))
|
120
|
+
repositories_in_group = group_repository["data"]["repositories"]
|
121
|
+
|
122
|
+
repositories_in_group.find{|repository| repository["id"] == sanitize_for_id(repository_to_check)}
|
123
|
+
end
|
124
|
+
|
125
|
+
# Adds the given [repository_to_add_id] to the given group repository,
|
126
|
+
# [group_id].
|
127
|
+
#
|
128
|
+
# @param group_id [String] the group repository to add to
|
129
|
+
# @param repository_to_add_id [String] the repository to added to the group
|
130
|
+
#
|
131
|
+
# @return [Boolean] true if the repository is successfully added, false otherwise
|
132
|
+
def add_to_group_repository(group_id, repository_to_add_id)
|
133
|
+
raise RepositoryInGroupException if repository_in_group?(group_id, repository_to_add_id)
|
134
|
+
response = nexus.put(nexus_url("service/local/repo_groups/#{sanitize_for_id(group_id)}"), :body => create_add_to_group_repository_json(group_id, repository_to_add_id), :header => DEFAULT_CONTENT_TYPE_HEADER)
|
135
|
+
case response.status
|
136
|
+
when 200
|
137
|
+
return true
|
138
|
+
when 400
|
139
|
+
raise RepositoryNotFoundException
|
140
|
+
else
|
141
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Removes the given [repository_to_remove_id] from the group repository,
|
146
|
+
# [group_id].
|
147
|
+
#
|
148
|
+
# @param group_id [String] the group repository to remove from
|
149
|
+
# @param repository_to_remove_id [String] the repository to remove from the group
|
150
|
+
#
|
151
|
+
# @return [Boolean] true if the repisotory is successfully remove, false otherwise
|
152
|
+
def remove_from_group_repository(group_id, repository_to_remove_id)
|
153
|
+
raise RepositoryNotInGroupException unless repository_in_group?(group_id, repository_to_remove_id)
|
154
|
+
response = nexus.put(nexus_url("service/local/repo_groups/#{sanitize_for_id(group_id)}"), :body => create_remove_from_group_repository_json(group_id, repository_to_remove_id), :header => DEFAULT_CONTENT_TYPE_HEADER)
|
155
|
+
case response.status
|
156
|
+
when 200
|
157
|
+
return true
|
158
|
+
else
|
159
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# Deletes the given group repository.
|
164
|
+
#
|
165
|
+
# @param group_id [String] the group repository to delete
|
166
|
+
#
|
167
|
+
# @return [Boolean] true if the group repository is deleted, false otherwise
|
168
|
+
def delete_group_repository(group_id)
|
169
|
+
response = nexus.delete(nexus_url("service/local/repo_groups/#{sanitize_for_id(group_id)}"))
|
170
|
+
case response.status
|
171
|
+
when 204
|
172
|
+
return true
|
173
|
+
when 404
|
174
|
+
raise RepositoryNotFoundException
|
175
|
+
else
|
176
|
+
raise UnexpectedStatusCodeException.new(response.status)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
private
|
181
|
+
|
182
|
+
def create_hosted_repository_json(name, id, policy, provider)
|
183
|
+
params = {:provider => provider.nil? ? "maven2": provider}
|
184
|
+
params[:providerRole] = "org.sonatype.nexus.proxy.repository.Repository"
|
185
|
+
params[:exposed] = true
|
186
|
+
params[:browseable] = true
|
187
|
+
params[:indexable] = true
|
188
|
+
params[:repoType] = "hosted"
|
189
|
+
params[:repoPolicy] = policy.nil? ? "RELEASE" : ["RELEASE", "SNAPSHOT"].include?(policy) ? policy : "RELEASE"
|
190
|
+
params[:name] = name
|
191
|
+
params[:id] = id.nil? ? sanitize_for_id(name) : sanitize_for_id(id)
|
192
|
+
params[:format] = "maven2"
|
193
|
+
JSON.dump(:data => params)
|
194
|
+
end
|
195
|
+
|
196
|
+
def create_proxy_repository_json(name, url, id, policy, provider)
|
197
|
+
params = {:provider => provider.nil? ? "maven2" : provider}
|
198
|
+
params[:providerRole] = "org.sonatype.nexus.proxy.repository.Repository"
|
199
|
+
params[:exposed] = true
|
200
|
+
params[:browseable] = true
|
201
|
+
params[:indexable] = true
|
202
|
+
params[:repoType] = "proxy"
|
203
|
+
params[:repoPolicy] = policy.nil? ? "RELEASE" : ["RELEASE", "SNAPSHOT"].include?(policy) ? policy : "RELEASE"
|
204
|
+
params[:checksumPolicy] = "WARN"
|
205
|
+
params[:writePolicy] = "READ_ONLY"
|
206
|
+
params[:downloadRemoteIndexes] = true
|
207
|
+
params[:autoBlockActive] = false
|
208
|
+
params[:name] = name
|
209
|
+
params[:id] = id.nil? ? sanitize_for_id(name) : sanitize_for_id(id)
|
210
|
+
params[:remoteStorage] = {:remoteStorageUrl => url.nil? ? "http://change-me.com/" : url}
|
211
|
+
JSON.dump(:data => params)
|
212
|
+
end
|
213
|
+
|
214
|
+
def create_group_repository_json(name, id, provider)
|
215
|
+
params = {:id => id.nil? ? sanitize_for_id(name) : sanitize_for_id(id)}
|
216
|
+
params[:name] = name
|
217
|
+
params[:provider] = provider.nil? ? "maven2" : provider
|
218
|
+
params[:exposed] = true
|
219
|
+
JSON.dump(:data => params)
|
220
|
+
end
|
221
|
+
|
222
|
+
def create_add_to_group_repository_json(group_id, repository_to_add_id)
|
223
|
+
group_repository_json = JSON.parse(get_group_repository(group_id))
|
224
|
+
repositories = group_repository_json["data"]["repositories"]
|
225
|
+
repositories << {:id => sanitize_for_id(repository_to_add_id)}
|
226
|
+
params = {:repositories => repositories}
|
227
|
+
params[:id] = group_repository_json["data"]["id"]
|
228
|
+
params[:name] = group_repository_json["data"]["name"]
|
229
|
+
params[:exposed] = group_repository_json["data"]["exposed"]
|
230
|
+
JSON.dump(:data => params)
|
231
|
+
end
|
232
|
+
|
233
|
+
def create_remove_from_group_repository_json(group_id, repository_to_remove_id)
|
234
|
+
group_repository_json = JSON.parse(get_group_repository(group_id))
|
235
|
+
repositories = group_repository_json["data"]["repositories"]
|
236
|
+
|
237
|
+
repositories.delete(repository_in_group?(group_id, repository_to_remove_id))
|
238
|
+
|
239
|
+
params = {:repositories => repositories}
|
240
|
+
params[:id] = group_repository_json["data"]["id"]
|
241
|
+
params[:name] = group_repository_json["data"]["name"]
|
242
|
+
JSON.dump(:data => params)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|