dry-configurable 0.11.6 → 1.0.1

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