stash-api 1.0.11.0 → 1.1.23.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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjRiMTk3Yzg0N2VmODU0OWYyYmU4OTIxZTdkNDI4OGRmZTc2YzhjNg==
4
+ MzgyY2I2NGFjZGFiY2M4NTExYjBjOGY2ODc3ZDMyODk0ZDllMTgyYw==
5
5
  data.tar.gz: !binary |-
6
- MmY4ZmM1NTBkZjAzMDdhZThjMGNiNDFlOWFkMDk1YTRkZDU1YzBlZg==
6
+ ZWRhMGY4ZDIxYzliZWY5YTI2MTM3ODkzMjYzZjFkYzEyMzgxYWY5Mg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OGFhNmM2ZmEyNWVjNzVhYzcyYWE1MDljYmRlNTJjNThiNmNjZGZmZWEzOTE5
10
- NDJkYjBlYzRhZTkyZjg1MzlkYzIwYTdlODJlYjg2NWNjZmQ4MTFjMDU5ZTI4
11
- N2Y2NmZhOWE3NzA3NzVjNzY0YjA4NWUyNTg4YzU5MWNjNmQ2ZGQ=
9
+ NTU1ZTFhYjA0M2Q3ODM1ODhlYmMzYmJhNGI0NWQwNjE3OWFkYmJhOGRmNjkw
10
+ MTYxNGMyMjE1MmYxMzljMDE1MTQwNzFjMjQzODk0Mjk2YmRkZWY0NGIyNjlj
11
+ YzM5YmZkNDhkOWE4OWZmZjA3YzUyNjE4MzBlZDRhMTljNzZlNjA=
12
12
  data.tar.gz: !binary |-
13
- ZmFlMmU2Zjk3ZmU0YTE4NzI1M2NhNGEzNmU3YjJiZTgyNDRiYzg0OTZjOWY4
14
- MzIzMzYyZTNkYWVlYjAyMTdiYTNiNDFkOGNiYjNiYzQ4Nzc5ZjAzYjgyMzli
15
- YzBlNTM2ZDEzNGZhYWIyZjk3MWY2NzIwNzc5ZmRmOWI5NGExNjg=
13
+ ZTY4ZmU2NjY3Yjc3NTQ3YTBiNDYyMzBmZmFhMzMyMThmYTI5NzAyZWU5ZDg2
14
+ ZGE0MjhhYzMzNjg0OTg0MzIyOWJiN2ViOTFiY2Q2ZjU2OGZiZGU5ODZjMGY1
15
+ NmIzZWMyYzRmOGU3MGVlNTE4YzgwY2YzOTQ5MjFmZmQ5ZWFmNjM=
data/lib/stash-api.rb CHANGED
@@ -5,4 +5,4 @@ STDOUT.sync = true
5
5
  STDERR.sync = true
6
6
 
7
7
  # :nodoc:
