dry-system 0.24.0 → 0.25.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 +15 -0
- data/dry-system.gemspec +1 -1
- data/lib/dry/system/component.rb +8 -2
- data/lib/dry/system/component_dir.rb +6 -1
- data/lib/dry/system/container.rb +17 -16
- data/lib/dry/system/importer.rb +9 -2
- data/lib/dry/system/manifest_registrar.rb +1 -1
- data/lib/dry/system/provider/source.rb +8 -3
- data/lib/dry/system/version.rb +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ee8640692f53a8c0a9a29fd59bfe5595a269b3680d4a8f71d630e87ed2398b9
|
4
|
+
data.tar.gz: 435806646f338c4bdec369ae98fc29f451bb6a5dbe38bc2f20d7c3cb422b4223
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90130f6f367b24a1b45fd6be2915efe9d0c9e22b676e03b3a827ea7e9d02accca210272c8f5cd330993f2ea378ca2674ffc9281f7d695b14b7acb6f4d0a24c6d
|
7
|
+
data.tar.gz: 30cb6a24cb9e12cbd259223d0b861f837b692e139b21f95e1dfdd6b0365129e37377153151bce0cda8b9171249507ff458e4239ac61df0200c7144063381c0ad
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
+
## 0.25.0 2022-07-10
|
4
|
+
|
5
|
+
|
6
|
+
### Fixed
|
7
|
+
|
8
|
+
- Fix incorrect type in `ManifestRegistrar#finalize!` (@alassek)
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
|
12
|
+
- Import root components via `nil` import namespace (via #236) (@timriley)
|
13
|
+
- Allow deeper `Provider::Source` hierarchies (via #240) (@timriley + @solnic)
|
14
|
+
- Prefer local components when importing (via #241) (@timriley + @solnic)
|
15
|
+
|
16
|
+
[Compare v0.24.0...v0.25.0](https://github.com/dry-rb/dry-system/compare/v0.24.0...v0.25.0)
|
17
|
+
|
3
18
|
## 0.24.0
|
4
19
|
|
5
20
|
|
data/dry-system.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
|
33
33
|
spec.add_runtime_dependency "dry-auto_inject", ">= 0.4.0"
|
34
34
|
spec.add_runtime_dependency "dry-configurable", "~> 0.14", ">= 0.14.0"
|
35
|
-
spec.add_runtime_dependency "dry-container", "~> 0.
|
35
|
+
spec.add_runtime_dependency "dry-container", "~> 0.10", ">= 0.10.0"
|
36
36
|
spec.add_runtime_dependency "dry-core", "~> 0.5", ">= 0.5"
|
37
37
|
spec.add_runtime_dependency "dry-inflector", "~> 0.1", ">= 0.1.2"
|
38
38
|
|
data/lib/dry/system/component.rb
CHANGED
@@ -7,6 +7,7 @@ require "dry/inflector"
|
|
7
7
|
require "dry/system/loader"
|
8
8
|
require "dry/system/errors"
|
9
9
|
require "dry/system/constants"
|
10
|
+
require "pathname"
|
10
11
|
require_relative "identifier"
|
11
12
|
|
12
13
|
module Dry
|
@@ -17,7 +18,7 @@ module Dry
|
|
17
18
|
#
|
18
19
|
# @api public
|
19
20
|
class Component
|
20
|
-
include Dry::Equalizer(:identifier, :namespace, :options)
|
21
|
+
include Dry::Equalizer(:identifier, :file_path, :namespace, :options)
|
21
22
|
|
22
23
|
DEFAULT_OPTIONS = {
|
23
24
|
inflector: Dry::Inflector.new,
|
@@ -28,6 +29,10 @@ module Dry
|
|
28
29
|
# @return [String] the component's unique identifier
|
29
30
|
attr_reader :identifier
|
30
31
|
|
32
|
+
# @!attribute [r] file_path
|
33
|
+
# @return [Pathname] the component's source file path
|
34
|
+
attr_reader :file_path
|
35
|
+
|
31
36
|
# @!attribute [r] namespace
|
32
37
|
# @return [Dry::System::Config::Namespace] the component's namespace
|
33
38
|
attr_reader :namespace
|
@@ -37,8 +42,9 @@ module Dry
|
|
37
42
|
attr_reader :options
|
38
43
|
|
39
44
|
# @api private
|
40
|
-
def initialize(identifier, namespace:, **options)
|
45
|
+
def initialize(identifier, file_path:, namespace:, **options)
|
41
46
|
@identifier = identifier
|
47
|
+
@file_path = Pathname(file_path)
|
42
48
|
@namespace = namespace
|
43
49
|
@options = DEFAULT_OPTIONS.merge(options)
|
44
50
|
end
|
@@ -141,7 +141,12 @@ module Dry
|
|
141
141
|
**MagicCommentsParser.(file_path)
|
142
142
|
}
|
143
143
|
|
144
|
-
Component.new(
|
144
|
+
Component.new(
|
145
|
+
identifier,
|
146
|
+
namespace: namespace,
|
147
|
+
file_path: file_path,
|
148
|
+
**options
|
149
|
+
)
|
145
150
|
end
|
146
151
|
|
147
152
|
def component_options
|
data/lib/dry/system/container.rb
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
require "pathname"
|
4
4
|
|
5
|
-
require "dry
|
6
|
-
require "dry
|
7
|
-
require "dry
|
5
|
+
require "dry/configurable"
|
6
|
+
require "dry/auto_inject"
|
7
|
+
require "dry/container"
|
8
8
|
require "dry/core/deprecations"
|
9
9
|
require "dry/inflector"
|
10
10
|
|
@@ -70,12 +70,11 @@ module Dry
|
|
70
70
|
#
|
71
71
|
# @api public
|
72
72
|
class Container
|
73
|
-
extend Dry::Configurable
|
74
73
|
extend Dry::Container::Mixin
|
75
74
|
extend Dry::System::Plugins
|
76
75
|
|
77
76
|
setting :name
|
78
|
-
setting :root, default: Pathname.pwd.freeze, constructor: ->
|
77
|
+
setting :root, default: Pathname.pwd.freeze, constructor: ->(path) { Pathname(path) }
|
79
78
|
setting :provider_dirs, default: ["system/providers"]
|
80
79
|
setting :bootable_dirs # Deprecated for provider_dirs, see .provider_paths below
|
81
80
|
setting :registrations_dir, default: "system/registrations"
|
@@ -193,7 +192,7 @@ module Dry
|
|
193
192
|
# @param other [Hash, Dry::Container::Namespace]
|
194
193
|
#
|
195
194
|
# @api public
|
196
|
-
def import(keys: nil, from:
|
195
|
+
def import(keys: nil, from: Undefined, as: Undefined, **deprecated_import_hash)
|
197
196
|
if deprecated_import_hash.any?
|
198
197
|
Dry::Core::Deprecations.announce(
|
199
198
|
"Dry::System::Container.import with {namespace => container} hash",
|
@@ -206,7 +205,7 @@ module Dry
|
|
206
205
|
importer.register(container: container, namespace: namespace)
|
207
206
|
end
|
208
207
|
return self
|
209
|
-
elsif from
|
208
|
+
elsif from == Undefined || as == Undefined
|
210
209
|
# These keyword arguments can become properly required in the params list once
|
211
210
|
# we remove the deprecation shim above
|
212
211
|
raise ArgumentError, "required keyword arguments: :from, :as"
|
@@ -376,10 +375,10 @@ module Dry
|
|
376
375
|
hooks[:before_finalize].each { |hook| instance_eval(&hook) }
|
377
376
|
yield(self) if block
|
378
377
|
|
379
|
-
importer.finalize!
|
380
378
|
providers.finalize!
|
381
|
-
manifest_registrar.finalize!
|
382
379
|
auto_registrar.finalize!
|
380
|
+
manifest_registrar.finalize!
|
381
|
+
importer.finalize!
|
383
382
|
|
384
383
|
@__finalized__ = true
|
385
384
|
|
@@ -659,6 +658,7 @@ module Dry
|
|
659
658
|
|
660
659
|
protected
|
661
660
|
|
661
|
+
# rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
|
662
662
|
# @api private
|
663
663
|
def load_component(key)
|
664
664
|
return self if registered?(key)
|
@@ -678,11 +678,14 @@ module Dry
|
|
678
678
|
elsif manifest_registrar.file_exists?(component)
|
679
679
|
manifest_registrar.(component)
|
680
680
|
elsif importer.namespace?(component.identifier.root_key)
|
681
|
-
load_imported_component(component.identifier)
|
681
|
+
load_imported_component(component.identifier, namespace: component.identifier.root_key)
|
682
|
+
elsif importer.namespace?(nil)
|
683
|
+
load_imported_component(component.identifier, namespace: nil)
|
682
684
|
end
|
683
685
|
|
684
686
|
self
|
685
687
|
end
|
688
|
+
# rubocop:enable Metrics/AbcSize, Metrics/PerceivedComplexity
|
686
689
|
|
687
690
|
private
|
688
691
|
|
@@ -692,14 +695,12 @@ module Dry
|
|
692
695
|
end
|
693
696
|
end
|
694
697
|
|
695
|
-
def load_imported_component(identifier)
|
696
|
-
|
697
|
-
|
698
|
-
return unless importer.namespace?(import_namespace)
|
698
|
+
def load_imported_component(identifier, namespace:)
|
699
|
+
return unless importer.namespace?(namespace)
|
699
700
|
|
700
|
-
import_key = identifier.namespaced(from:
|
701
|
+
import_key = identifier.namespaced(from: namespace, to: nil).key
|
701
702
|
|
702
|
-
importer.import(
|
703
|
+
importer.import(namespace, keys: [import_key])
|
703
704
|
end
|
704
705
|
|
705
706
|
def find_component(key)
|
data/lib/dry/system/importer.rb
CHANGED
@@ -84,7 +84,7 @@ module Dry
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def import_keys(other, namespace, keys)
|
87
|
-
|
87
|
+
merge(container, build_merge_container(other, keys), namespace: namespace)
|
88
88
|
end
|
89
89
|
|
90
90
|
def import_all(other, namespace)
|
@@ -95,7 +95,14 @@ module Dry
|
|
95
95
|
build_merge_container(other.finalize!, other.keys)
|
96
96
|
end
|
97
97
|
|
98
|
-
|
98
|
+
merge(container, merge_container, namespace: namespace)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Merges `other` into `container`, favoring the container's existing registrations
|
102
|
+
def merge(container, other, namespace:)
|
103
|
+
container.merge(other, namespace: namespace) { |_key, old_item, new_item|
|
104
|
+
old_item || new_item
|
105
|
+
}
|
99
106
|
end
|
100
107
|
|
101
108
|
def build_merge_container(other, keys)
|
@@ -53,9 +53,14 @@ module Dry
|
|
53
53
|
def inherited(subclass)
|
54
54
|
super
|
55
55
|
|
56
|
-
#
|
57
|
-
#
|
58
|
-
|
56
|
+
# Include Dry::Configurable only when first subclassing to ensure that
|
57
|
+
# distinct Source subclasses do not share settings.
|
58
|
+
#
|
59
|
+
# The superclass check here allows deeper Source class hierarchies to be
|
60
|
+
# created without running into a Dry::Configurable::AlreadyIncluded error.
|
61
|
+
if subclass.superclass == Source
|
62
|
+
subclass.include Dry::Configurable
|
63
|
+
end
|
59
64
|
end
|
60
65
|
|
61
66
|
# @api private
|
data/lib/dry/system/version.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.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -64,20 +64,20 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0.
|
67
|
+
version: '0.10'
|
68
68
|
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 0.
|
70
|
+
version: 0.10.0
|
71
71
|
type: :runtime
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0.
|
77
|
+
version: '0.10'
|
78
78
|
- - ">="
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: 0.
|
80
|
+
version: 0.10.0
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: dry-core
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,7 +221,7 @@ metadata:
|
|
221
221
|
changelog_uri: https://github.com/dry-rb/dry-system/blob/main/CHANGELOG.md
|
222
222
|
source_code_uri: https://github.com/dry-rb/dry-system
|
223
223
|
bug_tracker_uri: https://github.com/dry-rb/dry-system/issues
|
224
|
-
post_install_message:
|
224
|
+
post_install_message:
|
225
225
|
rdoc_options: []
|
226
226
|
require_paths:
|
227
227
|
- lib
|
@@ -236,8 +236,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
236
236
|
- !ruby/object:Gem::Version
|
237
237
|
version: '0'
|
238
238
|
requirements: []
|
239
|
-
rubygems_version: 3.
|
240
|
-
signing_key:
|
239
|
+
rubygems_version: 3.1.6
|
240
|
+
signing_key:
|
241
241
|
specification_version: 4
|
242
242
|
summary: Organize your code into reusable components
|
243
243
|
test_files: []
|