dry-configurable 0.16.0 → 0.16.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/dry/configurable/config.rb +26 -12
- data/lib/dry/configurable/setting.rb +7 -1
- data/lib/dry/configurable/version.rb +1 -1
- metadata +6 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0d8c3e4ebee8cf7f978c48580f64c1547c6c818b50ed7064b0758b4bffb072ee
         | 
| 4 | 
            +
              data.tar.gz: 2aa701383b59289fbe591100642027fc5bc0d074bd0ec5d6d085359293af0f8f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 221e2cfb38c4eae38ab6b56250e2d70672c9d1e6883b048f5a6bc807d0996065bf1b8e4a102fd78b6a95a4a4ffcf21dcfd46c64737acd915b3d1b80f9dca273e
         | 
| 7 | 
            +
              data.tar.gz: 1f04a6b9af22d12a6b310902cdf5761362762a7fcca97c78a2feb17a28ce3199285a8cd1b6e80c56cde10f7fc2983c8598990fa263e5e55656502ad22761dd2e
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,13 @@ | |
| 1 1 | 
             
            <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
         | 
| 2 2 |  | 
| 3 | 
            +
            ## 0.16.1 2022-10-13
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ### Changed
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            - Restored performance of config value reads (direct reader methods as well as aggregate methods like `#values` and `#to_h`) to pre-0.16.0 levels (#149 by @timriley)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            [Compare v0.16.0...v0.16.1](https://github.com/dry-rb/dry-configurable/compare/v0.16.0...v0.16.1)
         | 
| 10 | 
            +
             | 
| 3 11 | 
             
            ## 0.16.0 2022-10-08
         | 
| 4 12 |  | 
| 5 13 |  | 
| @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require "dry/core/constants"
         | 
| 4 | 
            +
            require "set"
         | 
| 4 5 |  | 
| 5 6 | 
             
            require "dry/core/equalizer"
         | 
| 6 7 |  | 
| @@ -18,15 +19,27 @@ module Dry | |
| 18 19 | 
             
                  # @api private
         | 
| 19 20 | 
             
                  attr_reader :_values
         | 
| 20 21 |  | 
| 22 | 
            +
                  # @api private
         | 
| 23 | 
            +
                  attr_reader :_configured
         | 
| 24 | 
            +
                  protected :_configured
         | 
| 25 | 
            +
             | 
| 21 26 | 
             
                  # @api private
         | 
| 22 27 | 
             
                  def initialize(settings, values: {})
         | 
| 23 28 | 
             
                    @_settings = settings
         | 
| 24 29 | 
             
                    @_values = values
         | 
| 30 | 
            +
                    @_configured = Set.new
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  # @api private
         | 
| 34 | 
            +
                  private def initialize_copy(source)
         | 
| 35 | 
            +
                    super
         | 
| 36 | 
            +
                    @_values = source.__send__(:dup_values)
         | 
| 37 | 
            +
                    @_configured = source._configured.dup
         | 
| 25 38 | 
             
                  end
         | 
| 26 39 |  | 
| 27 40 | 
             
                  # @api private
         | 
| 28 41 | 
             
                  def dup_for_settings(settings)
         | 
| 29 | 
            -
                     | 
| 42 | 
            +
                    dup.tap { |config| config.instance_variable_set(:@_settings, settings) }
         | 
| 30 43 | 
             
                  end
         | 
| 31 44 |  | 
| 32 45 | 
             
                  # Get config value by a key
         | 
| @@ -42,10 +55,11 @@ module Dry | |
| 42 55 | 
             
                    end
         | 
| 43 56 |  | 
| 44 57 | 
             
                    _values.fetch(name) {
         | 
| 45 | 
            -
                      #  | 
| 46 | 
            -
                       | 
| 58 | 
            +
                      # Mutable settings may be configured after read
         | 
| 59 | 
            +
                      _configured.add(name) if setting.cloneable?
         | 
| 60 | 
            +
             | 
| 47 61 | 
             
                      setting.to_value.tap { |value|
         | 
| 48 | 
            -
                        _values[name] = value | 
| 62 | 
            +
                        _values[name] = value
         | 
| 49 63 | 
             
                      }
         | 
| 50 64 | 
             
                    }
         | 
| 51 65 | 
             
                  end
         | 
| @@ -64,6 +78,8 @@ module Dry | |
| 64 78 | 
             
                      raise ArgumentError, "+#{name}+ is not a setting name"
         | 
| 65 79 | 
             
                    end
         | 
| 66 80 |  | 
| 81 | 
            +
                    _configured.add(name)
         | 
| 82 | 
            +
             | 
| 67 83 | 
             
                    _values[name] = setting.constructor.(value)
         | 
| 68 84 | 
             
                  end
         | 
| 69 85 |  | 
| @@ -101,11 +117,11 @@ module Dry | |
| 101 117 | 
             
                  #
         | 
| 102 118 | 
             
                  # @api public
         | 
| 103 119 | 
             
                  def configured?(key)
         | 
| 104 | 
            -
                    if _settings[key].cloneable? | 
| 120 | 
            +
                    if _configured.include?(key) && _settings[key].cloneable?
         | 
| 105 121 | 
             
                      return _values[key] != _settings[key].to_value
         | 
| 106 122 | 
             
                    end
         | 
| 107 123 |  | 
| 108 | 
            -
                     | 
| 124 | 
            +
                    _configured.include?(key)
         | 
| 109 125 | 
             
                  end
         | 
| 110 126 |  | 
| 111 127 | 
             
                  # Returns the current config values.
         | 
| @@ -116,7 +132,10 @@ module Dry | |
| 116 132 | 
             
                  #
         | 
| 117 133 | 
             
                  # @api public
         | 
| 118 134 | 
             
                  def values
         | 
| 119 | 
            -
                     | 
| 135 | 
            +
                    # Ensure all settings are represented in values
         | 
| 136 | 
            +
                    _settings.each { |setting| self[setting.name] unless _values.key?(setting.name) }
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                    _values
         | 
| 120 139 | 
             
                  end
         | 
| 121 140 |  | 
| 122 141 | 
             
                  # Returns config values as a hash, with nested values also converted from {Config} instances
         | 
| @@ -175,11 +194,6 @@ module Dry | |
| 175 194 | 
             
                      dup_hsh[key] = _settings[key].cloneable? ? val.dup : val
         | 
| 176 195 | 
             
                    }
         | 
