dry-system 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +101 -86
  3. data/README.md +2 -2
  4. data/lib/dry-system.rb +2 -0
  5. data/lib/dry/system.rb +3 -1
  6. data/lib/dry/system/auto_registrar.rb +12 -8
  7. data/lib/dry/system/auto_registrar/configuration.rb +2 -0
  8. data/lib/dry/system/booter.rb +10 -9
  9. data/lib/dry/system/booter/component_registry.rb +3 -5
  10. data/lib/dry/system/component.rb +5 -2
  11. data/lib/dry/system/components.rb +2 -0
  12. data/lib/dry/system/components/bootable.rb +13 -11
  13. data/lib/dry/system/components/config.rb +2 -0
  14. data/lib/dry/system/constants.rb +8 -7
  15. data/lib/dry/system/container.rb +64 -25
  16. data/lib/dry/system/errors.rb +9 -1
  17. data/lib/dry/system/importer.rb +2 -0
  18. data/lib/dry/system/lifecycle.rb +3 -1
  19. data/lib/dry/system/loader.rb +2 -0
  20. data/lib/dry/system/magic_comments_parser.rb +3 -3
  21. data/lib/dry/system/manual_registrar.rb +3 -1
  22. data/lib/dry/system/plugins.rb +9 -4
  23. data/lib/dry/system/plugins/bootsnap.rb +4 -1
  24. data/lib/dry/system/plugins/dependency_graph.rb +47 -0
  25. data/lib/dry/system/plugins/dependency_graph/strategies.rb +30 -0
  26. data/lib/dry/system/plugins/env.rb +2 -0
  27. data/lib/dry/system/plugins/logging.rb +8 -7
  28. data/lib/dry/system/plugins/monitoring.rb +3 -1
  29. data/lib/dry/system/plugins/monitoring/proxy.rb +2 -0
  30. data/lib/dry/system/plugins/notifications.rb +4 -1
  31. data/lib/dry/system/provider.rb +3 -1
  32. data/lib/dry/system/provider_registry.rb +2 -0
  33. data/lib/dry/system/settings.rb +9 -7
  34. data/lib/dry/system/settings/file_loader.rb +4 -2
  35. data/lib/dry/system/settings/file_parser.rb +5 -3
  36. data/lib/dry/system/stubs.rb +2 -0
  37. data/lib/dry/system/system_components/settings.rb +2 -0
  38. data/lib/dry/system/version.rb +3 -1
  39. metadata +25 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9eed405eef945e6f3b43d0efba531f65c21e032db60c229173318872b6c80ddb
4
- data.tar.gz: 6ec5f37f4555a6395e040567ef1b1ec018db3773a0520c92dc8b68d049e15666
3
+ metadata.gz: a9e7b9270e8cf896626e675f2bf98f2e8a7521a56e6b16a64ee30d724aa307a4
4
+ data.tar.gz: fa1ca1a837c0f3185d04a4d420ebb7325793f1165b4dcf4427ee94f81c10c26b
5
5
  SHA512:
