dry-system 0.25.0 → 0.27.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/CHANGELOG.md +19 -0
- data/dry-system.gemspec +3 -3
- data/lib/dry/system/auto_registrar.rb +0 -1
- data/lib/dry/system/component.rb +1 -6
- data/lib/dry/system/component_dir.rb +0 -3
- data/lib/dry/system/components.rb +0 -2
- data/lib/dry/system/config/component_dir.rb +0 -28
- data/lib/dry/system/config/component_dirs.rb +0 -1
- data/lib/dry/system/config/namespace.rb +0 -1
- data/lib/dry/system/config/namespaces.rb +2 -2
- data/lib/dry/system/constants.rb +0 -2
- data/lib/dry/system/container.rb +10 -28
- data/lib/dry/system/errors.rb +0 -2
- data/lib/dry/system/identifier.rb +1 -2
- data/lib/dry/system/importer.rb +1 -1
- data/lib/dry/system/indirect_component.rb +0 -2
- data/lib/dry/system/loader/autoloading.rb +0 -2
- data/lib/dry/system/plugins/plugin.rb +61 -0
- data/lib/dry/system/plugins.rb +1 -57
- data/lib/dry/system/provider/source.rb +0 -3
- data/lib/dry/system/provider/source_dsl.rb +0 -2
- data/lib/dry/system/provider.rb +1 -3
- data/lib/dry/system/provider_registrar.rb +3 -5
- data/lib/dry/system/provider_source_registry.rb +1 -3
- data/lib/dry/system/provider_sources/settings/config.rb +0 -4
- data/lib/dry/system/provider_sources/settings/loader.rb +0 -3
- data/lib/dry/system/version.rb +1 -1
- data/lib/dry/system.rb +19 -2
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84621f047b9ae5be5233f099d1031bf5241c8694bd965884d161ce5f5b6ee079
|
4
|
+
data.tar.gz: be2f0f633dcbea09059608ed3dde19a0cb7d89b7d3f1b9e5484e780eb438f3d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b5fc46ed7af654f4abc07cf95815ccfac84a44ed7ea76cc20d4253092ca78f82aa6ab5d66769ccbbe2f94937e536fa90f8156b2fbabd83466e59a6bbda098eb
|
7
|
+
data.tar.gz: d727819c4894eff4b5b095b33c27da01952643c7fed843321bca02e6e622c519a200b6a2f71cfe137003ef42cecb36b17a460005f291793816af10e1ad7a6475
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
+
## 0.27.0 2022-10-15
|
4
|
+
|
5
|
+
|
6
|
+
### Changed
|
7
|
+
|
8
|
+
- Use zeitwerk for auto-loading dry-system (@flash-gordon + @solnic)
|
9
|
+
|
10
|
+
[Compare v0.26.0...v0.27.0](https://github.com/dry-rb/dry-system/compare/v0.26.0...v0.27.0)
|
11
|
+
|
12
|
+
## 0.26.0 2022-10-08
|
13
|
+
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
- Update dry-configurable dependency to 0.16.0 and make internal adjustments to suit (@timriley in #249)
|
18
|
+
- Remove now-unused concurrent-ruby gem dependency (@timriley in #250)
|
19
|
+
|
20
|
+
[Compare v0.25.0...v0.26.0](https://github.com/dry-rb/dry-system/compare/v0.25.0...v0.26.0)
|
21
|
+
|
3
22
|
## 0.25.0 2022-07-10
|
4
23
|
|
5
24
|
|
data/dry-system.gemspec
CHANGED
@@ -29,11 +29,11 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.required_ruby_version = ">= 2.7.0"
|
30
30
|
|
31
31
|
# to update dependencies edit project.yml
|
32
|
-
spec.add_runtime_dependency "
|
32
|
+
spec.add_runtime_dependency "zeitwerk", "~> 2.6"
|
33
33
|
spec.add_runtime_dependency "dry-auto_inject", ">= 0.4.0"
|
34
|
-
spec.add_runtime_dependency "dry-configurable", "~> 0.
|
34
|
+
spec.add_runtime_dependency "dry-configurable", "~> 0.16", ">= 0.16.0"
|
35
35
|
spec.add_runtime_dependency "dry-container", "~> 0.10", ">= 0.10.0"
|
36
|
-
spec.add_runtime_dependency "dry-core", "~> 0.
|
36
|
+
spec.add_runtime_dependency "dry-core", "~> 0.9", ">= 0.9.0"
|
37
37
|
spec.add_runtime_dependency "dry-inflector", "~> 0.1", ">= 0.1.2"
|
38
38
|
|
39
39
|
spec.add_development_dependency "bundler"
|
data/lib/dry/system/component.rb
CHANGED
@@ -1,14 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
4
|
-
|
5
|
-
require "dry/core/equalizer"
|
3
|
+
require "pathname"
|
6
4
|
require "dry/inflector"
|
7
|
-
require "dry/system/loader"
|
8
5
|
require "dry/system/errors"
|
9
6
|
require "dry/system/constants"
|
10
|
-
require "pathname"
|
11
|
-
require_relative "identifier"
|
12
7
|
|
13
8
|
module Dry
|
14
9
|
module System
|
@@ -1,10 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/configurable"
|
4
|
-
require "dry/core/deprecations"
|
5
3
|
require "dry/system/constants"
|
6
|
-
require "dry/system/loader"
|
7
|
-
require_relative "namespaces"
|
8
4
|
|
9
5
|
module Dry
|
10
6
|
module System
|
@@ -247,30 +243,6 @@ module Dry
|
|
247
243
|
!!config.auto_register
|
248
244
|
end
|
249
245
|
|
250
|
-
# Returns true if the given setting has been explicitly configured by the user
|
251
|
-
#
|
252
|
-
# This is used when determining whether to apply system-wide default values to a
|
253
|
-
# component dir (explicitly configured settings will not be overridden by
|
254
|
-
# defaults)
|
255
|
-
#
|
256
|
-
# @param key [Symbol] the setting name
|
257
|
-
#
|
258
|
-
# @return [Boolean]
|
259
|
-
#
|
260
|
-
# @see Dry::System::Config::ComponentDirs#apply_defaults_to_dir
|
261
|
-
# @api private
|
262
|
-
def configured?(key)
|
263
|
-
case key
|
264
|
-
when :namespaces
|
265
|
-
# Because we mutate the default value for the `namespaces` setting, rather
|
266
|
-
# than assign a new one, to check if it's configured we must see whether any
|
267
|
-
# namespaces have been added
|
268
|
-
!config.namespaces.empty?
|
269
|
-
else
|
270
|
-
config._settings[key].input_defined?
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
246
|
private
|
275
247
|
|
276
248
|
def method_missing(name, *args, &block)
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/core/deprecations"
|
4
3
|
require "dry/system/errors"
|
5
|
-
require_relative "namespace"
|
6
4
|
|
7
5
|
module Dry
|
8
6
|
module System
|
@@ -13,6 +11,8 @@ module Dry
|
|
13
11
|
#
|
14
12
|
# @api private
|
15
13
|
class Namespaces
|
14
|
+
include Dry::Equalizer(:namespaces)
|
15
|
+
|
16
16
|
# @api private
|
17
17
|
attr_reader :namespaces
|
18
18
|
|
data/lib/dry/system/constants.rb
CHANGED
data/lib/dry/system/container.rb
CHANGED
@@ -5,25 +5,8 @@ require "pathname"
|
|
5
5
|
require "dry/configurable"
|
6
6
|
require "dry/auto_inject"
|
7
7
|
require "dry/container"
|
8
|
-
require "dry/core/deprecations"
|
9
8
|
require "dry/inflector"
|
10
9
|
|
11
|
-
require "dry/system/auto_registrar"
|
12
|
-
require "dry/system/component"
|
13
|
-
require "dry/system/constants"
|
14
|
-
require "dry/system/errors"
|
15
|
-
require "dry/system/identifier"
|
16
|
-
require "dry/system/importer"
|
17
|
-
require "dry/system/indirect_component"
|
18
|
-
require "dry/system/manifest_registrar"
|
19
|
-
require "dry/system/plugins"
|
20
|
-
require "dry/system/provider_registrar"
|
21
|
-
require "dry/system/provider"
|
22
|
-
require "dry/system/provider/source"
|
23
|
-
|
24
|
-
require_relative "component_dir"
|
25
|
-
require_relative "config/component_dirs"
|
26
|
-
|
27
10
|
module Dry
|
28
11
|
module System
|
29
12
|
# Abstract container class to inherit from
|
@@ -86,8 +69,7 @@ module Dry
|
|
86
69
|
setting :provider_registrar, default: Dry::System::ProviderRegistrar
|
87
70
|
setting :importer, default: Dry::System::Importer
|
88
71
|
|
89
|
-
#
|
90
|
-
# user-configurable.
|
72
|
+
# Expect "." as key namespace separator. This is not intended to be user-configurable.
|
91
73
|
config.namespace_separator = KEY_SEPARATOR
|
92
74
|
|
93
75
|
class << self
|
@@ -127,14 +109,7 @@ module Dry
|
|
127
109
|
# @api public
|
128
110
|
def configure(finalize_config: true, &block)
|
129
111
|
super(&block)
|
130
|
-
|
131
|
-
unless configured?
|
132
|
-
hooks[:after_configure].each { |hook| instance_eval(&hook) }
|
133
|
-
config.finalize! if finalize_config
|
134
|
-
@__configured__ = true
|
135
|
-
end
|
136
|
-
|
137
|
-
self
|
112
|
+
configured!(finalize_config: finalize_config)
|
138
113
|
end
|
139
114
|
|
140
115
|
# Marks the container as configured, runs the after-`configured` hooks, then
|
@@ -156,12 +131,19 @@ module Dry
|
|
156
131
|
return self if configured?
|
157
132
|
|
158
133
|
hooks[:after_configure].each { |hook| instance_eval(&hook) }
|
159
|
-
|
134
|
+
|
135
|
+
_configurable_finalize! if finalize_config
|
136
|
+
|
160
137
|
@__configured__ = true
|
161
138
|
|
162
139
|
self
|
163
140
|
end
|
164
141
|
|
142
|
+
# Finalizes the config for this container
|
143
|
+
#
|
144
|
+
# @api private
|
145
|
+
alias_method :_configurable_finalize!, :finalize!
|
146
|
+
|
165
147
|
def configured?
|
166
148
|
@__configured__.equal?(true)
|
167
149
|
end
|
data/lib/dry/system/errors.rb
CHANGED
data/lib/dry/system/importer.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dry
|
4
|
+
module System
|
5
|
+
module Plugins
|
6
|
+
# @api private
|
7
|
+
class Plugin
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
attr_reader :mod
|
11
|
+
|
12
|
+
attr_reader :block
|
13
|
+
|
14
|
+
# @api private
|
15
|
+
def initialize(name, mod, &block)
|
16
|
+
@name = name
|
17
|
+
@mod = mod
|
18
|
+
@block = block
|
19
|
+
end
|
20
|
+
|
21
|
+
# @api private
|
22
|
+
def apply_to(system, **options)
|
23
|
+
system.extend(stateful? ? mod.new(**options) : mod)
|
24
|
+
system.instance_eval(&block) if block
|
25
|
+
system
|
26
|
+
end
|
27
|
+
|
28
|
+
# @api private
|
29
|
+
def load_dependencies(dependencies = mod_dependencies, gem = nil)
|
30
|
+
Array(dependencies).each do |dependency|
|
31
|
+
if dependency.is_a?(Array) || dependency.is_a?(Hash)
|
32
|
+
dependency.each { |value| load_dependencies(*Array(value).reverse) }
|
33
|
+
elsif !Plugins.loaded_dependencies.include?(dependency.to_s)
|
34
|
+
load_dependency(dependency, gem)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# @api private
|
40
|
+
def load_dependency(dependency, gem)
|
41
|
+
Kernel.require dependency
|
42
|
+
Plugins.loaded_dependencies << dependency.to_s
|
43
|
+
rescue LoadError => e
|
44
|
+
raise PluginDependencyMissing.new(name, e.message, gem)
|
45
|
+
end
|
46
|
+
|
47
|
+
# @api private
|
48
|
+
def stateful?
|
49
|
+
mod < Module
|
50
|
+
end
|
51
|
+
|
52
|
+
# @api private
|
53
|
+
def mod_dependencies
|
54
|
+
return EMPTY_ARRAY unless mod.respond_to?(:dependencies)
|
55
|
+
|
56
|
+
mod.dependencies.is_a?(Array) ? mod.dependencies : [mod.dependencies]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/dry/system/plugins.rb
CHANGED
@@ -1,64 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/system/constants"
|
4
|
-
|
5
3
|
module Dry
|
6
4
|
module System
|
7
5
|
module Plugins
|
8
|
-
# @api private
|
9
|
-
class Plugin
|
10
|
-
attr_reader :name
|
11
|
-
|
12
|
-
attr_reader :mod
|
13
|
-
|
14
|
-
attr_reader :block
|
15
|
-
|
16
|
-
# @api private
|
17
|
-
def initialize(name, mod, &block)
|
18
|
-
@name = name
|
19
|
-
@mod = mod
|
20
|
-
@block = block
|
21
|
-
end
|
22
|
-
|
23
|
-
# @api private
|
24
|
-
def apply_to(system, **options)
|
25
|
-
system.extend(stateful? ? mod.new(**options) : mod)
|
26
|
-
system.instance_eval(&block) if block
|
27
|
-
system
|
28
|
-
end
|
29
|
-
|
30
|
-
# @api private
|
31
|
-
def load_dependencies(dependencies = mod_dependencies, gem = nil)
|
32
|
-
Array(dependencies).each do |dependency|
|
33
|
-
if dependency.is_a?(Array) || dependency.is_a?(Hash)
|
34
|
-
dependency.each { |value| load_dependencies(*Array(value).reverse) }
|
35
|
-
elsif !Plugins.loaded_dependencies.include?(dependency.to_s)
|
36
|
-
load_dependency(dependency, gem)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# @api private
|
42
|
-
def load_dependency(dependency, gem)
|
43
|
-
Kernel.require dependency
|
44
|
-
Plugins.loaded_dependencies << dependency.to_s
|
45
|
-
rescue LoadError => e
|
46
|
-
raise PluginDependencyMissing.new(name, e.message, gem)
|
47
|
-
end
|
48
|
-
|
49
|
-
# @api private
|
50
|
-
def stateful?
|
51
|
-
mod < Module
|
52
|
-
end
|
53
|
-
|
54
|
-
# @api private
|
55
|
-
def mod_dependencies
|
56
|
-
return EMPTY_ARRAY unless mod.respond_to?(:dependencies)
|
57
|
-
|
58
|
-
mod.dependencies.is_a?(Array) ? mod.dependencies : [mod.dependencies]
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
6
|
# Register a plugin
|
63
7
|
#
|
64
8
|
# @param [Symbol] name The name of a plugin
|
@@ -93,7 +37,7 @@ module Dry
|
|
93
37
|
def use(name, **options)
|
94
38
|
return self if enabled_plugins.include?(name)
|
95
39
|
|
96
|
-
raise PluginNotFoundError, name unless (plugin = Plugins.registry[name])
|
40
|
+
raise PluginNotFoundError, name unless (plugin = Dry::System::Plugins.registry[name])
|
97
41
|
|
98
42
|
plugin.load_dependencies
|
99
43
|
plugin.apply_to(self, **options)
|
data/lib/dry/system/provider.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/core/deprecations"
|
4
|
-
require "dry/system"
|
5
3
|
require "pathname"
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
|
5
|
+
require "dry/system/errors"
|
6
|
+
require "dry/system/constants"
|
9
7
|
|
10
8
|
module Dry
|
11
9
|
module System
|
data/lib/dry/system/version.rb
CHANGED
data/lib/dry/system.rb
CHANGED
@@ -1,10 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
4
|
-
|
3
|
+
require "zeitwerk"
|
4
|
+
require "dry/core"
|
5
5
|
|
6
6
|
module Dry
|
7
7
|
module System
|
8
|
+
# @api private
|
9
|
+
def self.loader
|
10
|
+
@loader ||= Zeitwerk::Loader.new.tap do |loader|
|
11
|
+
root = File.expand_path("..", __dir__)
|
12
|
+
loader.tag = "dry-system"
|
13
|
+
loader.inflector = Zeitwerk::GemInflector.new("#{root}/dry-system.rb")
|
14
|
+
loader.push_dir(root)
|
15
|
+
loader.ignore(
|
16
|
+
"#{root}/dry-system.rb",
|
17
|
+
"#{root}/dry/system/{constants,errors,stubs,version}.rb"
|
18
|
+
)
|
19
|
+
loader.inflector.inflect("dsl" => "DSL")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
8
23
|
# Registers the provider sources in the files under the given path
|
9
24
|
#
|
10
25
|
# @api public
|
@@ -58,5 +73,7 @@ module Dry
|
|
58
73
|
def self.provider_sources
|
59
74
|
@provider_sources ||= ProviderSourceRegistry.new
|
60
75
|
end
|
76
|
+
|
77
|
+
loader.setup
|
61
78
|
end
|
62
79
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-system
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.27.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: zeitwerk
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.6'
|
20
20
|
type: :runtime
|
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: '
|
26
|
+
version: '2.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dry-auto_inject
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,20 +44,20 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0.
|
47
|
+
version: '0.16'
|
48
48
|
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 0.
|
50
|
+
version: 0.16.0
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
55
|
- - "~>"
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version: '0.
|
57
|
+
version: '0.16'
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 0.
|
60
|
+
version: 0.16.0
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: dry-container
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,20 +84,20 @@ dependencies:
|
|
84
84
|
requirements:
|
85
85
|
- - "~>"
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: '0.
|
87
|
+
version: '0.9'
|
88
88
|
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 0.9.0
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0.
|
97
|
+
version: '0.9'
|
98
98
|
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version:
|
100
|
+
version: 0.9.0
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: dry-inflector
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -200,6 +200,7 @@ files:
|
|
200
200
|
- lib/dry/system/plugins/monitoring.rb
|
201
201
|
- lib/dry/system/plugins/monitoring/proxy.rb
|
202
202
|
- lib/dry/system/plugins/notifications.rb
|
203
|
+
- lib/dry/system/plugins/plugin.rb
|
203
204
|
- lib/dry/system/plugins/zeitwerk.rb
|
204
205
|
- lib/dry/system/plugins/zeitwerk/compat_inflector.rb
|
205
206
|
- lib/dry/system/provider.rb
|