dry-system 0.15.0 → 0.18.2
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 +58 -2
- data/dry-system.gemspec +3 -1
- data/lib/dry/system/auto_registrar.rb +5 -5
- data/lib/dry/system/booter.rb +49 -41
- data/lib/dry/system/component.rb +7 -7
- data/lib/dry/system/components/bootable.rb +6 -34
- data/lib/dry/system/components/config.rb +2 -2
- data/lib/dry/system/components.rb +2 -2
- data/lib/dry/system/constants.rb +5 -5
- data/lib/dry/system/container.rb +60 -45
- data/lib/dry/system/errors.rb +1 -5
- data/lib/dry/system/lifecycle.rb +2 -2
- data/lib/dry/system/loader.rb +1 -1
- data/lib/dry/system/magic_comments_parser.rb +2 -2
- data/lib/dry/system/manual_registrar.rb +1 -1
- data/lib/dry/system/plugins/bootsnap.rb +3 -3
- data/lib/dry/system/plugins/dependency_graph/strategies.rb +1 -1
- data/lib/dry/system/plugins/dependency_graph.rb +3 -3
- data/lib/dry/system/plugins/logging.rb +3 -6
- data/lib/dry/system/plugins/monitoring/proxy.rb +3 -3
- data/lib/dry/system/plugins/monitoring.rb +3 -3
- data/lib/dry/system/plugins/notifications.rb +1 -1
- data/lib/dry/system/plugins.rb +7 -7
- data/lib/dry/system/provider.rb +3 -3
- data/lib/dry/system/settings/file_loader.rb +2 -2
- data/lib/dry/system/settings/file_parser.rb +1 -1
- data/lib/dry/system/settings.rb +6 -6
- data/lib/dry/system/stubs.rb +1 -1
- data/lib/dry/system/system_components/settings.rb +1 -1
- data/lib/dry/system/version.rb +1 -1
- data/lib/dry/system.rb +2 -2
- data/lib/dry-system.rb +1 -1
- metadata +11 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de2d1a6333450270f4b10f90b2dfc7c3436b9885504544224970e3075bae0a90
|
4
|
+
data.tar.gz: a7506b0e02c0b3511b921d3390562d1ad59f67ffb8970c9573b5fd5f5437bbc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab86a3f981d2bf26468a950f31d90993f096e2c8523fd275762f42ab5728e74e2fbc038b30566eecfaf41f15792bc34fedc2bd8733ffc6c03bb7ede4715b0cc0
|
7
|
+
data.tar.gz: 4969d94cc2e88c17646f96904e309892c02bbfbc311b08523ca01ff2bd3b08c3c132bf4f0eb641f7a6b6043f424fda0ffdb99ea3ef36ca899ce7a4790b258a43
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,60 @@
|
|
1
|
-
##
|
1
|
+
## 0.18.2 2021-08-30
|
2
|
+
|
3
|
+
|
4
|
+
### Changed
|
5
|
+
|
6
|
+
- [internal] Improved compatibility with upcoming dry-configurable 0.13.0 release (@timriley in #187)
|
7
|
+
|
8
|
+
[Compare v0.18.1...v0.18.2](https://github.com/dry-rb/dry-system/compare/v0.18.1...v0.18.2)
|
9
|
+
|
10
|
+
## 0.18.1 2020-08-26
|
11
|
+
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
- Made `Booter#boot_files` a public method again, since it was required by dry-rails (@timriley)
|
16
|
+
|
17
|
+
|
18
|
+
[Compare v0.18.0...v0.18.1](https://github.com/dry-rb/dry-system/compare/v0.18.0...v0.18.1)
|
19
|
+
|
20
|
+
## 0.18.0 2020-08-24
|
21
|
+
|
22
|
+
|
23
|
+
### Added
|
24
|
+
|
25
|
+
- New `bootable_dirs` setting on `Dry::System::Container`, which accepts paths to multiple directories for looking up bootable component files. (@timriley in PR #151)
|
26
|
+
|
27
|
+
For each entry in the `bootable_dirs` array, relative directories will be appended to the container's `root`, and absolute directories will be left unchanged.
|
28
|
+
|
29
|
+
When searching for bootable files, the first match will win, and any subsequent same-named files will not be loaded. In this way, the `bootable_dirs` act similarly to the `$PATH` in a shell environment.
|
30
|
+
|
31
|
+
|
32
|
+
[Compare v0.17.0...v0.18.0](https://github.com/dry-rb/dry-system/compare/v0.17.0...v0.18.0)
|
33
|
+
|
34
|
+
## 0.17.0 2020-02-19
|
35
|
+
|
36
|
+
|
37
|
+
### Fixed
|
38
|
+
|
39
|
+
- Works with the latest dry-configurable version (issue #141) (@solnic)
|
40
|
+
|
41
|
+
### Changed
|
42
|
+
|
43
|
+
- Depends on dry-configurable `=> 0.11.1` now (@solnic)
|
44
|
+
|
45
|
+
[Compare v0.16.0...v0.17.0](https://github.com/dry-rb/dry-system/compare/v0.16.0...v0.17.0)
|
46
|
+
|
47
|
+
## 0.16.0 2020-02-15
|
48
|
+
|
49
|
+
|
50
|
+
### Changed
|
51
|
+
|
52
|
+
- Plugins can now define their own settings which are available in the `before(:configure)` hook (@solnic)
|
53
|
+
- Dependency on dry-configurable was bumped to `~> 0.11` (@solnic)
|
54
|
+
|
55
|
+
[Compare v0.15.0...v0.16.0](https://github.com/dry-rb/dry-system/compare/v0.15.0...v0.16.0)
|
56
|
+
|
57
|
+
## 0.15.0 2020-01-30
|
2
58
|
|
3
59
|
|
4
60
|
### Added
|
@@ -18,7 +74,7 @@ after(:configure) { config.my_new_setting = "awesome" }
|
|
18
74
|
- Centralize error definitions in `lib/dry/system/errors.rb` (@cgeorgii)
|
19
75
|
- All built-in plugins use `before(:configure)` now to declare their settings (@solnic)
|
20
76
|
|
21
|
-
[Compare v0.14.1...
|
77
|
+
[Compare v0.14.1...v0.15.0](https://github.com/dry-rb/dry-system/compare/v0.14.1...v0.15.0)
|
22
78
|
|
23
79
|
## 0.14.1 2020-01-22
|
24
80
|
|
data/dry-system.gemspec
CHANGED
@@ -16,6 +16,8 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.description = spec.summary
|
17
17
|
spec.homepage = 'https://dry-rb.org/gems/dry-system'
|
18
18
|
spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "dry-system.gemspec", "lib/**/*"]
|
19
|
+
spec.bindir = 'bin'
|
20
|
+
spec.executables = []
|
19
21
|
spec.require_paths = ['lib']
|
20
22
|
|
21
23
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
@@ -28,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
28
30
|
# to update dependencies edit project.yml
|
29
31
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
|
30
32
|
spec.add_runtime_dependency "dry-auto_inject", ">= 0.4.0"
|
31
|
-
spec.add_runtime_dependency "dry-configurable", "~> 0.
|
33
|
+
spec.add_runtime_dependency "dry-configurable", "~> 0.11", ">= 0.11.1"
|
32
34
|
spec.add_runtime_dependency "dry-container", "~> 0.7", ">= 0.7.2"
|
33
35
|
spec.add_runtime_dependency "dry-core", "~> 0.3", ">= 0.3.1"
|
34
36
|
spec.add_runtime_dependency "dry-equalizer", "~> 0.2"
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "dry/system/constants"
|
4
|
+
require "dry/system/magic_comments_parser"
|
5
|
+
require "dry/system/auto_registrar/configuration"
|
6
6
|
|
7
7
|
module Dry
|
8
8
|
module System
|
@@ -67,8 +67,8 @@ module Dry
|
|
67
67
|
|
68
68
|
# @api private
|
69
69
|
def relative_path(dir, file_path)
|
70
|
-
dir_root = root.join(dir.to_s.split(
|
71
|
-
file_path.to_s.sub("#{dir_root}/",
|
70
|
+
dir_root = root.join(dir.to_s.split("/")[0])
|
71
|
+
file_path.to_s.sub("#{dir_root}/", "").sub(RB_EXT, EMPTY_STRING)
|
72
72
|
end
|
73
73
|
|
74
74
|
# @api private
|
data/lib/dry/system/booter.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
3
|
+
require "dry/system/components/bootable"
|
4
|
+
require "dry/system/errors"
|
5
|
+
require "dry/system/constants"
|
6
|
+
require "dry/system/lifecycle"
|
7
|
+
require "dry/system/booter/component_registry"
|
8
|
+
require "pathname"
|
8
9
|
|
9
10
|
module Dry
|
10
11
|
module System
|
@@ -16,29 +17,22 @@ module Dry
|
|
16
17
|
#
|
17
18
|
# @api private
|
18
19
|
class Booter
|
19
|
-
attr_reader :
|
20
|
+
attr_reader :paths
|
20
21
|
|
21
22
|
attr_reader :booted
|
22
23
|
|
23
24
|
attr_reader :components
|
24
25
|
|
25
26
|
# @api private
|
26
|
-
def initialize(
|
27
|
-
@
|
27
|
+
def initialize(paths)
|
28
|
+
@paths = paths
|
28
29
|
@booted = []
|
29
30
|
@components = ComponentRegistry.new
|
30
31
|
end
|
31
32
|
|
32
33
|
# @api private
|
33
34
|
def bootable?(component)
|
34
|
-
boot_file(component).
|
35
|
-
end
|
36
|
-
|
37
|
-
# @api private
|
38
|
-
def boot_file(name)
|
39
|
-
name = name.respond_to?(:root_key) ? name.root_key.to_s : name
|
40
|
-
|
41
|
-
path.join("#{name}#{RB_EXT}")
|
35
|
+
!boot_file(component).nil?
|
42
36
|
end
|
43
37
|
|
44
38
|
# @api private
|
@@ -47,15 +41,6 @@ module Dry
|
|
47
41
|
self
|
48
42
|
end
|
49
43
|
|
50
|
-
# @api private
|
51
|
-
def load_component(path)
|
52
|
-
identifier = Pathname(path).basename(RB_EXT).to_s.to_sym
|
53
|
-
|
54
|
-
Kernel.require path unless components.exists?(identifier)
|
55
|
-
|
56
|
-
self
|
57
|
-
end
|
58
|
-
|
59
44
|
# @api private
|
60
45
|
def finalize!
|
61
46
|
boot_files.each do |path|
|
@@ -120,7 +105,7 @@ module Dry
|
|
120
105
|
# @api private
|
121
106
|
def call(name_or_component)
|
122
107
|
with_component(name_or_component) do |component|
|
123
|
-
raise ComponentFileMismatchError
|
108
|
+
raise ComponentFileMismatchError, name unless component
|
124
109
|
|
125
110
|
yield(component) if block_given?
|
126
111
|
|
@@ -129,11 +114,30 @@ module Dry
|
|
129
114
|
end
|
130
115
|
|
131
116
|
# @api private
|
132
|
-
def
|
133
|
-
|
117
|
+
def boot_dependency(component)
|
118
|
+
boot_file = boot_file(component)
|
119
|
+
|
120
|
+
start(boot_file.basename(".*").to_s.to_sym) if boot_file
|
134
121
|
end
|
135
122
|
|
136
123
|
# @api private
|
124
|
+
def boot_files
|
125
|
+
@boot_files ||= paths.each_with_object([[], []]) { |path, (boot_files, loaded)|
|
126
|
+
files = Dir["#{path}/#{RB_GLOB}"].sort
|
127
|
+
|
128
|
+
files.each do |file|
|
129
|
+
basename = File.basename(file)
|
130
|
+
|
131
|
+
unless loaded.include?(basename)
|
132
|
+
boot_files << Pathname(file)
|
133
|
+
loaded << basename
|
134
|
+
end
|
135
|
+
end
|
136
|
+
}.first
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
137
141
|
def with_component(id_or_component)
|
138
142
|
component =
|
139
143
|
case id_or_component
|
@@ -149,24 +153,28 @@ module Dry
|
|
149
153
|
yield(component)
|
150
154
|
end
|
151
155
|
|
152
|
-
|
153
|
-
|
154
|
-
boot_file = boot_files.detect { |path|
|
155
|
-
Pathname(path).basename(RB_EXT).to_s == identifier.to_s
|
156
|
-
}
|
156
|
+
def load_component(path)
|
157
|
+
identifier = Pathname(path).basename(RB_EXT).to_s.to_sym
|
157
158
|
|
158
|
-
Kernel.require
|
159
|
+
Kernel.require path unless components.exists?(identifier)
|
160
|
+
|
161
|
+
self
|
159
162
|
end
|
160
163
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
+
def boot_file(name)
|
165
|
+
name = name.respond_to?(:root_key) ? name.root_key.to_s : name
|
166
|
+
|
167
|
+
find_boot_file(name)
|
164
168
|
end
|
165
169
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
+
def require_boot_file(identifier)
|
171
|
+
boot_file = find_boot_file(identifier)
|
172
|
+
|
173
|
+
Kernel.require boot_file if boot_file
|
174
|
+
end
|
175
|
+
|
176
|
+
def find_boot_file(name)
|
177
|
+
boot_files.detect { |file| File.basename(file, RB_EXT) == name.to_s }
|
170
178
|
end
|
171
179
|
end
|
172
180
|
end
|
data/lib/dry/system/component.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "concurrent/map"
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
5
|
+
require "dry-equalizer"
|
6
|
+
require "dry/inflector"
|
7
|
+
require "dry/system/loader"
|
8
|
+
require "dry/system/errors"
|
9
|
+
require "dry/system/constants"
|
10
10
|
|
11
11
|
module Dry
|
12
12
|
module System
|
@@ -118,7 +118,7 @@ module Dry
|
|
118
118
|
ruby2_keywords(:instance) if respond_to?(:ruby2_keywords, true)
|
119
119
|
|
120
120
|
# @api private
|
121
|
-
def
|
121
|
+
def bootable?
|
122
122
|
false
|
123
123
|
end
|
124
124
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
3
|
+
require "dry/system/lifecycle"
|
4
|
+
require "dry/system/settings"
|
5
|
+
require "dry/system/components/config"
|
6
|
+
require "dry/system/constants"
|
7
7
|
|
8
8
|
module Dry
|
9
9
|
module System
|
@@ -70,7 +70,7 @@ module Dry
|
|
70
70
|
@config = nil
|
71
71
|
@config_block = nil
|
72
72
|
@identifier = identifier
|
73
|
-
@triggers = {
|
73
|
+
@triggers = {before: TRIGGER_MAP.dup, after: TRIGGER_MAP.dup}
|
74
74
|
@options = block ? options.merge(block: block) : options
|
75
75
|
@namespace = options[:namespace]
|
76
76
|
finalize = options[:finalize] || DEFAULT_FINALIZE
|
@@ -229,38 +229,10 @@ module Dry
|
|
229
229
|
# @return [TrueClass]
|
230
230
|
#
|
231
231
|
# @api private
|
232
|
-
def
|
232
|
+
def bootable?
|
233
233
|
true
|
234
234
|
end
|
235
235
|
|
236
|
-
# Return path to component's boot file
|
237
|
-
#
|
238
|
-
# @return [String]
|
239
|
-
#
|
240
|
-
# @api private
|
241
|
-
def boot_file
|
242
|
-
container_boot_files
|
243
|
-
.detect { |path| Pathname(path).basename(RB_EXT).to_s == identifier.to_s }
|
244
|
-
end
|
245
|
-
|
246
|
-
# Return path to boot dir
|
247
|
-
#
|
248
|
-
# @return [String]
|
249
|
-
#
|
250
|
-
# @api private
|
251
|
-
def boot_path
|
252
|
-
container.boot_path
|
253
|
-
end
|
254
|
-
|
255
|
-
# Return all boot files defined under container's boot path
|
256
|
-
#
|
257
|
-
# @return [String]
|
258
|
-
#
|
259
|
-
# @api private
|
260
|
-
def container_boot_files
|
261
|
-
::Dir[container.boot_path.join("**/#{RB_GLOB}")].sort
|
262
|
-
end
|
263
|
-
|
264
236
|
private
|
265
237
|
|
266
238
|
# Return lifecycle object used for this component
|
@@ -21,8 +21,8 @@ module Dry
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def method_missing(meth, value = nil)
|
24
|
-
if meth.to_s.end_with?(
|
25
|
-
@settings[meth.to_s.gsub(
|
24
|
+
if meth.to_s.end_with?("=")
|
25
|
+
@settings[meth.to_s.gsub("=", "").to_sym] = value
|
26
26
|
elsif @settings.key?(meth)
|
27
27
|
@settings[meth]
|
28
28
|
else
|
data/lib/dry/system/constants.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/core/constants"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module System
|
7
7
|
include Dry::Core::Constants
|
8
8
|
|
9
|
-
RB_EXT =
|
10
|
-
RB_GLOB =
|
11
|
-
PATH_SEPARATOR =
|
12
|
-
DEFAULT_SEPARATOR =
|
9
|
+
RB_EXT = ".rb"
|
10
|
+
RB_GLOB = "*.rb"
|
11
|
+
PATH_SEPARATOR = "/"
|
12
|
+
DEFAULT_SEPARATOR = "."
|
13
13
|
WORD_REGEX = /\w+/.freeze
|
14
14
|
end
|
15
15
|
end
|
data/lib/dry/system/container.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
|
10
|
-
require
|
11
|
-
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
3
|
+
require "pathname"
|
4
|
+
|
5
|
+
require "dry-auto_inject"
|
6
|
+
require "dry-configurable"
|
7
|
+
require "dry-container"
|
8
|
+
require "dry/inflector"
|
9
|
+
|
10
|
+
require "dry/core/deprecations"
|
11
|
+
|
12
|
+
require "dry/system"
|
13
|
+
require "dry/system/errors"
|
14
|
+
require "dry/system/loader"
|
15
|
+
require "dry/system/booter"
|
16
|
+
require "dry/system/auto_registrar"
|
17
|
+
require "dry/system/manual_registrar"
|
18
|
+
require "dry/system/importer"
|
19
|
+
require "dry/system/component"
|
20
|
+
require "dry/system/constants"
|
21
|
+
require "dry/system/plugins"
|
22
22
|
|
23
23
|
module Dry
|
24
24
|
module System
|
@@ -48,8 +48,6 @@ module Dry
|
|
48
48
|
#
|
49
49
|
# * `:name` - a unique container identifier
|
50
50
|
# * `:root` - a system root directory (defaults to `pwd`)
|
51
|
-
# * `:system_dir` - directory name relative to root, where bootable components
|
52
|
-
# can be defined in `boot` dir this defaults to `system`
|
53
51
|
#
|
54
52
|
# @example
|
55
53
|
# class MyApp < Dry::System::Container
|
@@ -75,8 +73,9 @@ module Dry
|
|
75
73
|
setting :name
|
76
74
|
setting :default_namespace
|
77
75
|
setting(:root, Pathname.pwd.freeze) { |path| Pathname(path) }
|
78
|
-
setting :system_dir,
|
79
|
-
setting :
|
76
|
+
setting :system_dir, "system"
|
77
|
+
setting :bootable_dirs, ["system/boot"]
|
78
|
+
setting :registrations_dir, "container"
|
80
79
|
setting :auto_register, []
|
81
80
|
setting :inflector, Dry::Inflector.new
|
82
81
|
setting :loader, Dry::System::Loader
|
@@ -95,7 +94,20 @@ module Dry
|
|
95
94
|
end
|
96
95
|
end
|
97
96
|
|
98
|
-
extend Dry::Core::Deprecations[
|
97
|
+
extend Dry::Core::Deprecations["Dry::System::Container"]
|
98
|
+
|
99
|
+
# Define a new configuration setting
|
100
|
+
#
|
101
|
+
# @see https://dry-rb.org/gems/dry-configurable
|
102
|
+
#
|
103
|
+
# @api public
|
104
|
+
def setting(name, *args, &block)
|
105
|
+
super(name, *args, &block)
|
106
|
+
# TODO: dry-configurable needs a public API for this
|
107
|
+
config._settings << _settings[name]
|
108
|
+
self
|
109
|
+
end
|
110
|
+
ruby2_keywords(:setting) if respond_to?(:ruby2_keywords, true)
|
99
111
|
|
100
112
|
# Configures the container
|
101
113
|
#
|
@@ -158,9 +170,10 @@ module Dry
|
|
158
170
|
|
159
171
|
# Registers finalization function for a bootable component
|
160
172
|
#
|
161
|
-
# By convention, boot files for components should be placed in
|
162
|
-
#
|
163
|
-
# are loaded in isolation, or during finalization
|
173
|
+
# By convention, boot files for components should be placed in a
|
174
|
+
# `bootable_dirs` entry and they will be loaded on demand when
|
175
|
+
# components are loaded in isolation, or during the finalization
|
176
|
+
# process.
|
164
177
|
#
|
165
178
|
# @example
|
166
179
|
# # system/container.rb
|
@@ -243,30 +256,24 @@ module Dry
|
|
243
256
|
boot_local(name, **opts, &block)
|
244
257
|
end
|
245
258
|
|
259
|
+
booter.register_component component
|
260
|
+
|
246
261
|
components[name] = component
|
247
262
|
end
|
248
263
|
deprecate :finalize, :boot
|
249
264
|
|
250
265
|
# @api private
|
251
266
|
def boot_external(identifier, from:, key: nil, namespace: nil, &block)
|
252
|
-
|
267
|
+
System.providers[from].component(
|
253
268
|
identifier, key: key, namespace: namespace, finalize: block, container: self
|
254
269
|
)
|
255
|
-
|
256
|
-
booter.register_component(component)
|
257
|
-
|
258
|
-
component
|
259
270
|
end
|
260
271
|
|
261
272
|
# @api private
|
262
273
|
def boot_local(identifier, namespace: nil, &block)
|
263
|
-
|
274
|
+
Components::Bootable.new(
|
264
275
|
identifier, container: self, namespace: namespace, &block
|
265
276
|
)
|
266
|
-
|
267
|
-
booter.register_component(component)
|
268
|
-
|
269
|
-
component
|
270
277
|
end
|
271
278
|
|
272
279
|
# Return if a container was finalized
|
@@ -476,7 +483,7 @@ module Dry
|
|
476
483
|
# @param options [Hash] injector options
|
477
484
|
#
|
478
485
|
# @api public
|
479
|
-
def injector(options = {
|
486
|
+
def injector(options = {strategies: strategies})
|
480
487
|
Dry::AutoInject(self, options)
|
481
488
|
end
|
482
489
|
|
@@ -494,7 +501,7 @@ module Dry
|
|
494
501
|
# @api public
|
495
502
|
def require_from_root(*paths)
|
496
503
|
paths.flat_map { |path|
|
497
|
-
path.to_s.include?(
|
504
|
+
path.to_s.include?("*") ? ::Dir[root.join(path)].sort : root.join(path)
|
498
505
|
}.each { |path|
|
499
506
|
Kernel.require path.to_s
|
500
507
|
}
|
@@ -557,12 +564,20 @@ module Dry
|
|
557
564
|
|
558
565
|
# @api private
|
559
566
|
def booter
|
560
|
-
@booter ||= config.booter.new(
|
567
|
+
@booter ||= config.booter.new(boot_paths)
|
561
568
|
end
|
562
569
|
|
563
570
|
# @api private
|
564
|
-
def
|
565
|
-
|
571
|
+
def boot_paths
|
572
|
+
config.bootable_dirs.map { |dir|
|
573
|
+
dir = Pathname(dir)
|
574
|
+
|
575
|
+
if dir.relative?
|
576
|
+
root.join(dir)
|
577
|
+
else
|
578
|
+
dir
|
579
|
+
end
|
580
|
+
}
|
566
581
|
end
|
567
582
|
|
568
583
|
# @api private
|
@@ -623,13 +638,13 @@ module Dry
|
|
623
638
|
return self if registered?(key)
|
624
639
|
|
625
640
|
component(key).tap do |component|
|
626
|
-
if component.
|
641
|
+
if component.bootable?
|
627
642
|
booter.start(component)
|
628
643
|
else
|
629
644
|
root_key = component.root_key
|
630
645
|
|
631
|
-
if (
|
632
|
-
booter.start(
|
646
|
+
if (root_bootable = component(root_key)).bootable?
|
647
|
+
booter.start(root_bootable)
|
633
648
|
elsif importer.key?(root_key)
|
634
649
|
load_imported_component(component.namespaced(root_key))
|
635
650
|
end
|
data/lib/dry/system/errors.rb
CHANGED
@@ -17,12 +17,8 @@ module Dry
|
|
17
17
|
# @api public
|
18
18
|
ComponentFileMismatchError = Class.new(StandardError) do
|
19
19
|
def initialize(component)
|
20
|
-
path = component.boot_path
|
21
|
-
files = component.container_boot_files
|
22
|
-
|
23
20
|
super(<<-STR)
|
24
|
-
|
25
|
-
Container boot files under #{path}: #{files.inspect}")
|
21
|
+
Bootable component #{component.identifier.inspect} not found
|
26
22
|
STR
|
27
23
|
end
|
28
24
|
end
|
data/lib/dry/system/lifecycle.rb
CHANGED
data/lib/dry/system/loader.rb
CHANGED
@@ -22,7 +22,7 @@ module Dry
|
|
22
22
|
|
23
23
|
# @api private
|
24
24
|
def self.dependencies
|
25
|
-
{
|
25
|
+
{bootsnap: "bootsnap"}
|
26
26
|
end
|
27
27
|
|
28
28
|
# Set up bootsnap for faster booting
|
@@ -31,12 +31,12 @@ module Dry
|
|
31
31
|
def setup_bootsnap
|
32
32
|
return unless bootsnap_available?
|
33
33
|
|
34
|
-
::Bootsnap.setup(config.bootsnap.merge(cache_dir: root.join(
|
34
|
+
::Bootsnap.setup(config.bootsnap.merge(cache_dir: root.join("tmp/cache").to_s))
|
35
35
|
end
|
36
36
|
|
37
37
|
# @api private
|
38
38
|
def bootsnap_available?
|
39
|
-
RUBY_ENGINE ==
|
39
|
+
RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.3.0" && RUBY_VERSION < "2.5.0"
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dry/system/constants"
|
4
|
+
require "dry/system/plugins/dependency_graph/strategies"
|
5
5
|
|
6
6
|
module Dry
|
7
7
|
module System
|
@@ -28,7 +28,7 @@ module Dry
|
|
28
28
|
|
29
29
|
# @api private
|
30
30
|
def self.dependencies
|
31
|
-
{
|
31
|
+
{'dry-events': "dry/events/publisher"}
|
32
32
|
end
|
33
33
|
|
34
34
|
# @api private
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "logger"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module System
|
@@ -11,12 +11,9 @@ module Dry
|
|
11
11
|
system.before(:configure) do
|
12
12
|
setting :logger, reader: true
|
13
13
|
|
14
|
-
setting :log_dir,
|
14
|
+
setting :log_dir, "log"
|
15
15
|
|
16
|
-
setting :log_levels,
|
17
|
-
development: Logger::DEBUG,
|
18
|
-
test: Logger::DEBUG,
|
19
|
-
production: Logger::ERROR
|
16
|
+
setting :log_levels, {development: Logger::DEBUG, test: Logger::DEBUG, production: Logger::ERROR}
|
20
17
|
|
21
18
|
setting :logger_class, ::Logger, reader: true
|
22
19
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "delegate"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module System
|
@@ -9,7 +9,7 @@ module Dry
|
|
9
9
|
# @api private
|
10
10
|
class Proxy < SimpleDelegator
|
11
11
|
# @api private
|
12
|
-
def self.for(target, key:, methods: []
|
12
|
+
def self.for(target, key:, methods: [])
|
13
13
|
monitored_methods =
|
14
14
|
if methods.empty?
|
15
15
|
target.public_methods - Object.public_instance_methods
|
@@ -30,7 +30,7 @@ module Dry
|
|
30
30
|
monitored_methods.each do |meth|
|
31
31
|
define_method(meth) do |*args, &block|
|
32
32
|
object = __getobj__
|
33
|
-
opts = {
|
33
|
+
opts = {target: key, object: object, method: meth, args: args}
|
34
34
|
|
35
35
|
__notifications__.instrument(:monitoring, opts) do
|
36
36
|
object.public_send(meth, *args, &block)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dry/system/constants"
|
4
|
+
require "dry/system/plugins/monitoring/proxy"
|
5
5
|
|
6
6
|
module Dry
|
7
7
|
module System
|
@@ -21,7 +21,7 @@ module Dry
|
|
21
21
|
|
22
22
|
# @api private
|
23
23
|
def self.dependencies
|
24
|
-
{
|
24
|
+
{'dry-events': "dry/events/publisher"}
|
25
25
|
end
|
26
26
|
|
27
27
|
# @api private
|
data/lib/dry/system/plugins.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/system/constants"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module System
|
@@ -116,22 +116,22 @@ module Dry
|
|
116
116
|
@enabled_plugins ||= []
|
117
117
|
end
|
118
118
|
|
119
|
-
require
|
119
|
+
require "dry/system/plugins/bootsnap"
|
120
120
|
register(:bootsnap, Plugins::Bootsnap)
|
121
121
|
|
122
|
-
require
|
122
|
+
require "dry/system/plugins/logging"
|
123
123
|
register(:logging, Plugins::Logging)
|
124
124
|
|
125
|
-
require
|
125
|
+
require "dry/system/plugins/env"
|
126
126
|
register(:env, Plugins::Env)
|
127
127
|
|
128
|
-
require
|
128
|
+
require "dry/system/plugins/notifications"
|
129
129
|
register(:notifications, Plugins::Notifications)
|
130
130
|
|
131
|
-
require
|
131
|
+
require "dry/system/plugins/monitoring"
|
132
132
|
register(:monitoring, Plugins::Monitoring)
|
133
133
|
|
134
|
-
require
|
134
|
+
require "dry/system/plugins/dependency_graph"
|
135
135
|
register(:dependency_graph, Plugins::DependencyGraph)
|
136
136
|
end
|
137
137
|
end
|
data/lib/dry/system/provider.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "concurrent/map"
|
4
|
+
require "dry/system/constants"
|
5
|
+
require "dry/system/components/bootable"
|
6
6
|
|
7
7
|
module Dry
|
8
8
|
module System
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/system/settings/file_parser"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module System
|
@@ -20,7 +20,7 @@ module Dry
|
|
20
20
|
|
21
21
|
def files(root, env)
|
22
22
|
[
|
23
|
-
root.join(
|
23
|
+
root.join(".env"),
|
24
24
|
root.join(".env.#{env}")
|
25
25
|
].compact
|
26
26
|
end
|
data/lib/dry/system/settings.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "dry/core/class_builder"
|
4
|
+
require "dry/types"
|
5
|
+
require "dry/struct"
|
6
6
|
|
7
|
-
require
|
8
|
-
require
|
7
|
+
require "dry/system/settings/file_loader"
|
8
|
+
require "dry/system/constants"
|
9
9
|
|
10
10
|
module Dry
|
11
11
|
module System
|
@@ -22,7 +22,7 @@ module Dry
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def call
|
25
|
-
Core::ClassBuilder.new(name:
|
25
|
+
Core::ClassBuilder.new(name: "Configuration", parent: Configuration).call do |klass|
|
26
26
|
schema.each do |key, type|
|
27
27
|
klass.setting(key, type)
|
28
28
|
end
|
data/lib/dry/system/stubs.rb
CHANGED
data/lib/dry/system/version.rb
CHANGED
data/lib/dry/system.rb
CHANGED
data/lib/dry-system.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-system
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -44,14 +44,20 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0.
|
47
|
+
version: '0.11'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 0.11.1
|
48
51
|
type: :runtime
|
49
52
|
prerelease: false
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
51
54
|
requirements:
|
52
55
|
- - "~>"
|
53
56
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0.
|
57
|
+
version: '0.11'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.11.1
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: dry-container
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -251,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
257
|
- !ruby/object:Gem::Version
|
252
258
|
version: '0'
|
253
259
|
requirements: []
|
254
|
-
rubygems_version: 3.
|
260
|
+
rubygems_version: 3.1.6
|
255
261
|
signing_key:
|
256
262
|
specification_version: 4
|
257
263
|
summary: Organize your code into reusable components
|