dry-system 0.15.0 → 0.19.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +142 -2
  3. data/LICENSE +1 -1
  4. data/README.md +1 -1
  5. data/dry-system.gemspec +5 -4
  6. data/lib/dry-system.rb +1 -1
  7. data/lib/dry/system.rb +2 -2
  8. data/lib/dry/system/auto_registrar.rb +17 -59
  9. data/lib/dry/system/booter.rb +68 -41
  10. data/lib/dry/system/component.rb +62 -100
  11. data/lib/dry/system/component_dir.rb +128 -0
  12. data/lib/dry/system/components.rb +2 -2
  13. data/lib/dry/system/components/bootable.rb +6 -34
  14. data/lib/dry/system/components/config.rb +2 -2
  15. data/lib/dry/system/config/component_dir.rb +202 -0
  16. data/lib/dry/system/config/component_dirs.rb +184 -0
  17. data/lib/dry/system/constants.rb +5 -5
  18. data/lib/dry/system/container.rb +133 -184
  19. data/lib/dry/system/errors.rb +21 -16
  20. data/lib/dry/system/identifier.rb +157 -0
  21. data/lib/dry/system/lifecycle.rb +2 -2
  22. data/lib/dry/system/loader.rb +40 -41
  23. data/lib/dry/system/loader/autoloading.rb +26 -0
  24. data/lib/dry/system/magic_comments_parser.rb +2 -2
  25. data/lib/dry/system/manual_registrar.rb +1 -1
  26. data/lib/dry/system/plugins.rb +7 -7
  27. data/lib/dry/system/plugins/bootsnap.rb +3 -3
  28. data/lib/dry/system/plugins/dependency_graph.rb +3 -3
  29. data/lib/dry/system/plugins/dependency_graph/strategies.rb +1 -1
  30. data/lib/dry/system/plugins/logging.rb +5 -5
  31. data/lib/dry/system/plugins/monitoring.rb +3 -3
  32. data/lib/dry/system/plugins/monitoring/proxy.rb +3 -3
  33. data/lib/dry/system/plugins/notifications.rb +1 -1
  34. data/lib/dry/system/provider.rb +3 -3
  35. data/lib/dry/system/settings.rb +6 -6
  36. data/lib/dry/system/settings/file_loader.rb +2 -2
  37. data/lib/dry/system/settings/file_parser.rb +1 -1
  38. data/lib/dry/system/stubs.rb +1 -1
  39. data/lib/dry/system/system_components/settings.rb +1 -1
  40. data/lib/dry/system/version.rb +1 -1
  41. metadata +21 -25
  42. data/lib/dry/system/auto_registrar/configuration.rb +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f029366a9ef603592adb0566dc7d7d1afb13b4e0a5ea86d70d6560a4e80b80f0
4
- data.tar.gz: 96b625962372b8e0a00a4cb99a449f8a5ed550c3328b887ef65c47a314628092
3
+ metadata.gz: bd9ff0c5114ab780f7fc44ea9cb2b963ed980e75a0aefa248232363955cb8e8d
4
+ data.tar.gz: 94c666638d7a2786ee1cd34f77a1594ea6ffeb5a49951e4412ba0539bb3d7947
5
5
  SHA512:
