dry-system 0.24.0 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|