dry-configurable 0.11.6 → 1.0.1

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.
@@ -1,71 +1,64 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'concurrent/map'
4
-
5
- require 'dry/equalizer'
6
- require 'dry/configurable/constants'
7
-
8
3
  module Dry
9
4
  module Configurable
10
- # A settings map
5
+ # A collection of defined settings on a given class.
11
6
  #
12
7
  # @api private
13
8
  class Settings
14
- include Dry::Equalizer(:elements)
9
+ include Dry::Equalizer(:settings)
15
10
 
16
11
  include Enumerable
17
12
 
18
13
  # @api private
19
- attr_reader :elements
14
+ attr_reader :settings
15
+
16
+ # @api private
17
+ def initialize(settings = EMPTY_ARRAY)
18
+ @settings = settings.each_with_object({}) { |s, m| m[s.name] = s }
19
+ end
20
20
 
21
21
  # @api private
22
- def initialize(elements = EMPTY_ARRAY)
23
- initialize_elements(elements)
22
+ private def initialize_copy(source)
23
+ @settings = source.settings.dup
24
24
  end
25
25
 
26
26
  # @api private
27
27
  def <<(setting)
28
- elements[setting.name] = setting
28
+ settings[setting.name] = setting
29
29
  self
30
30
  end
31
31
 
32
- # @api private
32
+ # Returns the setting for the given name, if found.
33
+ #
34
+ # @return [Setting, nil] the setting, or nil if not found
35
+ #
36
+ # @api public
33
37
  def [](name)
34
- elements[name]
38
+ settings[name]
35
39
  end
36
40
 
37
- # @api private
41
+ # Returns true if a setting for the given name is defined.
42
+ #
43
+ # @return [Boolean]
44
+ #
45
+ # @api public
38
46
  def key?(name)
39
47
  keys.include?(name)
40
48
  end
41
49
 
42
- # @api private
50
+ # Returns the list of defined setting names.
51
+ #
52
+ # @return [Array<Symbol>]
53
+ #
54
+ # @api public
43
55
  def keys
44
- elements.keys
56
+ settings.keys
45
57
  end
46
58
 
47
- # @api private
59
+ # @api public
48
60
  def each(&block)
49
- elements.values.each(&block)
50
- end
51
-
52
- # @api private
53
- def pristine
54
- self.class.new(map(&:pristine))
55
- end
56
-
57
- private
58
-
59
- # @api private
60
- def initialize_copy(source)
61
- initialize_elements(source.map(&:dup))
62
- end
63
-
64
- # @api private
65
- def initialize_elements(elements)
66
- @elements = elements.each_with_object(Concurrent::Map.new) { |s, m|
67
- m[s.name] = s
68
- }
61
+ settings.each_value(&block)
69
62
  end
70
63
  end
71
64
  end
@@ -10,7 +10,7 @@ module Dry
10
10
  #
11
11
  # @api public
12
12
  def reset_config
13
- @config = config.pristine
13
+ @__config__ = config.pristine
14
14
  end
15
15
  end
16
16
 
@@ -3,6 +3,6 @@
3
3
  module Dry
4
4
  module Configurable
5
5
  # @api public
6
- VERSION = '0.11.6'
6
+ VERSION = "1.0.1"
7
7
  end
8
8
  end
@@ -1,15 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'concurrent/array'
3
+ require "zeitwerk"
4
4
 
5
- require 'dry/configurable/constants'
6
- require 'dry/configurable/class_methods'
7
- require 'dry/configurable/instance_methods'
8
- require 'dry/configurable/config'
9
- require 'dry/configurable/setting'
10
- require 'dry/configurable/errors'
5
+ require "dry/core"
6
+ require "dry/configurable/constants"
7
+ require "dry/configurable/errors"
11
8
 
12
9
  module Dry
10
+ # @api public
11
+ def self.Configurable(**options)
12
+ Configurable::Extension.new(**options)
13
+ end
14
+
13
15
  # A simple configuration mixin
14
16
  #
15
17
  # @example class-level configuration
@@ -44,26 +46,32 @@ module Dry
44
46
  #
45
47
  # @api public
46
48
  module Configurable
49
+ def self.loader
50
+ @loader ||= Zeitwerk::Loader.new.tap do |loader|
51
+ root = File.expand_path("..", __dir__)
52
+ loader.tag = "dry-configurable"
53
+ loader.inflector = Zeitwerk::GemInflector.new("#{root}/dry-configurable.rb")
54
+ loader.push_dir(root)
55
+ loader.ignore(
56
+ "#{root}/dry-configurable.rb",
57
+ "#{root}/dry/configurable/{constants,errors,version}.rb"
58
+ )
59
+ loader.inflector.inflect("dsl" => "DSL")
60
+ end
61
+ end
62
+
47
63
  # @api private
48
64
  def self.extended(klass)
49
65
  super
50
- klass.extend(ClassMethods)
66
+ klass.extend(Extension.new)
51
67
  end
52
68
 
53
69
  # @api private