6
- metadata.gz: 1ef15338eb9e108b6e489a59ce10f0e8e57608cb6882ae7f8b89680786752b68e00b12a15238f61af63c03382b160dadfe59457ef0d35516fe9defcfe69cb4f9
7
- data.tar.gz: 4db3b188698061f78f23a8647d6145dc4466da9ac867c7c561f4aecd59434a18493b98b22d60c92f619f19f5fc177a723a8f2b4050be16f00d9151cadf7fdef2
6
+ metadata.gz: e778ff07b49f0e2e670d253263a110b5a81145d6e9149f6c12d6684a1a3b10fe3963f8d0b085fab0e9e8e4c8cc099289feb36c3ad154644ab8af9d0ef13c887c
7
+ data.tar.gz: 6b94ff8beab87af8621ee6e7e33e0360c4bf9e367f79bb5c5242d5ba09f60906e0c8a30e0e7e49b77b6ce17aa80ea4e82da5d310ba425d6c9a7801b94b4cabd3
data/CHANGELOG.md CHANGED
@@ -1,4 +1,144 @@
1
- ## v0.15.0 2020-01-30
1
+ <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
2
+
3
+ ## 0.19.0 2021-04-22
4
+
5
+ This release marks a huge step forward for dry-system, bringing support for Zeitwerk and other autoloaders, plus clearer configuration and improved consistency around component resolution for both finalized and lazy loading containers. [Read the announcement post](https://dry-rb.org/news/2021/04/22/dry-system-0-19-released-with-zeitwerk-support-and-more-leading-the-way-for-hanami-2-0/) for a high-level tour of the new features.
6
+
7
+ ### Added
8
+
9
+ - New `component_dirs` setting on `Dry::System::Container`, which must be used for specifying the directories which dry-system will search for component source files.
10
+
11
+ Each added component dir is relative to the container's `root`, and can have its own set of settings configured:
12
+
13
+ ```ruby
14
+ class MyApp::Container < Dry::System::Container
15
+ configure do |config|
16
+ config.root = __dir__
17
+
18
+ # Defaults for all component dirs can be configured separately
19
+ config.component_dirs.auto_register = true # default is already true
20
+
21
+ # Component dirs can be added and configured independently
22
+ config.component_dirs.add "lib" do |dir|
23
+ dir.add_to_load_path = true # defaults to true
24
+ dir.default_namespace = "my_app"
25
+ end
26
+
27
+ # All component dir settings are optional. Component dirs relying on default
28
+ # settings can be added like so:
29
+ config.component_dirs.add "custom_components"
30
+ end
31
+ end
32
+ ```
33
+
34
+ The following settings are available for configuring added `component_dirs`:
35
+
36
+ - `auto_register`, a boolean, or a proc accepting a `Dry::System::Component` instance and returning a truthy or falsey value. Providing a proc allows an auto-registration policy to apply on a per-component basis
37
+ - `add_to_load_path`, a boolean
38
+ - `default_namespace`, a string representing the leading namespace segments to be stripped from the component's identifier (given the identifier is derived from the component's fully qualified class name)
39
+ - `loader`, a custom replacement for the default `Dry::System::Loader` to be used for the component dir
40
+ - `memoize`, a boolean, to enable/disable memoizing all components in the directory, or a proc accepting a `Dry::System::Component` instance and returning a truthy or falsey value. Providing a proc allows a memoization policy to apply on a per-component basis
41
+
42
+ _All component dir settings are optional._
43
+
44
+ (@timriley in #155, #157, and #162)
45
+ - A new autoloading-friendly `Dry::System::Loader::Autoloading` is available, which is tested to work with [Zeitwerk](https://github.com/fxn/zeitwerk) 🎉
46
+
47
+ Configure this on the container (via a component dir `loader` setting), and the loader will no longer `require` any components, instead allowing missing constant resolution to trigger the loading of the required file.
48
+
49
+ This loader presumes an autoloading system like Zeitwerk has already been enabled and appropriately configured.
50
+
51
+ A recommended setup is as follows:
52
+
53
+ ```ruby
54
+ require "dry/system/container"
55
+ require "dry/system/loader/autoloading"
56
+ require "zeitwerk"
57
+
58
+ class MyApp::Container < Dry::System::Container
59
+ configure do |config|
60
+ config.root = __dir__
61
+
62
+ config.component_dirs.loader = Dry::System::Loader::Autoloading
63
+ config.component_dirs.add_to_load_path = false
64
+
65
+ config.component_dirs.add "lib" do |dir|
66
+ # ...
67
+ end
68
+ end
69
+ end
70
+
71
+ loader = Zeitwerk::Loader.new
72
+ loader.push_dir MyApp::Container.config.root.join("lib").realpath
73
+ loader.setup
74
+ ```
75
+
76
+ (@timriley in #153)
77
+ - [BREAKING] `Dry::System::Component` instances (which users of dry-system will interact with via custom loaders, as well as via the `auto_register` and `memoize` component dir settings described above) now return a `Dry::System::Identifier` from their `#identifier` method. The raw identifier string may be accessed via the identifier's own `#key` or `#to_s` methods. `Identifier` also provides a helpful namespace-aware `#start_with?` method for returning whether the identifier begins with the provided namespace(s) (@timriley in #158)
78
+
79
+ ### Changed
80
+
81
+ - Components with `# auto_register: false` magic comments in their source files are now properly ignored when lazy loading (@timriley in #155)
82
+ - `# memoize: true` and `# memoize: false` magic comments at top of component files are now respected (@timriley in #155)
83
+ - [BREAKING] `Dry::System::Container.load_paths!` has been renamed to `.add_to_load_path!`. This method now exists as a mere convenience only. Calling this method is no longer required for any configured `component_dirs`; these are now added to the load path automatically (@timriley in #153 and #155)
84
+ - [BREAKING] `auto_register` container setting has been removed. Configured directories to be auto-registered by adding `component_dirs` instead (@timriley in #155)
85
+ - [BREAKING] `default_namespace` container setting has been removed. Set it when adding `component_dirs` instead (@timriley in #155)
86
+ - [BREAKING] `loader` container setting has been nested under `component_dirs`, now available as `component_dirs.loader` to configure a default loader for all component dirs, as well as on individual component dirs when being added (@timriley in #162)
87
+ - [BREAKING] `Dry::System::ComponentLoadError` is no longer raised when a component could not be lazy loaded; this was only raised in a single specific failure condition. Instead, a `Dry::Container::Error` is raised in all cases of components failing to load (@timriley in #155)
88
+ - [BREAKING] `Dry::System::Container.auto_register!` has been removed. Configure `component_dirs` instead. (@timriley in #157)
89
+ - [BREAKING] The `Dry::System::Loader` interface has changed. It is now a static interface, no longer initialized with a component. The component is instead passed to each method as an argument: `.require!(component)`, `.call(component, *args)`, `.constant(component)` (@timriley in #157)
90
+ - [BREAKING] `Dry::System::Container.require_path` has been removed. Provide custom require behavior by configuring your own `loader` (@timriley in #153)
91
+
92
+ [Compare v0.18.1...v0.19.0](https://github.com/dry-rb/dry-system/compare/v0.18.1...v0.19.0)
93
+
94
+ ## 0.18.1 2020-08-26
95
+
96
+
97
+ ### Fixed
98
+
99
+ - Made `Booter#boot_files` a public method again, since it was required by dry-rails (@timriley)
100
+
101
+
102
+ [Compare v0.18.0...v0.18.1](https://github.com/dry-rb/dry-system/compare/v0.18.0...v0.18.1)
103
+
104
+ ## 0.18.0 2020-08-24
105
+
106
+
107
+ ### Added
108
+
109
+ - New `bootable_dirs` setting on `Dry::System::Container`, which accepts paths to multiple directories for looking up bootable component files. (@timriley in PR #151)
110
+
111
+ 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.
112
+
113
+ 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.
114
+
115
+
116
+ [Compare v0.17.0...v0.18.0](https://github.com/dry-rb/dry-system/compare/v0.17.0...v0.18.0)
117
+
118
+ ## 0.17.0 2020-02-19
119
+
120
+
121
+ ### Fixed
122
+
123
+ - Works with the latest dry-configurable version (issue #141) (@solnic)
124
+
125
+ ### Changed
126
+
127
+ - Depends on dry-configurable `=> 0.11.1` now (@solnic)
128
+
129
+ [Compare v0.16.0...v0.17.0](https://github.com/dry-rb/dry-system/compare/v0.16.0...v0.17.0)
130
+
131
+ ## 0.16.0 2020-02-15
132
+
133
+
134
+ ### Changed
135
+
136
+ - Plugins can now define their own settings which are available in the `before(:configure)` hook (@solnic)
137
+ - Dependency on dry-configurable was bumped to `~> 0.11` (@solnic)
138
+
139
+ [Compare v0.15.0...v0.16.0](https://github.com/dry-rb/dry-system/compare/v0.15.0...v0.16.0)
140
+
141
+ ## 0.15.0 2020-01-30
2
142
 
3
143
 
4
144
  ### Added
@@ -18,7 +158,7 @@ after(:configure) { config.my_new_setting = "awesome" }
18
158
  - Centralize error definitions in `lib/dry/system/errors.rb` (@cgeorgii)
19
159
  - All built-in plugins use `before(:configure)` now to declare their settings (@solnic)
20
160
 
21
- [Compare v0.14.1...vv0.15.0](https://github.com/dry-rb/dry-system/compare/v0.14.1...vv0.15.0)
161
+ [Compare v0.14.1...v0.15.0](https://github.com/dry-rb/dry-system/compare/v0.14.1...v0.15.0)
22
162
 
23
163
  ## 0.14.1 2020-01-22
24
164
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2020 dry-rb team
3
+ Copyright (c) 2015-2021 dry-rb team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
data/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  This library officially supports the following Ruby versions:
23
23
 
24
- * MRI >= `2.4`
24
+ * MRI >= `2.5`
25
25
  * jruby >= `9.2`
26
26
 
27
27
  ## License
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'
@@ -23,15 +25,14 @@ Gem::Specification.new do |spec|
23
25
  spec.metadata['source_code_uri'] = 'https://github.com/dry-rb/dry-system'
24
26
  spec.metadata['bug_tracker_uri'] = 'https://github.com/dry-rb/dry-system/issues'
25
27
 
26
- spec.required_ruby_version = ">= 2.4.0"
28
+ spec.required_ruby_version = ">= 2.5.0"
27
29
 
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.7"
33
+ spec.add_runtime_dependency "dry-configurable", "~> 0.12", ">= 0.12.1"
32
34
  spec.add_runtime_dependency "dry-container", "~> 0.7", ">= 0.7.2"
33
- spec.add_runtime_dependency "dry-core", "~> 0.3", ">= 0.3.1"
34
- spec.add_runtime_dependency "dry-equalizer", "~> 0.2"
35
+ spec.add_runtime_dependency "dry-core", "~> 0.5", ">= 0.5"
35
36
  spec.add_runtime_dependency "dry-inflector", "~> 0.1", ">= 0.1.2"
36
37
  spec.add_runtime_dependency "dry-struct", "~> 1.0"
37
38
 
data/lib/dry-system.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/system'
3
+ require "dry/system"
data/lib/dry/system.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/system/provider'
4
- require 'dry/system/provider_registry'
3
+ require "dry/system/provider"
4
+ require "dry/system/provider_registry"
5
5
 
6
6
  module Dry
7
7
  module System
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/system/constants'
4
- require 'dry/system/magic_comments_parser'
5
- require 'dry/system/auto_registrar/configuration'
3
+ require "dry/system/constants"
4
+ require_relative "component"
6
5
 
7
6
  module Dry
8
7
  module System
@@ -17,83 +16,42 @@ module Dry
17
16
  class AutoRegistrar
18
17
  attr_reader :container
19
18
 
20
- attr_reader :config
21
-
22
19
  def initialize(container)
23
20
  @container = container
24
- @config = container.config
25
21
  end
26
22
 
27
23
  # @api private
28
24
  def finalize!
29
- Array(config.auto_register).each { |dir| call(dir) }
25
+ container.component_dirs.each do |component_dir|
26
+ call(component_dir) if component_dir.auto_register?
27
+ end
30
28
  end
31
29
 
32
30
  # @api private
33
- def call(dir)
34
- registration_config = Configuration.new
35
- yield(registration_config) if block_given?
36
- components(dir).each do |component|
37
- next if !component.auto_register? || registration_config.exclude.(component)
31
+ def call(component_dir)
32
+ components(component_dir).each do |component|
33
+ next unless register_component?(component)
38
34
 
39
- container.require_component(component) do
40
- register(component.identifier, memoize: registration_config.memoize) {
41
- registration_config.instance.(component)
42
- }
43
- end
35
+ container.register(component.key, memoize: component.memoize?) { component.instance }
44
36
  end
45
37
  end
46
38
 
47
39
  private
48
40
 
49
- # @api private
50
- def components(dir)
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) }
41
+ def components(component_dir)
42
+ files(component_dir.full_path).map { |file_path|
43
+ component_dir.component_for_path(file_path)
44
+ }
55
45
  end
56
46
 
57
- # @api private
58
47
  def files(dir)
59
- components_dir = File.join(root, dir)
60
-
61
- unless ::Dir.exist?(components_dir)
62
- raise ComponentsDirMissing, "Components dir '#{components_dir}' not found"
63
- end
64
-
65
- ::Dir["#{components_dir}/**/#{RB_GLOB}"].sort
66
- end
67
-
68
- # @api private
69
- def relative_path(dir, file_path)
70
- dir_root = root.join(dir.to_s.split('/')[0])
71
- file_path.to_s.sub("#{dir_root}/", '').sub(RB_EXT, EMPTY_STRING)
72
- end
48
+ raise ComponentDirNotFoundError, dir unless Dir.exist?(dir)
73
49
 
74
- # @api private
75
- def file_options(file_name)
76
- MagicCommentsParser.(file_name)
77
- end
78
-
79
- # @api private
80
- def component(path, **options)
81
- container.component(path, **options)
50
+ Dir["#{dir}/**/#{RB_GLOB}"].sort
82
51
  end
83
52
 
84
- # @api private
85
- def root
86
- container.root
87
- end
88
-
89
- # @api private
90
- def registered?(name)
91
- container.registered?(name)
92
- end
93
-
94
- # @api private
95
- def register(*args, &block)
96
- container.register(*args, &block)
53
+ def register_component?(component)
54
+ !container.registered?(component.key) && component.auto_register?
97
55
  end
98
56
  end
99
57
  end
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
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'
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,44 +17,39 @@ module Dry
16
17
  #
17
18
  # @api private
18
19
  class Booter
19
- attr_reader :path
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(path)
27
- @path = path
27
+ def initialize(paths)
28
+ @paths = paths
28
29
  @booted = []
29
30
  @components = ComponentRegistry.new
30
31
  end
31
32
 
32
- # @api private
33
- def bootable?(component)
34
- boot_file(component).exist?
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}")
42
- end
43
-
44
33
  # @api private
45
34
  def register_component(component)
46
35
  components.register(component)
47
36
  self
48
37
  end
49
38
 
39
+ # Returns a bootable component if it can be found or loaded, otherwise nil
40
+ #
41
+ # @return [Dry::System::Components::Bootable, nil]
50
42
  # @api private
51
- def load_component(path)
52
- identifier = Pathname(path).basename(RB_EXT).to_s.to_sym
43
+ def find_component(name)
44
+ name = name.to_sym
53
45
 
54
- Kernel.require path unless components.exists?(identifier)
46
+ return components[name] if components.exists?(name)
55
47
 
56
- self
48
+ return if finalized?
49
+
50
+ require_boot_file(name)
51
+
52
+ components[name] if components.exists?(name)
57
53
  end
58
54
 
59
55
  # @api private
@@ -69,6 +65,13 @@ module Dry
69
65
  freeze
70
66
  end
71
67
 
68
+ # @!method finalized?
69
+ # Returns true if the booter has been finalized
70
+ #
71
+ # @return [Boolean]
72
+ # @api private
73
+ alias_method :finalized?, :frozen?
74
+
72
75
  # @api private
73
76
  def shutdown
74
77
  components.each do |component|
@@ -120,7 +123,7 @@ module Dry
120
123
  # @api private
121
124
  def call(name_or_component)
122
125
  with_component(name_or_component) do |component|
123
- raise ComponentFileMismatchError.new(name, registered_booted_keys) unless component
126
+ raise ComponentFileMismatchError, name unless component
124
127
 
125
128
  yield(component) if block_given?
126
129
 
@@ -129,11 +132,37 @@ module Dry
129
132
  end
130
133
 
131
134
  # @api private
132
- def lifecycle_container(container)
133
- LifecycleContainer.new(container)
135
+ def boot_dependency(component)
136
+ if (component = find_component(component.root_key))
137
+ start(component)
138
+ end
134
139
  end
135
140
 
136
- # @api private
141
+ # Returns all boot files within the configured paths
142
+ #
143
+ # Searches for files in the order of the configured paths. In the case of multiple
144
+ # identically-named boot files within different paths, the file found first will be
145
+ # returned, and other matching files will be discarded.
146
+ #
147
+ # @return [Array<Pathname>]
148
+ # @api public
149
+ def boot_files
150
+ @boot_files ||= paths.each_with_object([[], []]) { |path, (boot_files, loaded)|
151
+ files = Dir["#{path}/#{RB_GLOB}"].sort
152
+
153
+ files.each do |file|
154
+ basename = File.basename(file)
155
+
156
+ unless loaded.include?(basename)
157
+ boot_files << Pathname(file)
158
+ loaded << basename
159
+ end
160
+ end
161
+ }.first
162
+ end
163
+
164
+ private
165
+
137
166
  def with_component(id_or_component)
138
167
  component =
139
168
  case id_or_component
@@ -149,24 +178,22 @@ module Dry
149
178
  yield(component)
150
179
  end
151
180
 
152
- # @api private
153
- def require_boot_file(identifier)
154
- boot_file = boot_files.detect { |path|
155
- Pathname(path).basename(RB_EXT).to_s == identifier.to_s
156
- }
181
+ def load_component(path)
182
+ identifier = Pathname(path).basename(RB_EXT).to_s.to_sym
157
183
 
158
- Kernel.require boot_file if boot_file
184
+ Kernel.require path unless components.exists?(identifier)
185
+
186
+ self
159
187
  end
160
188
 
161
- # @api private
162
- def boot_files
163
- ::Dir["#{path}/**/#{RB_GLOB}"].sort
189
+ def require_boot_file(identifier)
190
+ boot_file = find_boot_file(identifier)
191
+
192
+ Kernel.require boot_file if boot_file
164
193
  end
165
194
 
166
- # @api private
167
- def boot_dependency(component)
168
- boot_file = boot_file(component)
169
- start(boot_file.basename('.*').to_s.to_sym) if boot_file.exist?
195
+ def find_boot_file(name)
196
+ boot_files.detect { |file| File.basename(file, RB_EXT) == name.to_s }
170
197
  end
171
198
  end
172
199
  end