| 177 196 | 
             
                  end
         | 
| 178 | 
            -
             | 
| 179 | 
            -
                  def initialize_copy(source)
         | 
| 180 | 
            -
                    super
         | 
| 181 | 
            -
                    @_values = source.__send__(:dup_values)
         | 
| 182 | 
            -
                  end
         | 
| 183 197 | 
             
                end
         | 
| 184 198 | 
             
              end
         | 
| 185 199 | 
             
            end
         | 
| @@ -24,6 +24,9 @@ module Dry | |
| 24 24 | 
             
                  # @api private
         | 
| 25 25 | 
             
                  attr_reader :default
         | 
| 26 26 |  | 
| 27 | 
            +
                  # @api private
         | 
| 28 | 
            +
                  attr_reader :cloneable
         | 
| 29 | 
            +
             | 
| 27 30 | 
             
                  # @api private
         | 
| 28 31 | 
             
                  attr_reader :constructor
         | 
| 29 32 |  | 
| @@ -48,6 +51,9 @@ module Dry | |
| 48 51 | 
             
                  )
         | 
| 49 52 | 
             
                    @name = name
         | 
| 50 53 | 
             
                    @default = default
         | 
| 54 | 
            +
                    @cloneable = children.any? || options.fetch(:cloneable) {
         | 
| 55 | 
            +
                      Setting.cloneable_value?(default)
         | 
| 56 | 
            +
                    }
         | 
| 51 57 | 
             
                    @constructor = constructor
         | 
| 52 58 | 
             
                    @children = children
         | 
| 53 59 | 
             
                    @options = options
         | 
| @@ -60,7 +66,7 @@ module Dry | |
| 60 66 |  | 
| 61 67 | 
             
                  # @api private
         | 
| 62 68 | 
             
                  def cloneable?
         | 
| 63 | 
            -
                     | 
| 69 | 
            +
                    cloneable
         | 
| 64 70 | 
             
                  end
         | 
| 65 71 |  | 
| 66 72 | 
             
                  # @api private
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: dry-configurable
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.16. | 
| 4 | 
            +
              version: 0.16.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Andy Holland
         | 
| 8 | 
            -
            autorequire:
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-10- | 
| 11 | 
            +
            date: 2022-10-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: dry-core
         | 
| @@ -114,7 +114,7 @@ metadata: | |
| 114 114 | 
             
              changelog_uri: https://github.com/dry-rb/dry-configurable/blob/main/CHANGELOG.md
         | 
| 115 115 | 
             
              source_code_uri: https://github.com/dry-rb/dry-configurable
         | 
| 116 116 | 
             
              bug_tracker_uri: https://github.com/dry-rb/dry-configurable/issues
         | 
| 117 | 
            -
            post_install_message:
         | 
| 117 | 
            +
            post_install_message: 
         | 
| 118 118 | 
             
            rdoc_options: []
         | 
| 119 119 | 
             
            require_paths:
         | 
| 120 120 | 
             
            - lib
         | 
| @@ -129,8 +129,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 129 129 | 
             
                - !ruby/object:Gem::Version
         | 
| 130 130 | 
             
                  version: '0'
         | 
| 131 131 | 
             
            requirements: []
         | 
| 132 | 
            -
            rubygems_version: 3. | 
| 133 | 
            -
            signing_key:
         | 
| 132 | 
            +
            rubygems_version: 3.1.6
         | 
| 133 | 
            +
            signing_key: 
         | 
| 134 134 | 
             
            specification_version: 4
         | 
| 135 135 | 
             
            summary: A mixin to add configuration functionality to your classes
         | 
| 136 136 | 
             
            test_files: []
         |