54
70
  def self.included(klass)
55
- raise AlreadyIncluded if klass.include?(InstanceMethods)
56
-
57
71
  super
58
- klass.class_eval do
59
- extend(ClassMethods)
60
- include(InstanceMethods)
61
-
62
- class << self
63
- undef :config
64
- undef :configure
65
- end
66
- end
72
+ klass.include(Extension.new)
67
73
  end
74
+
75
+ loader.setup
68
76
  end
69
77
  end
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/configurable'
3
+ require "dry/configurable"
metadata CHANGED
@@ -1,63 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-configurable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.6
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Holland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-22 00:00:00.000000000 Z
11
+ date: 2022-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: concurrent-ruby
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: dry-core
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '0.4'
34
- - - ">="
19
+ version: '1.0'
20
+ - - "<"
35
21
  - !ruby/object:Gem::Version
36
- version: 0.4.7
22
+ version: '2'
37
23
  type: :runtime
38
24
  prerelease: false
39
25
  version_requirements: !ruby/object:Gem::Requirement
40
26
  requirements:
41
27
  - - "~>"
42
28
  - !ruby/object:Gem::Version
43
- version: '0.4'
44
- - - ">="
29
+ version: '1.0'
30
+ - - "<"
45
31
  - !ruby/object:Gem::Version
46
- version: 0.4.7
32
+ version: '2'
47
33
  - !ruby/object:Gem::Dependency
48
- name: dry-equalizer
34
+ name: zeitwerk
49
35
  requirement: !ruby/object:Gem::Requirement
50
36
  requirements:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
- version: '0.2'
39
+ version: '2.6'
54
40
  type: :runtime
55
41
  prerelease: false
56
42
  version_requirements: !ruby/object:Gem::Requirement
57
43
  requirements:
58
44
  - - "~>"
59
45
  - !ruby/object:Gem::Version
60
- version: '0.2'
46
+ version: '2.6'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: bundler
63
49
  requirement: !ruby/object:Gem::Requirement
@@ -118,8 +104,8 @@ files:
118
104
  - lib/dry/configurable/config.rb
119
105
  - lib/dry/configurable/constants.rb
120
106
  - lib/dry/configurable/dsl.rb
121
- - lib/dry/configurable/dsl/args.rb
122
107
  - lib/dry/configurable/errors.rb
108
+ - lib/dry/configurable/extension.rb
123
109
  - lib/dry/configurable/instance_methods.rb
124
110
  - lib/dry/configurable/methods.rb
125
111
  - lib/dry/configurable/setting.rb
@@ -131,7 +117,7 @@ licenses:
131
117
  - MIT
132
118
  metadata:
133
119
  allowed_push_host: https://rubygems.org
134
- changelog_uri: https://github.com/dry-rb/dry-configurable/blob/master/CHANGELOG.md
120
+ changelog_uri: https://github.com/dry-rb/dry-configurable/blob/main/CHANGELOG.md
135
121
  source_code_uri: https://github.com/dry-rb/dry-configurable
136
122
  bug_tracker_uri: https://github.com/dry-rb/dry-configurable/issues
137
123
  post_install_message:
@@ -142,14 +128,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - ">="
144
130
  - !ruby/object:Gem::Version
145
- version: 2.4.0
131
+ version: 2.7.0
146
132
  required_rubygems_version: !ruby/object:Gem::Requirement
147
133
  requirements:
148
134
  - - ">="
149
135
  - !ruby/object:Gem::Version
150
136
  version: '0'
151
137
  requirements: []
152
- rubygems_version: 3.0.3
138
+ rubygems_version: 3.1.6
153
139
  signing_key:
154
140
  specification_version: 4
155
141
  summary: A mixin to add configuration functionality to your classes
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/configurable/constants'
4
- require 'dry/configurable/setting'
5
-
6
- module Dry
7
- module Configurable
8
- class DSL
9
- # @api private
10
- class Args
11
- # @api private
12
- attr_reader :args
13
-
14
- # @api private
15
- attr_reader :size
16
-
17
- # @api private
18
- attr_reader :opts
19
-
20
- # @api private
21
- def initialize(args)
22
- @args = args
23
- @size = args.size
24
- @opts = Setting::OPTIONS
25
- end
26
-
27
- # @api private
28
- def ensure_valid_options
29
- return unless options
30
-
31
- keys = options.keys - opts
32
- raise ArgumentError, "Invalid options: #{keys.inspect}" unless keys.empty?
33
- end
34
-
35
- # @api private
36
- def to_ary
37
- [default, options || EMPTY_HASH]
38
- end
39
-
40
- # @api private
41
- def default
42
- if size.equal?(1) && options.nil?
43
- args[0]
44
- elsif size > 1 && options
45
- args[0]
46
- else
47
- Undefined
48
- end
49
- end
50
-
51
- # @api private
52
- def options
53
- args.detect { |arg| arg.is_a?(Hash) && (opts & arg.keys).any? }
54
- end
55
- end
56
- end
57
- end
58
- end