dry-system 0.25.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
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