6
- metadata.gz: 1c6b8d7a56cc1ccf3c7adb25556e3130f6adde4fb39471f0bf2b7024a6aa3b9e70fef857768a2b6a183cb47d86b7f8278c1e665a1e3ab8d60438411e83fc6370
7
- data.tar.gz: 24b626c4effa07c3dcc57ce56cd7ebcae188add2acfff8e2bc6f41e4fc7714712eb7d27430f9366f4b7cd738bfbb4a16726d4024ff30703ba42af4f28dc564fc
6
+ metadata.gz: d774649cda42fc3eb0f4253f3db5d869947f9ac0e0189a0256926b26f97d15761efa30384991bf62b388c1b59eb370780d787c61984c654544b57ced182d8935
7
+ data.tar.gz: adc45c72848ec6fc31f96a17cfcd02f5034492e645cb549024c149aadc8de2096dc54b27b893c2218bf61a23db610c8b1bf85898fddab0f401ac9af9a0f14fc9
@@ -1,8 +1,23 @@
1
+ # 0.13.0 - 2019-10-13
2
+
3
+ ### Changed
4
+
5
+ - [BREAKING] `Container.key?` triggers lazy-loading for not finalized containers. If component wasn't found it returns `false` without raising an error. This is a breaking change, if you seek the previous behavior, use `Container.registered?` (flash-gordon)
6
+
7
+ ### Added
8
+
9
+ - `Container.resolve` accepts and optional block parameter which will be called if component cannot be found. This makes dry-system consistent with dry-container 0.7.2 (flash-gordon)
10
+ ```ruby
11
+ App.resolve('missing.dep') { :fallback } # => :fallback
12
+ ```
13
+
14
+ [Compare v0.12.0...v0.13.0](https://github.com/dry-rb/dry-system/compare/v0.12.0...v0.13.0)
15
+
1
16
  # 0.12.0 - 2019-04-24
2
17
 
3
18
  ### Changed
4
19
 
5
- * Compatibility with dry-struct 1.0 and dry-types 1.0 (flash-gordon)
20
+ - Compatibility with dry-struct 1.0 and dry-types 1.0 (flash-gordon)
6
21
 
7
22
  [Compare v0.11.0...v0.12.0](https://github.com/dry-rb/dry-system/compare/v0.11.0...v0.12.0)
8
23
 
@@ -10,8 +25,8 @@
10
25
 
11
26
  ### Changed
12
27
 
13
- * [BREAKING] `:decorate` plugin was moved from dry-system to dry-container (available in 0.7.0+). To upgrade remove `use :decorate` and change `decorate` calls from `decorate(key, decorator: something)` to `decorate(key, with: something)` (flash-gordon)
14
- * [internal] Compatibility with dry-struct 0.7.0 and dry-types 0.15.0
28
+ - [BREAKING] `:decorate` plugin was moved from dry-system to dry-container (available in 0.7.0+). To upgrade remove `use :decorate` and change `decorate` calls from `decorate(key, decorator: something)` to `decorate(key, with: something)` (flash-gordon)
29
+ - [internal] Compatibility with dry-struct 0.7.0 and dry-types 0.15.0
15
30
 
16
31
  [Compare v0.10.1...v0.11.0](https://github.com/dry-rb/dry-system/compare/v0.10.1...v0.11.0)
17
32
 
@@ -19,18 +34,19 @@
19
34
 
20
35
  ### Added
21
36
 
22
- * Support for stopping bootable components with `Container.stop(component_name)` (GustavoCaso)
37
+ - Support for stopping bootable components with `Container.stop(component_name)` (GustavoCaso)
23
38
 
24
39
  ### Fixed
25
40
 
26
- * When using a non-finalized container, you can now resolve multiple different container objects registered using the same root key as a bootable component (timriley)
41
+ - When using a non-finalized container, you can now resolve multiple different container objects registered using the same root key as a bootable component (timriley)
27
42
 
28
43
  [Compare v0.10.0...v0.10.1](https://github.com/dry-rb/dry-system/compare/v0.10.0...v0.10.1)
29
44
 
30
45
  # 0.10.0 - 2018-06-07
31
46
 
32
47
  ### Added
33
- * You can now set a custom inflector on the container level. As a result, the `Loader`'s constructor accepts two arguments: `path` and `inflector`, update your custom loaders accordingly (flash-gordon)
48
+
49
+ - You can now set a custom inflector on the container level. As a result, the `Loader`'s constructor accepts two arguments: `path` and `inflector`, update your custom loaders accordingly (flash-gordon)
34
50
 
35
51
  ```ruby
36
52
  class MyContainer < Dry::System::Container
@@ -44,10 +60,10 @@
44
60
 
45
61
  ### Changed
46
62
 
47
- * A helpful error will be raised if an invalid setting value is provided (GustavoCaso)
48
- * When using setting plugin, will use default values from types (GustavoCaso)
49
- * Minimal supported ruby version was bumped to `2.3` (flash-gordon)
50
- * `dry-struct` was updated to `~> 0.5` (flash-gordon)
63
+ - A helpful error will be raised if an invalid setting value is provided (GustavoCaso)
64
+ - When using setting plugin, will use default values from types (GustavoCaso)
65
+ - Minimal supported ruby version was bumped to `2.3` (flash-gordon)
66
+ - `dry-struct` was updated to `~> 0.5` (flash-gordon)
51
67
 
52
68
  [Compare v0.9.2...v0.10.0](https://github.com/dry-rb/dry-system/compare/v0.9.2...v0.10.0)
53
69
 
@@ -55,7 +71,7 @@
55
71
 
56
72
  ### Fixed
57
73
 
58
- * Default namespace no longer breaks resolving dependencies with identifier that includes part of the namespace (ie `mail.mailer`) (GustavoCaso)
74
+ - Default namespace no longer breaks resolving dependencies with identifier that includes part of the namespace (ie `mail.mailer`) (GustavoCaso)
59
75
 
60
76
  [Compare v0.9.1...v0.9.2](https://github.com/dry-rb/dry-system/compare/v0.9.1...v0.9.2)
61
77
 
@@ -63,7 +79,7 @@
63
79
 
64
80
  ### Fixed
65
81
 
66
- * Plugin dependencies are now auto-required and a meaningful error is raised when a dep failed to load (solnic)
82
+ - Plugin dependencies are now auto-required and a meaningful error is raised when a dep failed to load (solnic)
67
83
 
68
84
  [Compare v0.9.0...v0.9.1](https://github.com/dry-rb/dry-system/compare/v0.9.0...v0.9.1)
69
85
 
@@ -71,21 +87,21 @@
71
87
 
72
88
  ### Added
73
89
 
74
- * Plugin API (solnic)
75
- * `:env` plugin which adds support for setting `env` config value (solnic)
76
- * `:logging` plugin which adds a default logger (solnic)
77
- * `:decorate` plugin for decorating registered objects (solnic)
78
- * `:notifications` plugin adding pub/sub bus to containers (solnic)
79
- * `:monitoring` plugin which adds `monitor` method for monitoring object method calls (solnic)
80
- * `:bootsnap` plugin which adds support for bootsnap (solnic)
90
+ - Plugin API (solnic)
91
+ - `:env` plugin which adds support for setting `env` config value (solnic)
92
+ - `:logging` plugin which adds a default logger (solnic)
93
+ - `:decorate` plugin for decorating registered objects (solnic)
94
+ - `:notifications` plugin adding pub/sub bus to containers (solnic)
95
+ - `:monitoring` plugin which adds `monitor` method for monitoring object method calls (solnic)
96
+ - `:bootsnap` plugin which adds support for bootsnap (solnic)
81
97
 
82
98
  ### Changed
83
99
 
84
- * [BREAKING] renamed `Container.{require=>require_from_root}` (GustavoCaso)
100
+ - [BREAKING] renamed `Container.{require=>require_from_root}` (GustavoCaso)
85
101
 
86
102
  ### Internal
87
103
 
88
- * `#bootable?` and `#boot_file` methods were moved from `Component` to `Booter` (GustavoCaso)
104
+ - `#bootable?` and `#boot_file` methods were moved from `Component` to `Booter` (GustavoCaso)
89
105
 
90
106
  [Compare v0.8.1...v0.9.0](https://github.com/dry-rb/dry-system/compare/v0.8.1...v0.9.0)
91
107
 
@@ -93,8 +109,8 @@
93
109
 
94
110
  ### Fixed
95
111
 
96
- * Aliasing an external component works correctly (solnic)
97
- * Manually calling `:init` will also finalize a component (solnic)
112
+ - Aliasing an external component works correctly (solnic)
113
+ - Manually calling `:init` will also finalize a component (solnic)
98
114
 
99
115
  [Compare v0.8.0...v0.8.1](https://github.com/dry-rb/dry-system/compare/v0.8.0...v0.8.1)
100
116
 
@@ -102,16 +118,16 @@
102
118
 
103
119
  ### Added
104
120
 
105
- * Support for external bootable components (solnic)
106
- * Built-in `:system` components including `:settings` component (solnic)
121
+ - Support for external bootable components (solnic)
122
+ - Built-in `:system` components including `:settings` component (solnic)
107
123
 
108
124
  ### Fixed
109
125
 
110
- * Lazy-loading components work when a container has `default_namespace` configured (GustavoCaso)
126
+ - Lazy-loading components work when a container has `default_namespace` configured (GustavoCaso)
111
127
 
112
128
  ### Changed
113
129
 
114
- * [BREAKING] Improved boot DSL with support for namespacing and lifecycle before/after callbacks (solnic)
130
+ - [BREAKING] Improved boot DSL with support for namespacing and lifecycle before/after callbacks (solnic)
115
131
 
116
132
  [Compare v0.7.3...v0.8.0](https://github.com/dry-rb/dry-system/compare/v0.7.3...v0.8.0)
117
133
 
@@ -119,20 +135,20 @@
119
135
 
120
136
  ### Fixed
121
137
 
122
- * `Container.enable_stubs!` calls super too, which actually adds `stub` API (solnic)
123
- * Issues with lazy-loading and import in stub mode are gone (solnic)
138
+ - `Container.enable_stubs!` calls super too, which actually adds `stub` API (solnic)
139
+ - Issues with lazy-loading and import in stub mode are gone (solnic)
124
140
 
125
141
  # 0.7.2 - 2017-08-02
126
142
 
127
143
  ### Added
128
144
 
129
- * `Container.enable_stubs!` for test environments which enables stubbing components (GustavoCaso)
145
+ - `Container.enable_stubs!` for test environments which enables stubbing components (GustavoCaso)
130
146
 
131
147
  ### Changed
132
148
 
133
- * Component identifiers can now include same name more than once ie `foo.stuff.foo` (GustavoCaso)
134
- * `Container#boot!` was renamed to `Container#start` (davydovanton)
135
- * `Container#boot` was renamed to `Container#init` (davydovanton)
149
+ - Component identifiers can now include same name more than once ie `foo.stuff.foo` (GustavoCaso)
150
+ - `Container#boot!` was renamed to `Container#start` (davydovanton)
151
+ - `Container#boot` was renamed to `Container#init` (davydovanton)
136
152
 
137
153
  [Compare v0.7.1...v0.7.2](https://github.com/dry-rb/dry-system/compare/v0.7.1...v0.7.2)
138
154
 
@@ -150,20 +166,20 @@
150
166
  - AutoRegistrar parses initial lines of Ruby source files for "magic comments" when auto-registering components. An `# auto_register: false` magic comment will prevent a Ruby file from being auto-registered (timriley)
151
167
  - `Container.auto_register!`, when called with a block, yields a configuration object to control the auto-registration behavior for that path, with support for configuring 2 different aspects of auto-registration behavior (both optional):
152
168
 
153
- ```ruby
154
- class MyContainer < Dry::System::Container
155
- auto_register!('lib') do |config|
156
- config.instance do |component|
157
- # custom logic for initializing a component
158
- end
159
-
160
- config.exclude do |component|
161
- # return true to skip auto-registration of the component, e.g.
162
- # component.path =~ /entities/
163
- end
169
+ ```ruby
170
+ class MyContainer < Dry::System::Container
171
+ auto_register!('lib') do |config|
172
+ config.instance do |component|
173
+ # custom logic for initializing a component
174
+ end
175
+
176
+ config.exclude do |component|
177
+ # return true to skip auto-registration of the component, e.g.
178
+ # component.path =~ /entities/
164
179
  end
165
180
  end
166
- ```
181
+ end
182
+ ```
167
183
 
168
184
  - A helpful error will be raised if a bootable component's finalize block name doesn't match its boot file name (GustavoCaso)
169
185
 
@@ -175,13 +191,12 @@
175
191
 
176
192
  [Compare v0.6.0...v0.7.0](https://github.com/dry-rb/dry-system/compare/v0.6.0...v0.7.0)
177
193
 
178
-
179
194
  # 0.6.0 - 2016-02-02
180
195
 
181
196
  ### Changed
182
197
 
183
- * Lazy load components as they are resolved, rather than on injection (timriley)
184
- * Perform registration even though component already required (blelump)
198
+ - Lazy load components as they are resolved, rather than on injection (timriley)
199
+ - Perform registration even though component already required (blelump)
185
200
 
186
201
  [Compare v0.5.1...v0.6.0](https://github.com/dry-rb/dry-system/compare/v0.5.1...v0.6.0)
187
202
 
@@ -201,8 +216,8 @@ for multi-container setups. As part of this release `dry-system` has been rename
201
216
  ### Added
202
217
 
203
218
  - Boot DSL with:
204
- * Lifecycle triggers: `init`, `start` and `stop` (solnic)
205
- * `use` method which auto-boots a dependency and makes it available in the booting context (solnic)
219
+ - Lifecycle triggers: `init`, `start` and `stop` (solnic)
220
+ - `use` method which auto-boots a dependency and makes it available in the booting context (solnic)
206
221
  - When a component relies on a bootable component, and is being loaded in isolation, the component will be booted automatically (solnic)
207
222
 
208
223
  ### Changed
@@ -251,27 +266,27 @@ for multi-container setups. As part of this release `dry-system` has been rename
251
266
 
252
267
  - Support for supplying a default namespace to a container, which is passed to the container's injector to allow for convenient shorthand access to registered objects in the same namespace (timriley in [#20](https://github.com/dry-rb/dry-system/pull/20))
253
268
 
254
- ```ruby
255
- # Set up container with default namespace
256
- module Admin
257
- class Container < Dry::Component::Container
258
- configure do |config|
259
- config.root = Pathname.new(__dir__).join("../..")
260
- config.default_namespace = "admin"
261
- end
269
+ ```ruby
270
+ # Set up container with default namespace
271
+ module Admin
272
+ class Container < Dry::Component::Container
273
+ configure do |config|
274
+ config.root = Pathname.new(__dir__).join("../..")
275
+ config.default_namespace = "admin"
262
276
  end
263
-
264
- Import = Container.injector
265
277
  end
266
278
 
267
- module Admin
268
- class CreateUser
269
- # "users.repository" will resolve an Admin::Users::Repository instance,
270
- # where previously you had to identify it as "admin.users.repository"
271
- include Admin::Import["users.repository"]
272
- end
279
+ Import = Container.injector
280
+ end
281
+
282
+ module Admin
283
+ class CreateUser
284
+ # "users.repository" will resolve an Admin::Users::Repository instance,
285
+ # where previously you had to identify it as "admin.users.repository"
286
+ include Admin::Import["users.repository"]
273
287
  end
274
- ```
288
+ end
289
+ ```
275
290
 
276
291
  - Support for supplying to options directly to dry-auto_inject's `Builder` via `Dry::Component::Container#injector(options)`. This allows you to provide dry-auto_inject customizations like your own container of injection strategies (timriley in [#20](https://github.com/dry-rb/dry-system/pull/20))
277
292
  - Support for accessing all available injector strategies, not just the defaults (e.g. `MyContainer.injector.some_custom_strategy`) (timriley in [#19](https://github.com/dry-rb/dry-system/pull/19))
@@ -311,27 +326,27 @@ Removed two pieces that are moving to dry-web:
311
326
 
312
327
  ### Added
313
328
 
314
- * Provide a dependency injector as an `Inject` constant inside any subclass of `Dry::Component::Container`. This injector supports all of `dry-auto_inject`'s default injection strategies, and will lazily load any dependencies as they are injected. It also supports arbitrarily switching strategies, so they can be used in different classes as required (e.g. `include MyComponent::Inject.args["dep"]`) (timriley)
315
- * Support aliased dependency names when calling the injector object (e.g. `MyComponent::Inject[foo: "my_app.foo", bar: "another.thing"]`) (timriley)
316
- * Allow a custom dependency loader to be set on a container via its config (AMHOL)
329
+ - Provide a dependency injector as an `Inject` constant inside any subclass of `Dry::Component::Container`. This injector supports all of `dry-auto_inject`'s default injection strategies, and will lazily load any dependencies as they are injected. It also supports arbitrarily switching strategies, so they can be used in different classes as required (e.g. `include MyComponent::Inject.args["dep"]`) (timriley)
330
+ - Support aliased dependency names when calling the injector object (e.g. `MyComponent::Inject[foo: "my_app.foo", bar: "another.thing"]`) (timriley)
331
+ - Allow a custom dependency loader to be set on a container via its config (AMHOL)
317
332
 
318
- ```ruby
319
- class MyContainer < Dry::Component::Container
320
- configure do |config|
321
- # other config
322
- config.loader = MyLoader
323
- end
333
+ ```ruby
334
+ class MyContainer < Dry::Component::Container
335
+ configure do |config|
336
+ # other config
337
+ config.loader = MyLoader
324
338
  end
325
- ```
339
+ end
340
+ ```
326
341
 
327
342
  ### Changed
328
343
 
329
- * `Container.boot` now only makes a simple `require` for the boot file (solnic)
330
- * Container object is passed to `Container.finalize` blocks (solnic)
331
- * Allow `Pathname` objects passed to `Container.require` (solnic)
332
- * Support lazily loading missing dependencies from imported containers (solnic)
333
- * `Container.import_module` renamed to `.injector` (timriley)
334
- * Default injection strategy is now `kwargs`, courtesy of the new dry-auto_inject default (timriley)
344
+ - `Container.boot` now only makes a simple `require` for the boot file (solnic)
345
+ - Container object is passed to `Container.finalize` blocks (solnic)
346
+ - Allow `Pathname` objects passed to `Container.require` (solnic)
347
+ - Support lazily loading missing dependencies from imported containers (solnic)
348
+ - `Container.import_module` renamed to `.injector` (timriley)
349
+ - Default injection strategy is now `kwargs`, courtesy of the new dry-auto_inject default (timriley)
335
350
 
336
351
  [Compare v0.0.2...v0.1.0](https://github.com/dry-rb/dry-system/compare/v0.0.2...v0.1.0)
337
352
 
@@ -339,12 +354,12 @@ Removed two pieces that are moving to dry-web:
339
354
 
340
355
  ### Added
341
356
 
342
- * Containers have a `name` setting (solnic)
343
- * Containers can be imported into one another (solnic)
357
+ - Containers have a `name` setting (solnic)
358
+ - Containers can be imported into one another (solnic)
344
359
 
345
360
  ### Changed
346
361
 
347
- * Container name is used to determine the name of its config file (solnic)
362
+ - Container name is used to determine the name of its config file (solnic)
348
363
 
349
364
  [Compare v0.0.1...v0.0.2](https://github.com/dry-rb/dry-system/compare/v0.0.1...v0.0.2)
350
365
 
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [gem]: https://rubygems.org/gems/dry-system
2
- [travis]: https://travis-ci.org/dry-rb/dry-system
2
+ [travis]: https://travis-ci.com/dry-rb/dry-system
3
3
  [codeclimate]: https://codeclimate.com/github/dry-rb/dry-system
4
4
  [inchpages]: http://inch-ci.org/github/dry-rb/dry-system
5
5
  [chat]: https://dry-rb.zulipchat.com
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
  [![Gem Version](https://badge.fury.io/rb/dry-system.svg)][gem]
11
- [![Build Status](https://travis-ci.org/dry-rb/dry-system.svg?branch=master)][travis]
11
+ [![Build Status](https://travis-ci.com/dry-rb/dry-system.svg?branch=master)][travis]
12
12
  [![Code Climate](https://codeclimate.com/github/dry-rb/dry-system/badges/gpa.svg)][codeclimate]
13
13
  [![Test Coverage](https://codeclimate.com/github/dry-rb/dry-system/badges/coverage.svg)][codeclimate]
14
14
  [![Inline docs](http://inch-ci.org/github/dry-rb/dry-system.svg?branch=master)][inchpages]
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/system'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/system/provider'
2
4
  require 'dry/system/provider_registry'
3
5
 
@@ -22,7 +24,7 @@ module Dry
22
24
 
23
25
  # @api private
24
26
  def self.providers
25
- @__providers__ ||= ProviderRegistry.new
27
+ @providers ||= ProviderRegistry.new
26
28
  end
27
29
  end
28
30
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/system/constants'
2
4
  require 'dry/system/magic_comments_parser'
3
5
  require 'dry/system/auto_registrar/configuration'
@@ -35,7 +37,9 @@ module Dry
35
37
  next if !component.auto_register? || registration_config.exclude.(component)
36
38
 
37
39
  container.require_component(component) do
38
- register(component.identifier, memoize: registration_config.memoize) { registration_config.instance.(component) }
40
+ register(component.identifier, memoize: registration_config.memoize) {
41
+ registration_config.instance.(component)
42
+ }
39
43
  end
40
44
  end
41
45
  end
@@ -44,15 +48,15 @@ module Dry
44
48
 
45
49
  # @api private
46
50
  def components(dir)
47
- files(dir).
48
- map { |file_name| [file_name, file_options(file_name)] }.
49
- map { |(file_name, options)| component(relative_path(dir, file_name), **options) }.
50
- reject { |component| key?(component.identifier) }
51
+ files(dir)
52
+ .map { |file_name| [file_name, file_options(file_name)] }
53
+ .map { |(file_name, options)| component(relative_path(dir, file_name), **options) }
54
+ .reject { |component| registered?(component.identifier) }
51
55
  end
52
56
 
53
57
  # @api private
54
58
  def files(dir)
55
- Dir["#{root}/#{dir}/**/#{RB_GLOB}"]
59
+ ::Dir["#{root}/#{dir}/**/#{RB_GLOB}"].sort
56
60
  end
57
61
 
58
62
  # @api private
@@ -77,8 +81,8 @@ module Dry
77
81
  end
78
82
 
79
83
  # @api private
80
- def key?(name)
81
- container.key?(name)
84
+ def registered?(name)
85
+ container.registered?(name)
82
86
  end
83
87
 
84
88
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module System
3
5
  class AutoRegistrar
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/system/components/bootable'
2
4
  require 'dry/system/errors'
3
5
  require 'dry/system/constants'
@@ -49,9 +51,7 @@ module Dry
49
51
  def load_component(path)
50
52
  identifier = Pathname(path).basename(RB_EXT).to_s.to_sym
51
53
 
52
- unless components.exists?(identifier)
53
- require path
54
- end
54
+ require path unless components.exists?(identifier)
55
55
 
56
56
  self
57
57
  end
@@ -108,7 +108,7 @@ module Dry
108
108
  # @api private
109
109
  def stop(name_or_component)
110
110
  call(name_or_component) do |component|
111
- raise ComponentNotStartedError.new(name_or_component) unless booted.include?(component)
111
+ raise ComponentNotStartedError, name_or_component unless booted.include?(component)
112
112
 
113
113
  component.stop
114
114
  booted.delete(component)
@@ -120,9 +120,7 @@ module Dry
120
120
  # @api private
121
121
  def call(name_or_component)
122
122
  with_component(name_or_component) do |component|
123
- unless component
124
- raise ComponentFileMismatchError.new(name, registered_booted_keys)
125
- end
123
+ raise ComponentFileMismatchError.new(name, registered_booted_keys) unless component
126
124
 
127
125
  yield(component) if block_given?
128
126
 
@@ -153,13 +151,16 @@ module Dry
153
151
 
154
152
  # @api private
155
153
  def require_boot_file(identifier)
156
- boot_file = boot_files.detect { |path| Pathname(path).basename(RB_EXT).to_s == identifier.to_s }
154
+ boot_file = boot_files.detect { |path|
155
+ Pathname(path).basename(RB_EXT).to_s == identifier.to_s
156
+ }
157
+
157
158
  require boot_file if boot_file
158
159
  end
159
160
 
160
161
  # @api private
161
162
  def boot_files
162
- Dir["#{path}/**/#{RB_GLOB}"]
163
+ ::Dir["#{path}/**/#{RB_GLOB}"].sort
163
164
  end
164
165
 
165
166
  # @api private