chemlab 0.5.0 → 0.6.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/Rakefile +6 -0
- data/bin/chemlab +10 -0
- data/bin/chemlab-suite +1 -0
- data/bin/chemlab-test +1 -0
- data/lib/chemlab.rb +11 -13
- data/lib/chemlab/attributable.rb +16 -10
- data/lib/chemlab/cli/fixtures/new_library/.gitignore +63 -0
- data/lib/chemlab/cli/fixtures/new_library/Gemfile +5 -0
- data/lib/chemlab/cli/fixtures/new_library/README.md.erb +1 -0
- data/lib/chemlab/cli/fixtures/new_library/lib/new_library.rb.erb +7 -0
- data/lib/chemlab/cli/fixtures/new_library/lib/page/sample.rb.erb +9 -0
- data/lib/chemlab/cli/fixtures/new_library/new_library.gemspec.erb +23 -0
- data/lib/chemlab/cli/fixtures/new_library/spec/integration/page/sample_spec.rb.erb +17 -0
- data/lib/chemlab/cli/fixtures/new_library/spec/unit/page/sample_spec.rb.erb +19 -0
- data/lib/chemlab/cli/generator.rb +46 -0
- data/lib/chemlab/cli/generator/templates/page.erb +3 -0
- data/lib/chemlab/cli/new_library.rb +62 -0
- data/lib/chemlab/cli/stub.erb +65 -0
- data/lib/chemlab/cli/stubber.rb +74 -0
- data/lib/chemlab/component.rb +78 -8
- data/lib/chemlab/configuration.rb +60 -12
- data/lib/chemlab/element.rb +4 -0
- data/lib/chemlab/page.rb +19 -1
- data/lib/chemlab/runtime/browser.rb +13 -17
- data/lib/chemlab/runtime/env.rb +13 -9
- data/lib/chemlab/runtime/logger.rb +16 -13
- data/lib/chemlab/version.rb +1 -1
- data/lib/tasks/generate.rake +22 -0
- data/lib/tasks/generate_stubs.rake +20 -0
- data/lib/tasks/help.rake +24 -0
- data/lib/tasks/new.rake +19 -0
- data/lib/tasks/version.rake +8 -0
- metadata +87 -49
- data/lib/chemlab/api_fabricator.rb +0 -134
- data/lib/chemlab/resource.rb +0 -169
- data/lib/chemlab/runtime/api_client.rb +0 -18
- data/lib/chemlab/support/api.rb +0 -71
- data/lib/chemlab/support/logging.rb +0 -176
- data/lib/chemlab/support/repeater.rb +0 -65
- data/lib/chemlab/support/waiter.rb +0 -39
@@ -1,23 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'logger'
|
4
|
-
require 'forwardable'
|
5
|
-
|
6
3
|
module Chemlab
|
7
4
|
module Runtime
|
5
|
+
# Logger module
|
8
6
|
module Logger
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
# Log something to a stream
|
8
|
+
# @param [Any] obj Any object that responds to #to_s
|
9
|
+
# @param [Symbol] type The type of message logged
|
10
|
+
# @param [Hash] args Any additional arguments
|
11
|
+
# @example
|
12
|
+
# log('something', :info) #=> logs INFO :: something, to $stdout
|
13
|
+
# log('error', :err) #=> logs ERR :: error, to $stderr
|
14
|
+
# log('important', :important, stream: $stderr) #=> logs IMPO :: important, to $stderr
|
15
|
+
# log('to file', :info, stream: File.open('file.txt', 'w')) #=> logs INFO :: to file, to the file.txt file
|
16
|
+
def log(obj, type = :info, **args)
|
17
|
+
raise ArgumentError, "Cannot log #{obj} as it does not respond to to_s!" unless obj.respond_to?(:to_s)
|
12
18
|
|
13
|
-
|
14
|
-
attr_writer :logger
|
19
|
+
args[:stream] = type.match?(/(err(or)?|warn(ing)?)/) ? $stderr : $stdout
|
15
20
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
+
prefix = Time.now.strftime('%Y-%m-%d %H:%M:%S / ')
|
22
|
+
prefix << type[0..3].upcase << "\t:: " # we only want the prefix to be four chars long
|
23
|
+
args[:stream].puts(prefix << obj.to_s)
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
data/lib/chemlab/version.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
desc <<-DESCRIPTION
|
4
|
+
Generate something
|
5
|
+
|
6
|
+
Arguments: WHAT NAME [ARGS]
|
7
|
+
Examples:
|
8
|
+
- generate page Login path=/users/sign_in
|
9
|
+
Generates a page library
|
10
|
+
Notes:
|
11
|
+
- [ARGS] will be in form key=value separated by `=`
|
12
|
+
DESCRIPTION
|
13
|
+
task :generate do |_, args|
|
14
|
+
require_relative '../chemlab/cli/generator'
|
15
|
+
|
16
|
+
raise ArgumentError, 'Please specify what to generate and the name' if args.size < 2
|
17
|
+
|
18
|
+
what = args.shift
|
19
|
+
name = args.shift
|
20
|
+
|
21
|
+
Chemlab::CLI::Generator.generate(what, name, args)
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :generate do
|
4
|
+
desc <<-DESCRIPTION
|
5
|
+
Generate page library stubs
|
6
|
+
|
7
|
+
Arguments: PATH
|
8
|
+
Examples:
|
9
|
+
- generate:stubs qa/page/login.rb
|
10
|
+
Generate stubs for a specific page library
|
11
|
+
- generate:stubs qa/page
|
12
|
+
Generates stubs for all page libraries in `qa/page`
|
13
|
+
DESCRIPTION
|
14
|
+
task :stubs do |_, path|
|
15
|
+
puts "Doin some stubbin in #{path}"
|
16
|
+
|
17
|
+
require_relative '../chemlab/cli/stubber'
|
18
|
+
Chemlab::CLI::Stubber.stub_all(path)
|
19
|
+
end
|
20
|
+
end
|
data/lib/tasks/help.rake
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'colorize'
|
4
|
+
|
5
|
+
desc 'Show the help'
|
6
|
+
task '--help' do
|
7
|
+
usage = +%(Usage: #{$PROGRAM_NAME} TASK\n)
|
8
|
+
|
9
|
+
Rake.application.tasks.each do |task|
|
10
|
+
usage += %(#{task.name.bold}: #{task.comment}\n)
|
11
|
+
|
12
|
+
next unless task.full_comment && task.full_comment != task.comment
|
13
|
+
|
14
|
+
# standardize and colorize the description
|
15
|
+
full_comment = task.full_comment.gsub(/(Arguments|Examples|Notes):/, '\1:'.underline)
|
16
|
+
|
17
|
+
# remove the short description and the newlines
|
18
|
+
full_comment = full_comment[task.comment.size + 2..]
|
19
|
+
|
20
|
+
usage += %(#{full_comment}\n\n)
|
21
|
+
end
|
22
|
+
|
23
|
+
$stdout.puts usage
|
24
|
+
end
|
data/lib/tasks/new.rake
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
desc <<-DESCRIPTION
|
4
|
+
Scaffold a new Chemlab Library
|
5
|
+
|
6
|
+
Arguments: PATH
|
7
|
+
Examples:
|
8
|
+
- new my-library
|
9
|
+
Scaffolds a new Chemlab Library in the `my-library` directory.
|
10
|
+
This will fail if the PATH already exists
|
11
|
+
DESCRIPTION
|
12
|
+
task 'new' do |_, args|
|
13
|
+
require_relative '../chemlab/cli/new_library'
|
14
|
+
|
15
|
+
library = args.first
|
16
|
+
|
17
|
+
warn "NOTE: Only creating #{library}" if args.size > 1
|
18
|
+
Chemlab::CLI::NewLibrary.scaffold(library)
|
19
|
+
end
|
metadata
CHANGED
@@ -1,161 +1,183 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chemlab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab Quality
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: climate_control
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 1.0.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 1.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 1.6.6
|
33
|
+
version: 1.10.9
|
37
34
|
type: :development
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - "~>"
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 1.6.6
|
40
|
+
version: 1.10.9
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: pry
|
42
|
+
name: pry
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: 0.14.1
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - "~>"
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
54
|
+
version: 0.14.1
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
56
|
+
name: rspec
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
59
|
- - "~>"
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
61
|
+
version: '3.7'
|
68
62
|
type: :development
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
66
|
- - "~>"
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
68
|
+
version: '3.7'
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
70
|
+
name: rspec-parameterized
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
73
|
- - "~>"
|
80
74
|
- !ruby/object:Gem::Version
|
81
|
-
version: 0.
|
75
|
+
version: 0.4.2
|
82
76
|
type: :development
|
83
77
|
prerelease: false
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
86
80
|
- - "~>"
|
87
81
|
- !ruby/object:Gem::Version
|
88
|
-
version: 0.
|
82
|
+
version: 0.4.2
|
89
83
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
84
|
+
name: rubocop
|
91
85
|
requirement: !ruby/object:Gem::Requirement
|
92
86
|
requirements:
|
93
87
|
- - "~>"
|
94
88
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
89
|
+
version: 1.14.0
|
96
90
|
type: :development
|
97
91
|
prerelease: false
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
99
93
|
requirements:
|
100
94
|
- - "~>"
|
101
95
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
96
|
+
version: 1.14.0
|
103
97
|
- !ruby/object:Gem::Dependency
|
104
|
-
name: rspec
|
98
|
+
name: rubocop-rspec
|
105
99
|
requirement: !ruby/object:Gem::Requirement
|
106
100
|
requirements:
|
107
101
|
- - "~>"
|
108
102
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
103
|
+
version: 2.3.0
|
110
104
|
type: :development
|
111
105
|
prerelease: false
|
112
106
|
version_requirements: !ruby/object:Gem::Requirement
|
113
107
|
requirements:
|
114
108
|
- - "~>"
|
115
109
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
110
|
+
version: 2.3.0
|
117
111
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
112
|
+
name: yard
|
119
113
|
requirement: !ruby/object:Gem::Requirement
|
120
114
|
requirements:
|
121
115
|
- - "~>"
|
122
116
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.
|
117
|
+
version: 0.9.26
|
124
118
|
type: :development
|
125
119
|
prerelease: false
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
127
121
|
requirements:
|
128
122
|
- - "~>"
|
129
123
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
124
|
+
version: 0.9.26
|
131
125
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
126
|
+
name: activesupport-inflector
|
133
127
|
requirement: !ruby/object:Gem::Requirement
|
134
128
|
requirements:
|
135
129
|
- - "~>"
|
136
130
|
- !ruby/object:Gem::Version
|
137
|
-
version: 1.
|
138
|
-
type: :
|
131
|
+
version: 0.1.0
|
132
|
+
type: :runtime
|
139
133
|
prerelease: false
|
140
134
|
version_requirements: !ruby/object:Gem::Requirement
|
141
135
|
requirements:
|
142
136
|
- - "~>"
|
143
137
|
- !ruby/object:Gem::Version
|
144
|
-
version: 1.
|
138
|
+
version: 0.1.0
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: colorize
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.8.1
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.8.1
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: i18n
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 1.8.10
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 1.8.10
|
145
167
|
- !ruby/object:Gem::Dependency
|
146
168
|
name: rake
|
147
169
|
requirement: !ruby/object:Gem::Requirement
|
148
170
|
requirements:
|
149
171
|
- - "~>"
|
150
172
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
173
|
+
version: 13.0.3
|
152
174
|
type: :runtime
|
153
175
|
prerelease: false
|
154
176
|
version_requirements: !ruby/object:Gem::Requirement
|
155
177
|
requirements:
|
156
178
|
- - "~>"
|
157
179
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
180
|
+
version: 13.0.3
|
159
181
|
- !ruby/object:Gem::Dependency
|
160
182
|
name: selenium-webdriver
|
161
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -187,28 +209,44 @@ dependencies:
|
|
187
209
|
description:
|
188
210
|
email:
|
189
211
|
- quality@gitlab.com
|
190
|
-
executables:
|
212
|
+
executables:
|
213
|
+
- chemlab
|
191
214
|
extensions: []
|
192
215
|
extra_rdoc_files: []
|
193
216
|
files:
|
217
|
+
- Rakefile
|
218
|
+
- bin/chemlab
|
219
|
+
- bin/chemlab-suite
|
220
|
+
- bin/chemlab-test
|
194
221
|
- lib/chemlab.rb
|
195
|
-
- lib/chemlab/api_fabricator.rb
|
196
222
|
- lib/chemlab/attributable.rb
|
223
|
+
- lib/chemlab/cli/fixtures/new_library/.gitignore
|
224
|
+
- lib/chemlab/cli/fixtures/new_library/Gemfile
|
225
|
+
- lib/chemlab/cli/fixtures/new_library/README.md.erb
|
226
|
+
- lib/chemlab/cli/fixtures/new_library/lib/new_library.rb.erb
|
227
|
+
- lib/chemlab/cli/fixtures/new_library/lib/page/sample.rb.erb
|
228
|
+
- lib/chemlab/cli/fixtures/new_library/new_library.gemspec.erb
|
229
|
+
- lib/chemlab/cli/fixtures/new_library/spec/integration/page/sample_spec.rb.erb
|
230
|
+
- lib/chemlab/cli/fixtures/new_library/spec/unit/page/sample_spec.rb.erb
|
231
|
+
- lib/chemlab/cli/generator.rb
|
232
|
+
- lib/chemlab/cli/generator/templates/page.erb
|
233
|
+
- lib/chemlab/cli/new_library.rb
|
234
|
+
- lib/chemlab/cli/stub.erb
|
235
|
+
- lib/chemlab/cli/stubber.rb
|
197
236
|
- lib/chemlab/component.rb
|
198
237
|
- lib/chemlab/configuration.rb
|
199
238
|
- lib/chemlab/element.rb
|
200
239
|
- lib/chemlab/page.rb
|
201
|
-
- lib/chemlab/resource.rb
|
202
|
-
- lib/chemlab/runtime/api_client.rb
|
203
240
|
- lib/chemlab/runtime/browser.rb
|
204
241
|
- lib/chemlab/runtime/env.rb
|
205
242
|
- lib/chemlab/runtime/logger.rb
|
206
|
-
- lib/chemlab/support/api.rb
|
207
|
-
- lib/chemlab/support/logging.rb
|
208
|
-
- lib/chemlab/support/repeater.rb
|
209
|
-
- lib/chemlab/support/waiter.rb
|
210
243
|
- lib/chemlab/version.rb
|
211
|
-
|
244
|
+
- lib/tasks/generate.rake
|
245
|
+
- lib/tasks/generate_stubs.rake
|
246
|
+
- lib/tasks/help.rake
|
247
|
+
- lib/tasks/new.rake
|
248
|
+
- lib/tasks/version.rake
|
249
|
+
homepage: https://about.gitlab.com/
|
212
250
|
licenses:
|
213
251
|
- MIT
|
214
252
|
metadata: {}
|
@@ -220,14 +258,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
220
258
|
requirements:
|
221
259
|
- - ">="
|
222
260
|
- !ruby/object:Gem::Version
|
223
|
-
version:
|
261
|
+
version: 2.7.2
|
224
262
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
263
|
requirements:
|
226
264
|
- - ">="
|
227
265
|
- !ruby/object:Gem::Version
|
228
266
|
version: '0'
|
229
267
|
requirements: []
|
230
|
-
rubygems_version: 3.
|
268
|
+
rubygems_version: 3.1.4
|
231
269
|
signing_key:
|
232
270
|
specification_version: 4
|
233
271
|
summary: Automation framework built by GitLab, for the world.
|
@@ -1,134 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'active_support/core_ext/object/deep_dup'
|
4
|
-
|
5
|
-
module Chemlab
|
6
|
-
# API Fabricator
|
7
|
-
module ApiFabricator
|
8
|
-
ResourceFabricationFailedError = Class.new(RuntimeError)
|
9
|
-
ResourceNotDeletedError = Class.new(RuntimeError)
|
10
|
-
ResourceNotFoundError = Class.new(RuntimeError)
|
11
|
-
ResourceQueryError = Class.new(RuntimeError)
|
12
|
-
ResourceUpdateFailedError = Class.new(RuntimeError)
|
13
|
-
ResourceURLMissingError = Class.new(RuntimeError)
|
14
|
-
InternalServerError = Class.new(RuntimeError)
|
15
|
-
|
16
|
-
attr_reader :api_resource, :api_response
|
17
|
-
attr_writer :api_client
|
18
|
-
attr_accessor :user
|
19
|
-
|
20
|
-
def api_support?
|
21
|
-
respond_to?(:api_get_path) &&
|
22
|
-
(respond_to?(:api_post_path) && respond_to?(:api_post_body)) ||
|
23
|
-
(respond_to?(:api_put_path) && respond_to?(:api_put_body))
|
24
|
-
end
|
25
|
-
|
26
|
-
def fabricate_via_api!
|
27
|
-
unless api_support?
|
28
|
-
raise NotImplementedError, "Resource #{self.class.name} does not support fabrication via the API!"
|
29
|
-
end
|
30
|
-
|
31
|
-
resource_web_url(api_post)
|
32
|
-
end
|
33
|
-
|
34
|
-
def reload!
|
35
|
-
api_get
|
36
|
-
|
37
|
-
self
|
38
|
-
end
|
39
|
-
|
40
|
-
def remove_via_api!
|
41
|
-
api_delete
|
42
|
-
end
|
43
|
-
|
44
|
-
def eager_load_api_client!
|
45
|
-
return unless api_client.nil?
|
46
|
-
|
47
|
-
api_client.tap do |client|
|
48
|
-
# Eager-load the API client so that the personal token creation isn't
|
49
|
-
# taken in account in the actual resource creation timing.
|
50
|
-
client.user = user
|
51
|
-
client.personal_access_token
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
include Support::API
|
56
|
-
|
57
|
-
attr_writer :api_resource, :api_response
|
58
|
-
|
59
|
-
def api_put(body = api_put_body)
|
60
|
-
response = put(
|
61
|
-
Runtime::API::Request.new(api_client, api_put_path).url,
|
62
|
-
body)
|
63
|
-
|
64
|
-
unless response.code == HTTP_STATUS_OK
|
65
|
-
raise ResourceFabricationFailedError, "Updating #{self.class.name} using the API failed (#{response.code}) with `#{response}`."
|
66
|
-
end
|
67
|
-
|
68
|
-
process_api_response(parse_body(response))
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
def resource_web_url(resource)
|
74
|
-
resource.fetch(:web_url) do
|
75
|
-
raise ResourceURLMissingError, "API resource for #{self.class.name} does not expose a `web_url` property: `#{resource}`."
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def api_get
|
80
|
-
process_api_response(parse_body(api_get_from(api_get_path)))
|
81
|
-
end
|
82
|
-
|
83
|
-
def api_get_from(get_path)
|
84
|
-
url = Runtime::API::Request.new(api_client, get_path).url
|
85
|
-
response = get(url)
|
86
|
-
|
87
|
-
if response.code == HTTP_STATUS_SERVER_ERROR
|
88
|
-
raise InternalServerError, "Failed to GET #{url} - (#{response.code}): `#{response}`."
|
89
|
-
elsif response.code != HTTP_STATUS_OK
|
90
|
-
raise ResourceNotFoundError, "Resource at #{url} could not be found (#{response.code}): `#{response}`."
|
91
|
-
end
|
92
|
-
|
93
|
-
response
|
94
|
-
end
|
95
|
-
|
96
|
-
def api_post
|
97
|
-
response = post(
|
98
|
-
Runtime::API::Request.new(api_client, api_post_path).url,
|
99
|
-
api_post_body)
|
100
|
-
|
101
|
-
unless response.code == HTTP_STATUS_CREATED
|
102
|
-
raise ResourceFabricationFailedError, "Fabrication of #{self.class.name} using the API failed (#{response.code}) with `#{response}`."
|
103
|
-
end
|
104
|
-
|
105
|
-
process_api_response(parse_body(response))
|
106
|
-
end
|
107
|
-
|
108
|
-
def api_delete
|
109
|
-
url = Runtime::API::Request.new(api_client, api_delete_path).url
|
110
|
-
response = delete(url)
|
111
|
-
|
112
|
-
unless [HTTP_STATUS_NO_CONTENT, HTTP_STATUS_ACCEPTED].include? response.code
|
113
|
-
raise ResourceNotDeletedError, "Resource at #{url} could not be deleted (#{response.code}): `#{response}`."
|
114
|
-
end
|
115
|
-
|
116
|
-
response
|
117
|
-
end
|
118
|
-
|
119
|
-
def api_client
|
120
|
-
@api_client ||= begin
|
121
|
-
Runtime::API::Client.new(:gitlab, is_new_session: !current_url.start_with?('http'), user: user)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def process_api_response(parsed_response)
|
126
|
-
self.api_response = parsed_response
|
127
|
-
self.api_resource = transform_api_resource(parsed_response.deep_dup)
|
128
|
-
end
|
129
|
-
|
130
|
-
def transform_api_resource(api_resource)
|
131
|
-
api_resource
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|