8
- include StashAPI::DSL
8
+ include Stash::DSL
@@ -0,0 +1,183 @@
1
+ require 'open-uri'
2
+ require 'rest-client'
3
+
4
+ module Stash
5
+ class Client
6
+ attr_accessor :server, :project, :repository_name
7
+
8
+ def initialize(username, password, config = {:follow_fork => true, :url => nil, :verify_ssl => true})
9
+ raise 'API username must be specified' if !username
10
+ raise 'API password must be specified' if !password
11
+ @username = username
12
+ @password = password
13
+
14
+ remote_origin_url = config[:url] || %x[git config --get remote.origin.url]
15
+ raise "Repository URL is not set and cannot be inferred from the git config." if !remote_origin_url
16
+
17
+ match = remote_origin_url.match(/(ssh|https?):\/\/([^@]*@)?(?<server>[^\:\/]*)[^\/]*\/(scm\/)?(?<project>[^\/].*)\/(?<repository_name>[^\/]*)\.git$/)
18
+ raise "Remote origin cannot be inferred from the url: #{remote_origin_url}. Run `git remote add origin URL` to add an origin." if !match
19
+ @server = match[:server]
20
+ @project = match[:project]
21
+ @repository_name = match[:repository_name]
22
+
23
+ @remote_api_url = File.join("https://#{@server}", 'rest', 'api', '1.0', 'projects', @project, 'repos', @repository_name)
24
+ @branch_permissions_url = File.join("https://#{@server}", 'rest', 'branch-permissions', '2.0', 'projects', @project, 'repos', @repository_name, 'restrictions')
25
+ @branchring_model_url = File.join("https://#{@server}", 'rest', 'branch-utils', '1.0', 'projects', @project, 'repos', @repository_name)
26
+ @pull_request_settings = File.join("https://#{@server}", 'rest', 'pullrequest-settings', '1.0', 'projects', @project, 'repos', @repository_name)
27
+ json = RestClient::Resource.new(@remote_api_url, {:user => @username, :password => @password, :verify_ssl => config[:verify_ssl]}).get
28
+ repository_information = JSON::pretty_generate(JSON.parse(json))
29
+
30
+ #If the repository is a fork, use it's forked source to get this information
31
+ if repository_information['origin'] && config[:follow_fork]
32
+ @project = repository_information['origin']['project']['key']
33
+ @repository_name = repository_information['origin']['slug']
34
+ end
35
+ end
36
+
37
+ SETTINGS_HOOKS_URL = File.join('settings', 'hooks')
38
+
39
+ def set_hooks(hooks)
40
+ hooks.keys.each do |hook|
41
+ RestClient::Request.new(
42
+ :method => :put,
43
+ :url => URI::encode("#{File.join(@remote_api_url, SETTINGS_HOOKS_URL)}/#{hook}/enabled"),
44
+ :user => @username,
45
+ :password => @password,
46
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
47
+ raise "Could not enable hook: #{hook} - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
48
+ end
49
+
50
+ config = hooks[hook][:config]
51
+ if config
52
+ RestClient::Request.new(
53
+ :method => :put,
54
+ :url => URI::encode("#{File.join(@remote_api_url, SETTINGS_HOOKS_URL)}/#{hook}/settings"),
55
+ :user => @username,
56
+ :password => @password,
57
+ :payload => config.to_json,
58
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
59
+ raise "Could not configure hook: #{hook} - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ def get_hooks()
66
+ config = {}
67
+ RestClient::Request.new(
68
+ :method => :get,
69
+ :url => URI::encode("#{File.join(@remote_api_url, SETTINGS_HOOKS_URL)}?limit=1000"),
70
+ :user => @username,
71
+ :password => @password,
72
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
73
+ raise "Could not get hooks - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
74
+ JSON::parse(response)['values'].map do |h|
75
+ hook = h['details']['key']
76
+ config[hook] = {:config => nil, :enabled => h['enabled']}
77
+
78
+ RestClient::Request.new(
79
+ :method => :get,
80
+ :url => URI::encode(File.join(@remote_api_url, SETTINGS_HOOKS_URL, hook, 'settings')),
81
+ :user => @username,
82
+ :password => @password,
83
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
84
+ config[hook][:config] = JSON::parse(response != '' ? response : '{}') if response.code.to_s.match(/^2\d{2}$/)
85
+ end
86
+ end
87
+ end
88
+ config
89
+ end
90
+
91
+ def set_branch_permissions(permissions)
92
+ raise "permissions list is required" if !permissions
93
+ [permissions].flatten.each do |permission|
94
+ RestClient::Request.new(
95
+ :method => :post,
96
+ :url => URI::encode("#{@branch_permissions_url}?"),
97
+ :user => @username,
98
+ :password => @password,
99
+ :payload => permission.to_json,
100
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
101
+ raise "Could not set branch permissions - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
102
+ end
103
+ end
104
+ end
105
+
106
+ def get_branch_permissions()
107
+ RestClient::Request.new(
108
+ :method => :get,
109
+ :url => URI::encode("#{@branch_permissions_url}?limit=1000"),
110
+ :user => @username,
111
+ :password => @password,
112
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
113
+ raise "Could not get branch permissions - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
114
+ return JSON::parse(response)
115
+ end
116
+ end
117
+
118
+ def set_pull_request_settings(settings)
119
+ RestClient::Request.new(
120
+ :method => :put,
121
+ :url => URI::encode(File.join(@pull_request_settings, 'requiredBuildsCount', settings[:builds].to_s)),
122
+ :user => @username,
123
+ :password => @password,
124
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
125
+ raise "Could not get set required builds - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
126
+ end if settings[:builds]
127
+ RestClient::Request.new(
128
+ :method => :put,
129
+ :url => URI::encode(File.join(@pull_request_settings, 'requiredApproversCount', settings[:approvers].to_s)),
130
+ :user => @username,
131
+ :password => @password,
132
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
133
+ raise "Could not get set pull request approvers - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
134
+ end if settings[:approvers]
135
+ end
136
+
137
+ def get_pull_request_settings()
138
+ settings = {}
139
+ RestClient::Request.new(
140
+ :method => :get,
141
+ :url => URI::encode(File.join(@pull_request_settings, 'requiredBuildsCount')),
142
+ :user => @username,
143
+ :password => @password,
144
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
145
+ settings[:builds] = response.body if response.code.to_s.match(/^2\d{2}$/)
146
+ end
147
+ RestClient::Request.new(
148
+ :method => :get,
149
+ :url => URI::encode(File.join(@pull_request_settings, 'requiredApproversCount')),
150
+ :user => @username,
151
+ :password => @password,
152
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
153
+ settings[:approvers] = response.body if response.code.to_s.match(/^2\d{2}$/)
154
+ end
155
+ settings
156
+ end
157
+
158
+ BRANCHING_MODEL_URL = File.join('automerge', 'enabled')
159
+ def set_automatic_merging()
160
+ RestClient::Request.new(
161
+ :method => :put,
162
+ :url => URI::encode(File.join(@branchring_model_url, BRANCHING_MODEL_URL)),
163
+ :user => @username,
164
+ :password => @password,
165
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
166
+ raise "Could not get branchig model - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
167
+ end
168
+ end
169
+
170
+ def get_automatic_merging()
171
+ RestClient::Request.new(
172
+ :method => :get,
173
+ :url => URI::encode(File.join(@branchring_model_url, BRANCHING_MODEL_URL)),
174
+ :user => @username,
175
+ :password => @password,
176
+ :headers => { :accept => :json, :content_type => :json }).execute do |response, request, result|
177
+ raise "Could not get branchig model - #{JSON::pretty_generate(JSON::parse(response.body))}" if !response.code.to_s.match(/^2\d{2}$/)
178
+ return response.code == 204
179
+ end
180
+ end
181
+
182
+ end
183
+ end
data/lib/stash-api/dsl.rb CHANGED
@@ -1,4 +1,4 @@
1
- module StashAPI
1
+ module Stash
2
2
  module DSL
3
3
  end
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stash-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11.0
4
+ version: 1.1.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Warren Parad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-01 00:00:00.000000000 Z
11
+ date: 2015-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -60,6 +60,7 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - lib/stash-api.rb
63
+ - lib/stash-api/client.rb
63
64
  - lib/stash-api/dsl.rb
64
65
  homepage: https://github.com/wparad/Stash-API
65
66
  licenses: