bootinq 1.4.2 → 1.7
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/Gemfile +8 -0
- data/README.md +1 -1
- data/lib/bootinq/version.rb +1 -1
- data/lib/bootinq.rb +82 -35
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab4d92e0581dec34e3b8c35ab842953fc6c488a7ff7a79aab4e155e0ec04b598
|
4
|
+
data.tar.gz: 8d1b03413cb95941d3c34fa33e5167ae717a1152fb824f9fc4ca4c95232e3374
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 957af1a041fb5230543b149ae7bb3fa14b455e0070232c60afe617c6dfce34712d3d9ea118aad38d2fd824ef253cb6af38a1e4a115d9f5862a2680ce4d2a48e2
|
7
|
+
data.tar.gz: 3dcecd28f93e44b34e7401fb6c4702754f57cac19706996a74fdbc306a9251d0fd7f8360afcd07470d37627461af4ecf1ea45e03f626b52543123d1991453d72
|
data/Gemfile
CHANGED
@@ -32,6 +32,14 @@ group :shared_boot do
|
|
32
32
|
gem 'shared', path: 'spec/dummy/engines/shared'
|
33
33
|
end
|
34
34
|
|
35
|
+
group :api_part_boot do
|
36
|
+
gem 'api_part', path: 'spec/dummy/engines/api_part'
|
37
|
+
end
|
38
|
+
|
35
39
|
group :api_boot do
|
36
40
|
gem 'api', path: 'spec/dummy/engines/api'
|
41
|
+
end
|
42
|
+
|
43
|
+
group :api2_boot do
|
44
|
+
gem 'api2', path: 'spec/dummy/engines/api2'
|
37
45
|
end
|
data/README.md
CHANGED
data/lib/bootinq/version.rb
CHANGED
data/lib/bootinq.rb
CHANGED
@@ -37,7 +37,7 @@ require "bootinq/switch"
|
|
37
37
|
# == Example <tt>config/bootinq.yml</tt>:
|
38
38
|
#
|
39
39
|
# env_key: BOOTINQ
|
40
|
-
# default:
|
40
|
+
# default: a
|
41
41
|
#
|
42
42
|
# parts:
|
43
43
|
# s: :shared
|
@@ -45,6 +45,11 @@ require "bootinq/switch"
|
|
45
45
|
# mount:
|
46
46
|
# a: :api
|
47
47
|
# f: :engine
|
48
|
+
#
|
49
|
+
# deps:
|
50
|
+
# shared:
|
51
|
+
# in: af
|
52
|
+
#
|
48
53
|
class Bootinq
|
49
54
|
include Singleton
|
50
55
|
|
@@ -52,18 +57,24 @@ class Bootinq
|
|
52
57
|
"env_key" => 'BOOTINQ',
|
53
58
|
"default" => '',
|
54
59
|
"parts" => {},
|
55
|
-
"mount" => {}
|
60
|
+
"mount" => {},
|
61
|
+
"deps" => {}
|
56
62
|
}.freeze
|
57
63
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
+
ALL = %i[* all].freeze
|
65
|
+
|
66
|
+
FilterNegValue = -> (value, config) do
|
67
|
+
if value.start_with?(?-, ?^)
|
68
|
+
value = value.tr('\\-', '\\^')
|
69
|
+
flags = (config['parts'].keys + config['mount'].keys).join
|
70
|
+
[true, flags.delete(flags.delete(value))]
|
71
|
+
else
|
72
|
+
[false, value.dup]
|
64
73
|
end
|
65
74
|
end
|
66
75
|
|
76
|
+
private_constant :FilterNegValue
|
77
|
+
|
67
78
|
# :call-seq:
|
68
79
|
# Bootinq.require(*groups, verbose: false, &block)
|
69
80
|
#
|
@@ -99,27 +110,32 @@ class Bootinq
|
|
99
110
|
instance.ready!
|
100
111
|
end
|
101
112
|
|
113
|
+
# Reads config from the given or default path, deserializes it and returns as a hash.
|
114
|
+
def self.deserialized_config(path: nil)
|
115
|
+
bootinq_yaml = File.read(path || ENV.fetch('BOOTINQ_PATH'))
|
116
|
+
YAML.safe_load(bootinq_yaml, [Symbol])
|
117
|
+
end
|
118
|
+
|
102
119
|
attr_reader :flags
|
103
120
|
attr_reader :components
|
104
121
|
|
105
|
-
delegated :flags
|
106
|
-
delegated :components
|
107
|
-
|
108
122
|
def initialize # :no-doc:
|
109
|
-
|
110
|
-
config = YAML.safe_load(File.read(config_path), [Symbol])
|
123
|
+
config = self.class.deserialized_config
|
111
124
|
config.merge!(DEFAULT) { |_, l, r| l.nil? ? r : l }
|
112
125
|
|
113
|
-
@
|
114
|
-
@_neg
|
126
|
+
@_orig_value = ENV.fetch(config['env_key']) { config['default'] }
|
127
|
+
@_neg, @_value = FilterNegValue[@_orig_value, config]
|
128
|
+
|
129
|
+
@_deps = config['deps']
|
130
|
+
|
115
131
|
@flags = []
|
116
132
|
@components = []
|
117
133
|
|
118
|
-
config['parts'].each { |flag, name| enable_component(name, flag: flag) }
|
119
|
-
config['mount'].each { |flag, name| enable_component(name, flag: flag, as: Mountable) }
|
134
|
+
config['parts'].each { |flag, name| enable_component(name, flag: flag.to_s) }
|
135
|
+
config['mount'].each { |flag, name| enable_component(name, flag: flag.to_s, as: Mountable) }
|
120
136
|
end
|
121
137
|
|
122
|
-
|
138
|
+
def ready? # :no-doc:
|
123
139
|
!!@ready
|
124
140
|
end
|
125
141
|
|
@@ -128,7 +144,7 @@ class Bootinq
|
|
128
144
|
#
|
129
145
|
# At the first call marks Bootinq as ready and returns the instance,
|
130
146
|
# otherwise returns nil.
|
131
|
-
|
147
|
+
def ready!
|
132
148
|
return if ready?
|
133
149
|
@ready = true
|
134
150
|
if defined?(@_on_ready)
|
@@ -141,8 +157,8 @@ class Bootinq
|
|
141
157
|
# :call-seq:
|
142
158
|
# Bootinq.enable_component(name, flag: [, as: Component])
|
143
159
|
#
|
144
|
-
|
145
|
-
if
|
160
|
+
def enable_component(name, flag:, as: Component)
|
161
|
+
if is_dependency?(name) || @_value.include?(flag)
|
146
162
|
@flags << flag
|
147
163
|
@components << as.new(name)
|
148
164
|
end
|
@@ -153,8 +169,8 @@ class Bootinq
|
|
153
169
|
#
|
154
170
|
# Checks if a component with the given name (i.e. the same gem group)
|
155
171
|
# is enabled
|
156
|
-
|
157
|
-
components.include?(name)
|
172
|
+
def enabled?(name)
|
173
|
+
ALL.include?(name) || components.include?(name)
|
158
174
|
end
|
159
175
|
|
160
176
|
# :call-seq:
|
@@ -162,12 +178,11 @@ class Bootinq
|
|
162
178
|
# Bootinq[name] -> Bootinq::Component
|
163
179
|
#
|
164
180
|
# Returns a <tt>Bootinq::Component</tt> object by its name
|
165
|
-
|
181
|
+
def component(name)
|
166
182
|
components[components.index(name)]
|
167
183
|
end
|
168
184
|
|
169
185
|
alias :[] :component
|
170
|
-
delegated :[]
|
171
186
|
|
172
187
|
# :call-seq:
|
173
188
|
# Bootinq.each_mountable { |part| block } -> Array
|
@@ -177,7 +192,7 @@ class Bootinq
|
|
177
192
|
# passing that part as a parameter. Returns the array of all mountable components.
|
178
193
|
#
|
179
194
|
# If no block is given, an Enumerator is returned.
|
180
|
-
|
195
|
+
def each_mountable(&block) # :yields: part
|
181
196
|
components.select(&:mountable?).each(&block)
|
182
197
|
end
|
183
198
|
|
@@ -187,7 +202,7 @@ class Bootinq
|
|
187
202
|
# Merges enabled Bootinq's groups with the given groups and, if loaded with Rails,
|
188
203
|
# passes them to <tt>Rails.groups</tt> method, otherwise just returns the merged list
|
189
204
|
# to use with <tt>Bundler.require</tt>.
|
190
|
-
|
205
|
+
def groups(*groups)
|
191
206
|
groups.unshift(*components.map(&:group))
|
192
207
|
if defined?(Rails)
|
193
208
|
Rails.groups(*groups)
|
@@ -219,7 +234,12 @@ class Bootinq
|
|
219
234
|
# Bootinq.on all: %i(frontend backend) do
|
220
235
|
# # do something when frontend and backend are enabled
|
221
236
|
# end
|
222
|
-
|
237
|
+
def on(name = nil, any: nil, all: nil) # :yields:
|
238
|
+
if ALL.include?(name)
|
239
|
+
yield
|
240
|
+
return true
|
241
|
+
end
|
242
|
+
|
223
243
|
if name.nil? && any.nil? && all.nil?
|
224
244
|
raise ArgumentError, "wrong arguments (given 0, expected 1)"
|
225
245
|
elsif (any && all) || (name && (any || all))
|
@@ -239,8 +259,8 @@ class Bootinq
|
|
239
259
|
#
|
240
260
|
# Takes a list of component names and yields a given block (optionally)
|
241
261
|
# if all of them are enabled. Returns boolean matching status.
|
242
|
-
|
243
|
-
is_matched = parts.all? { |
|
262
|
+
def on_all(*parts) # :yields:
|
263
|
+
is_matched = parts.all? { |part| enabled?(part) }
|
244
264
|
yield if is_matched && block_given?
|
245
265
|
is_matched
|
246
266
|
end
|
@@ -250,14 +270,14 @@ class Bootinq
|
|
250
270
|
#
|
251
271
|
# Takes a list of component names and yields a given block (optionally)
|
252
272
|
# if any of them are enabled. Returns boolean matching status.
|
253
|
-
|
254
|
-
is_matched = parts.any? { |
|
273
|
+
def on_any(*parts) # :yields:
|
274
|
+
is_matched = parts.any? { |part| enabled?(part) }
|
255
275
|
yield if is_matched && block_given?
|
256
276
|
is_matched
|
257
277
|
end
|
258
278
|
|
259
279
|
# :call-seq:
|
260
|
-
#
|
280
|
+
# Bootinq.switch(*parts) { block } -> nil
|
261
281
|
#
|
262
282
|
# Collector method.
|
263
283
|
#
|
@@ -267,17 +287,44 @@ class Bootinq
|
|
267
287
|
# part.frontend { … }
|
268
288
|
# part.backend { … }
|
269
289
|
# end
|
270
|
-
|
290
|
+
def switch # :yields: Bootinq::Switch.new
|
271
291
|
yield(Switch.new)
|
272
292
|
nil
|
273
293
|
end
|
274
294
|
|
295
|
+
# :call-seq:
|
296
|
+
# is_dependency?(part_name) -> true or false
|
297
|
+
#
|
298
|
+
# Checks if the named component is a dependency of the enabled one.
|
299
|
+
def is_dependency?(name)
|
300
|
+
@_deps.key?(name) && @_value.count(@_deps[name]['in'].to_s) > 0
|
301
|
+
end
|
302
|
+
|
275
303
|
# Freezes every instance variables and the instance itself.
|
276
304
|
def freeze
|
277
305
|
@_value.freeze
|
278
|
-
@_neg
|
306
|
+
@_neg
|
279
307
|
@flags.freeze
|
280
308
|
@components.freeze
|
281
309
|
super
|
282
310
|
end
|
311
|
+
|
312
|
+
extend SingleForwardable
|
313
|
+
|
314
|
+
delegate %I[
|
315
|
+
component
|
316
|
+
components
|
317
|
+
each_mountable
|
318
|
+
enabled?
|
319
|
+
enable_component
|
320
|
+
flags
|
321
|
+
groups
|
322
|
+
on
|
323
|
+
on_all
|
324
|
+
on_any
|
325
|
+
ready!
|
326
|
+
ready?
|
327
|
+
switch
|
328
|
+
[]
|
329
|
+
] => :instance
|
283
330
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootinq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.7'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -64,7 +64,7 @@ homepage: https://github.com/estum/bootinq
|
|
64
64
|
licenses:
|
65
65
|
- MIT
|
66
66
|
metadata: {}
|
67
|
-
post_install_message:
|
67
|
+
post_install_message:
|
68
68
|
rdoc_options: []
|
69
69
|
require_paths:
|
70
70
|
- lib
|
@@ -80,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
80
|
version: '0'
|
81
81
|
requirements: []
|
82
82
|
rubygems_version: 3.0.3
|
83
|
-
signing_key:
|
83
|
+
signing_key:
|
84
84
|
specification_version: 4
|
85
85
|
summary: Rails Boot Inquirer
|
86
86
|
test_files: []
|