kuby-core 0.11.2 → 0.11.3
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 +3 -0
- data/lib/kuby/commands.rb +8 -1
- data/lib/kuby/definition.rb +15 -2
- data/lib/kuby/dev_setup.rb +113 -23
- data/lib/kuby/plugins/rails_app/generators/kuby.rb +10 -0
- data/lib/kuby/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed18879c6aaea9b7fa96be67e6fd3f4b9b59cfc7b79a1d0eef33017e8bf509aa
|
4
|
+
data.tar.gz: 1b36fab3efe73e5df8510ef4896fbb991d8d2b478c86af3a3b76fd7b185a92b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbc63d361f6ee464b88cdfca30be2974a99faf63824427d8f483aa136d55e3315242d02d0d8be1aebebddb0d954c863dfa5bff31af178d2f4e922870f8d206e5
|
7
|
+
data.tar.gz: d93d06d263c9c7fef24fcb15417f58c64033dbd9da492bd72728e5ac05d4ff0cf73ccf360d5cb7e03f363f9e22c99d003694a0ca30b81c30a7b6676307abcfa4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 0.11.3
|
2
|
+
* I've gone back and forth a few times on this, but I decided to put the initializer code back into the Rails generator.
|
3
|
+
|
1
4
|
## 0.11.2
|
2
5
|
* Attempt to auto-require the requested provider if it isn't registered.
|
3
6
|
* Adjust error message when provider can't be found to include reminder to add a require statement.
|
data/lib/kuby/commands.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
|
+
|
2
3
|
require 'kuby/version'
|
3
4
|
require 'gli'
|
4
5
|
|
5
6
|
module Kuby
|
6
7
|
class Commands
|
8
|
+
extend T::Sig
|
7
9
|
extend GLI::App
|
8
10
|
|
9
11
|
# GLI doesn't have a wildcard option, so it's impossible to tell it to
|
@@ -17,8 +19,10 @@ module Kuby
|
|
17
19
|
# avoid the usual series of cryptic alias_method calls (note that there
|
18
20
|
# is no singleton class version of #prepend in the Ruby language).
|
19
21
|
singleton_class.send(:prepend, Module.new do
|
22
|
+
sig { params(args: T::Array[String]).void }
|
20
23
|
def run(args)
|
21
24
|
if idx = args.index('rails') || idx = args.index('rake')
|
25
|
+
@rails_options = T.let(@rails_options, T.nilable(T::Array[String]))
|
22
26
|
@rails_options = args[idx..-1]
|
23
27
|
super(args[0..idx])
|
24
28
|
else
|
@@ -27,10 +31,12 @@ module Kuby
|
|
27
31
|
end
|
28
32
|
end)
|
29
33
|
|
34
|
+
sig { returns(Kuby::Tasks) }
|
30
35
|
def self.tasks
|
31
36
|
Kuby::Tasks.new(Kuby.environment)
|
32
37
|
end
|
33
38
|
|
39
|
+
sig { void }
|
34
40
|
def self.must_be_dev_env!
|
35
41
|
unless Kuby.environment.development?
|
36
42
|
fail "Command not supported in the '#{Kuby.environment.name}' environment"
|
@@ -67,6 +73,7 @@ module Kuby
|
|
67
73
|
rc.action do |global_options, options, args|
|
68
74
|
must_be_dev_env!
|
69
75
|
exit 1 unless tasks.dev_deployment_ok
|
76
|
+
@rails_options = T.let(@rails_options, T.nilable(T::Array[String]))
|
70
77
|
Kuby::RailsCommands.run(@rails_options)
|
71
78
|
end
|
72
79
|
|
data/lib/kuby/definition.rb
CHANGED
@@ -1,12 +1,24 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
|
+
|
2
3
|
module Kuby
|
3
4
|
class Definition
|
5
|
+
extend T::Sig
|
6
|
+
|
7
|
+
sig { returns(String) }
|
4
8
|
attr_reader :app_name
|
5
9
|
|
10
|
+
sig { params(app_name: String, block: T.nilable(T.proc.void)).void }
|
6
11
|
def initialize(app_name, &block)
|
7
12
|
@app_name = app_name
|
13
|
+
@environments = T.let(@environments, T.nilable(T::Hash[Symbol, Environment]))
|
8
14
|
end
|
9
15
|
|
16
|
+
sig {
|
17
|
+
params(
|
18
|
+
name: Symbol,
|
19
|
+
block: T.nilable(T.proc.void)
|
20
|
+
).returns(Environment)
|
21
|
+
}
|
10
22
|
def environment(name = Kuby.env, &block)
|
11
23
|
name = name.to_s
|
12
24
|
|
@@ -16,9 +28,10 @@ module Kuby
|
|
16
28
|
environments[name].instance_eval(&block)
|
17
29
|
end
|
18
30
|
|
19
|
-
environments[name]
|
31
|
+
T.must(environments[name])
|
20
32
|
end
|
21
33
|
|
34
|
+
sig { returns(T::Hash[Symbol, Environment]) }
|
22
35
|
def environments
|
23
36
|
@environments ||= {}
|
24
37
|
end
|
data/lib/kuby/dev_setup.rb
CHANGED
@@ -1,19 +1,34 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
|
+
|
2
3
|
module Kuby
|
3
4
|
class Spinner
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
extend T::Sig
|
6
|
+
|
7
|
+
PIECES = T.let(%w(- \\ | /).freeze, T::Array[String])
|
8
|
+
INTERVAL = T.let(0.2, Float) # seconds
|
9
|
+
|
10
|
+
sig {
|
11
|
+
params(
|
12
|
+
message: String,
|
13
|
+
block: T.proc.params(spinner: Spinner).void
|
14
|
+
)
|
15
|
+
.void
|
16
|
+
}
|
17
|
+
def self.spin(message, &block)
|
8
18
|
yield new(message)
|
9
19
|
end
|
10
20
|
|
11
|
-
|
21
|
+
sig { returns(String) }
|
22
|
+
attr_reader :message
|
23
|
+
|
24
|
+
sig { returns(Symbol) }
|
25
|
+
attr_reader :status
|
12
26
|
|
27
|
+
sig { params(message: String).void }
|
13
28
|
def initialize(message)
|
14
|
-
@message = message
|
15
|
-
@status = :running
|
16
|
-
@thread = Thread.new do
|
29
|
+
@message = T.let(message, String)
|
30
|
+
@status = T.let(:running, Symbol)
|
31
|
+
@thread = T.let(Thread.new do
|
17
32
|
counter = 0
|
18
33
|
|
19
34
|
while true
|
@@ -33,14 +48,16 @@ module Kuby
|
|
33
48
|
end
|
34
49
|
|
35
50
|
puts
|
36
|
-
end
|
51
|
+
end, Thread)
|
37
52
|
end
|
38
53
|
|
54
|
+
sig { void }
|
39
55
|
def success
|
40
56
|
@status = :success
|
41
57
|
@thread.join
|
42
58
|
end
|
43
59
|
|
60
|
+
sig { void }
|
44
61
|
def failure
|
45
62
|
@status = :failure
|
46
63
|
@thread.join
|
@@ -48,66 +65,116 @@ module Kuby
|
|
48
65
|
end
|
49
66
|
|
50
67
|
class SetupTask
|
51
|
-
|
68
|
+
extend T::Sig
|
52
69
|
|
70
|
+
sig { returns(String) }
|
71
|
+
attr_reader :message
|
72
|
+
|
73
|
+
sig { returns(T.proc.void) }
|
74
|
+
attr_reader :callable
|
75
|
+
|
76
|
+
sig { params(message: String, callable: T.proc.void).void }
|
53
77
|
def initialize(message, callable)
|
54
78
|
@message = message
|
55
79
|
@callable = callable
|
56
80
|
end
|
57
81
|
|
82
|
+
sig { void }
|
58
83
|
def run
|
59
84
|
callable.call
|
60
85
|
end
|
61
86
|
end
|
62
87
|
|
63
88
|
class Pipe
|
64
|
-
|
89
|
+
extend T::Sig
|
90
|
+
|
91
|
+
sig { returns(Symbol) }
|
92
|
+
attr_reader :name
|
93
|
+
|
94
|
+
sig { returns(T.untyped) }
|
95
|
+
attr_reader :cli
|
65
96
|
|
97
|
+
sig { returns(StringIO) }
|
98
|
+
attr_reader :out
|
99
|
+
|
100
|
+
sig { returns(StringIO) }
|
101
|
+
attr_reader :err
|
102
|
+
|
103
|
+
sig { params(name: Symbol, cli: T.untyped).void }
|
66
104
|
def initialize(name, cli)
|
67
|
-
@name = name
|
68
|
-
@cli = cli
|
69
|
-
@out = StringIO.new
|
70
|
-
@err = StringIO.new
|
105
|
+
@name = T.let(name, Symbol)
|
106
|
+
@cli = T.let(cli, T.untyped)
|
107
|
+
@out = T.let(StringIO.new, StringIO)
|
108
|
+
@err = T.let(StringIO.new, StringIO)
|
71
109
|
end
|
72
110
|
|
111
|
+
sig { params(block: T.proc.void).void }
|
73
112
|
def wrap(&block)
|
74
113
|
cli.with_pipes(out, err) do
|
75
114
|
block.call
|
76
115
|
end
|
77
116
|
end
|
78
117
|
|
118
|
+
sig { returns(T::Boolean) }
|
79
119
|
def success?
|
80
120
|
cli.last_status.nil? || cli.last_status.success?
|
81
121
|
end
|
82
122
|
end
|
83
123
|
|
84
124
|
class Pipes
|
125
|
+
extend T::Sig
|
126
|
+
extend T::Generic
|
127
|
+
|
85
128
|
include Enumerable
|
86
129
|
|
87
|
-
|
130
|
+
Elem = type_member(fixed: Pipe)
|
131
|
+
|
132
|
+
sig { returns(T::Array[Pipe]) }
|
133
|
+
attr_reader :pipes
|
88
134
|
|
135
|
+
sig { returns(T.nilable(StandardError)) }
|
136
|
+
attr_reader :ex
|
137
|
+
|
138
|
+
sig { params(clis: T::Hash[Symbol, T.untyped]).returns(Pipes) }
|
89
139
|
def self.build(clis)
|
90
140
|
new(clis.map { |name, cli| Pipe.new(name, cli) })
|
91
141
|
end
|
92
142
|
|
143
|
+
sig { params(pipes: T::Array[Pipe]).void }
|
93
144
|
def initialize(pipes)
|
94
|
-
@
|
145
|
+
@ex = T.let(@ex, T.nilable(StandardError))
|
146
|
+
@pipes = T.let(pipes, T::Array[Pipe])
|
95
147
|
end
|
96
148
|
|
149
|
+
sig {
|
150
|
+
override.params(
|
151
|
+
block: T.proc.params(package: Pipe).void
|
152
|
+
)
|
153
|
+
.void
|
154
|
+
}
|
97
155
|
def each(&block)
|
98
156
|
pipes.each(&block)
|
99
157
|
end
|
100
158
|
|
159
|
+
sig { params(block: T.proc.void).void }
|
101
160
|
def wrap(&block)
|
102
161
|
do_wrap(pipes, &block)
|
103
162
|
end
|
104
163
|
|
164
|
+
sig { returns(T::Boolean) }
|
105
165
|
def success?
|
106
166
|
pipes.all?(&:success?) && !ex
|
107
167
|
end
|
108
168
|
|
109
169
|
private
|
110
170
|
|
171
|
+
sig {
|
172
|
+
params(
|
173
|
+
remaining_pipes: T::Array[Pipe],
|
174
|
+
block: T.proc.void
|
175
|
+
)
|
176
|
+
.void
|
177
|
+
}
|
111
178
|
def do_wrap(remaining_pipes, &block)
|
112
179
|
if remaining_pipes.empty?
|
113
180
|
begin
|
@@ -119,20 +186,28 @@ module Kuby
|
|
119
186
|
return
|
120
187
|
end
|
121
188
|
|
122
|
-
remaining_pipes[0].wrap do
|
123
|
-
do_wrap(remaining_pipes[1..-1], &block)
|
189
|
+
T.must(remaining_pipes[0]).wrap do
|
190
|
+
do_wrap(T.must(remaining_pipes[1..-1]), &block)
|
124
191
|
end
|
125
192
|
end
|
126
193
|
end
|
127
194
|
|
128
195
|
class SetupTaskList
|
129
|
-
|
196
|
+
extend T::Sig
|
197
|
+
|
198
|
+
sig { returns(T::Array[SetupTask]) }
|
199
|
+
attr_reader :tasks
|
130
200
|
|
201
|
+
sig { returns T::Hash[Symbol, T.untyped] }
|
202
|
+
attr_reader :clis
|
203
|
+
|
204
|
+
sig { params(tasks: T::Array[SetupTask], clis: T::Hash[Symbol, T.untyped]).void }
|
131
205
|
def initialize(tasks, clis)
|
132
206
|
@tasks = tasks
|
133
207
|
@clis = clis
|
134
208
|
end
|
135
209
|
|
210
|
+
sig { void }
|
136
211
|
def run
|
137
212
|
tasks.each do |task|
|
138
213
|
pipes = Pipes.build(clis)
|
@@ -160,6 +235,7 @@ module Kuby
|
|
160
235
|
|
161
236
|
private
|
162
237
|
|
238
|
+
sig { params(pipe: Pipe).void }
|
163
239
|
def print_streams(pipe)
|
164
240
|
unless pipe.out.string.strip.empty?
|
165
241
|
puts("========= #{pipe.name.upcase} STDOUT ========")
|
@@ -172,27 +248,37 @@ module Kuby
|
|
172
248
|
end
|
173
249
|
end
|
174
250
|
|
251
|
+
sig { params(ex: T.nilable(StandardError)).void }
|
175
252
|
def print_error(ex)
|
176
253
|
return unless ex
|
177
254
|
puts("========= RUBY ERROR ========")
|
178
255
|
puts(ex.message)
|
179
|
-
puts(ex.backtrace.join("\n"))
|
256
|
+
puts(T.must(ex.backtrace).join("\n"))
|
180
257
|
end
|
181
258
|
end
|
182
259
|
|
183
260
|
class DevSetup
|
261
|
+
extend T::Sig
|
262
|
+
|
263
|
+
sig { returns(Environment) }
|
184
264
|
attr_reader :environment
|
185
265
|
|
266
|
+
sig { params(environment: Environment).void }
|
186
267
|
def initialize(environment)
|
187
|
-
@environment = environment
|
268
|
+
@environment = T.let(environment, Environment)
|
269
|
+
@setup_tasks = T.let(@setup_tasks, T.nilable(T::Array[SetupTask]))
|
270
|
+
@clis = T.let(@clis, T.nilable(T::Hash[Symbol, T.untyped]))
|
271
|
+
@tasks = T.let(@tasks, T.nilable(Tasks))
|
188
272
|
end
|
189
273
|
|
274
|
+
sig { void }
|
190
275
|
def run
|
191
276
|
SetupTaskList.new(setup_tasks, clis).run
|
192
277
|
end
|
193
278
|
|
194
279
|
private
|
195
280
|
|
281
|
+
sig { returns(T::Array[SetupTask]) }
|
196
282
|
def setup_tasks
|
197
283
|
@setup_tasks ||= [
|
198
284
|
SetupTask.new(
|
@@ -231,14 +317,17 @@ module Kuby
|
|
231
317
|
]
|
232
318
|
end
|
233
319
|
|
320
|
+
sig { returns(Kubernetes::Spec) }
|
234
321
|
def kubernetes
|
235
322
|
environment.kubernetes
|
236
323
|
end
|
237
324
|
|
325
|
+
sig { returns(Docker::Spec) }
|
238
326
|
def docker
|
239
327
|
environment.docker
|
240
328
|
end
|
241
329
|
|
330
|
+
sig { returns T::Hash[Symbol, T.untyped] }
|
242
331
|
def clis
|
243
332
|
@clis ||= {
|
244
333
|
kubectl: kubernetes.provider.kubernetes_cli,
|
@@ -249,6 +338,7 @@ module Kuby
|
|
249
338
|
}
|
250
339
|
end
|
251
340
|
|
341
|
+
sig { returns(Tasks) }
|
252
342
|
def tasks
|
253
343
|
@tasks ||= Kuby::Tasks.new(environment)
|
254
344
|
end
|
@@ -3,6 +3,16 @@ require 'rails/generators'
|
|
3
3
|
require 'rails/generators/base'
|
4
4
|
|
5
5
|
class KubyGenerator < Rails::Generators::Base
|
6
|
+
def create_initializer_file
|
7
|
+
create_file(
|
8
|
+
File.join(*%w(config initializers kuby.rb)),
|
9
|
+
<<~END
|
10
|
+
require 'kuby'
|
11
|
+
Kuby.load!
|
12
|
+
END
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
6
16
|
def create_config_file
|
7
17
|
create_file(
|
8
18
|
'kuby.rb',
|
data/lib/kuby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kuby-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cameron Dutro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|