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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ee8640692f53a8c0a9a29fd59bfe5595a269b3680d4a8f71d630e87ed2398b9
4
- data.tar.gz: 435806646f338c4bdec369ae98fc29f451bb6a5dbe38bc2f20d7c3cb422b4223
3
+ metadata.gz: 84621f047b9ae5be5233f099d1031bf5241c8694bd965884d161ce5f5b6ee079
4
+ data.tar.gz: be2f0f633dcbea09059608ed3dde19a0cb7d89b7d3f1b9e5484e780eb438f3d0
5
5
  SHA512:
6
- metadata.gz: 90130f6f367b24a1b45fd6be2915efe9d0c9e22b676e03b3a827ea7e9d02accca210272c8f5cd330993f2ea378ca2674ffc9281f7d695b14b7acb6f4d0a24c6d
7
- data.tar.gz: 30cb6a24cb9e12cbd259223d0b861f837b692e139b21f95e1dfdd6b0365129e37377153151bce0cda8b9171249507ff458e4239ac61df0200c7144063381c0ad
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 "concurrent-ruby", "~> 1.0"
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.14", ">= 0.14.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.5", ">= 0.5"
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"
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "dry/system/constants"
4
- require_relative "component"
5
4
 
6
5
  module Dry
7
6
  module System
@@ -1,14 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "concurrent/map"
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
@@ -2,9 +2,6 @@
2
2
 
3
3
  require "pathname"
4
4
  require "dry/system/constants"
5
- require_relative "constants"
6
- require_relative "identifier"
7
- require_relative "magic_comments_parser"
8
5
 
9
6
  module Dry
10
7
  module System
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/deprecations"
4
-
5
3
  Dry::Core::Deprecations.announce(
6
4
  "require \"dry/system/components\"",
7
5
  "Use `require \"dry/system/provider_sources\"` instead",
@@ -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)
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "dry/system/constants"
4
4
  require "dry/system/errors"
5
- require_relative "component_dir"
6
5
 
7
6
  module Dry
8
7
  module System
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/equalizer"
4
3
  require "dry/system/constants"
5
4
 
6
5
  module Dry
@@ -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
 
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/constants"
4
-
5
3
  module Dry
6
4
  module System
7
5
  include Dry::Core::Constants
@@ -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
- # We presume "." as key namespace separator. This is not intended to be
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
- config.finalize! if finalize_config
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
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/deprecations"
4
-
5
3
  module Dry
6
4
  module System
7
5
  extend Dry::Core::Deprecations["dry-system"]
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/equalizer"
4
- require_relative "constants"
3
+ require "dry/system/constants"
5
4
 
6
5
  module Dry
7
6
  module System
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "dry/container"
4
- require_relative "constants"
4
+ require "dry/system/constants"
5
5
 
6
6
  module Dry
7
7
  module System
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/equalizer"
4
-
5
3
  module Dry
6
4
  module System
7
5
  # An indirect component is a component that cannot be directly from a source file
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../loader"
4
-
5
3
  module Dry
6
4
  module System
7
5
  class Loader
@@ -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
@@ -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)
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/configurable"
4
- require "dry/core/class_attributes"
5
- require "dry/core/deprecations"
6
3
  require_relative "source_dsl"
7
4
 
8
5
  module Dry
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/deprecations"
4
-
5
3
  module Dry
6
4
  module System
7
5
  class Provider
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/deprecations"
4
- require_relative "constants"
5
- require_relative "provider/source"
3
+ require "dry/system/constants"
6
4
 
7
5
  module Dry
8
6
  module System
@@ -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
- require_relative "errors"
7
- require_relative "constants"
8
- require_relative "provider"
4
+
5
+ require "dry/system/errors"
6
+ require "dry/system/constants"
9
7
 
10
8
  module Dry
11
9
  module System
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/deprecations"
4
- require_relative "constants"
5
- require_relative "provider/source"
3
+ require "dry/system/constants"
6
4
 
7
5
  module Dry
8
6
  module System
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/configurable"
4
- require "dry/core/deprecations"
5
- require_relative "loader"
6
-
7
3
  module Dry
8
4
  module System
9
5
  module ProviderSources
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/configurable"
4
- require "dry/core/deprecations"
5
-
6
3
  module Dry
7
4
  module System
8
5
  module ProviderSources
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module System
5
- VERSION = "0.25.0"
5
+ VERSION = "0.27.0"
6
6
  end
7
7
  end
data/lib/dry/system.rb CHANGED
@@ -1,10 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/deprecations"
4
- require_relative "system/provider_source_registry"
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.25.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-07-10 00:00:00.000000000 Z
11
+ date: 2022-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: concurrent-ruby
14
+ name: zeitwerk
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
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: '1.0'
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.14'
47
+ version: '0.16'
48
48
  - - ">="
49
49
  - !ruby/object:Gem::Version
50
- version: 0.14.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.14'
57
+ version: '0.16'
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 0.14.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.5'
87
+ version: '0.9'
88
88
  - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: '0.5'
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.5'
97
+ version: '0.9'
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
- version: '0.5'
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