dry-schema 1.5.3 → 1.6.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 +73 -0
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/dry-schema.gemspec +3 -4
- data/lib/dry/schema/config.rb +1 -1
- data/lib/dry/schema/key_coercer.rb +1 -1
- data/lib/dry/schema/key_map.rb +1 -1
- data/lib/dry/schema/key_validator.rb +1 -1
- data/lib/dry/schema/macros/value.rb +12 -2
- data/lib/dry/schema/message.rb +1 -1
- data/lib/dry/schema/message/or/multi_path.rb +1 -1
- data/lib/dry/schema/message/or/single_path.rb +1 -1
- data/lib/dry/schema/message_compiler.rb +8 -13
- data/lib/dry/schema/message_set.rb +1 -1
- data/lib/dry/schema/messages/abstract.rb +1 -1
- data/lib/dry/schema/messages/template.rb +1 -1
- data/lib/dry/schema/messages/yaml.rb +1 -1
- data/lib/dry/schema/path.rb +17 -5
- data/lib/dry/schema/predicate.rb +1 -1
- data/lib/dry/schema/result.rb +1 -1
- data/lib/dry/schema/value_coercer.rb +1 -1
- data/lib/dry/schema/version.rb +1 -1
- metadata +13 -21
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: '07179bd67f80d0a500d2484a2169f09804612a38ce9601819203d89bc0d109a1'
         | 
| 4 | 
            +
              data.tar.gz: 1337a9d5197257e3bc773f87af7785e4297624b3d10699ea5b9c977be4a19a67
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 10b8ea1df48c45fa50bcc35be0d7e9785c90285fb29bdc0ad712745803280f9de53ea80643dccefd923df263ba20973cd2b4956dd2d773701ff4ad9050ab3742
         | 
| 7 | 
            +
              data.tar.gz: 42776d375539ec537361f2c6e95c027020107e6f92bd14a866ed1b37e10af5ae0037eb0866278aa8877ce62f617222201b34f58db3e43925ae89f46585359a9a
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,76 @@ | |
| 1 | 
            +
            <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ## 1.6.1 2021-02-02
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            ### Fixed
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            - Messages#[] handles meta/no meta cases more gracefully and has better interoperability with the I18n backend. This brings MessageCompiler#visit_unexpected_key up to parity with MessageCompiler#visit_predicate. Uses visit_predicate as basis for visit_unexpected_key. (@robhanlon22)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
            [Compare v1.6.0...v1.6.1](https://github.com/dry-rb/dry-schema/compare/v1.6.0...v1.6.1)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ## 1.6.0 2021-01-21
         | 
| 14 | 
            +
             | 
| 15 | 
            +
             | 
| 16 | 
            +
            ### Fixed
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            - Using sum types with a i18n backend no longer crashes (issue #328 fixes via #331) (@tylerhunt)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            ### Changed
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            - Inferring predicates from class names is deprecated. It's very unlikely your code depends on it,
         | 
| 23 | 
            +
              however, if it does, you'll get an exception with instructions. (@flash-gordon)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              If you see an exception and don't rely on inferring, just disable it with:
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              ```ruby
         | 
| 28 | 
            +
              Dry::Schema::PredicateInferrer::Compiler.infer_predicate_by_class_name false
         | 
| 29 | 
            +
              ```
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              Otherwise, enable it explicitly:
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              ```ruby
         | 
| 34 | 
            +
              Dry::Schema::PredicateInferrer::Compiler.infer_predicate_by_class_name true
         | 
| 35 | 
            +
              ```
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              See https://github.com/dry-rb/dry-schema/issues/335 for rationale.
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            [Compare v1.5.6...v1.6.0](https://github.com/dry-rb/dry-schema/compare/v1.5.6...v1.6.0)
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            ## 1.5.6 2020-10-21
         | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 44 | 
            +
            ### Fixed
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            - Fixed stack error which was a regression introduced in 1.5.5 (issue #322 fixed via #323) (@flash-gordon)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
             | 
| 49 | 
            +
            [Compare v1.5.5...v1.5.6](https://github.com/dry-rb/dry-schema/compare/v1.5.5...v1.5.6)
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            ## 1.5.5 2020-10-08
         | 
| 52 | 
            +
             | 
| 53 | 
            +
             | 
| 54 | 
            +
            ### Fixed
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            - Key validation works with messages that have meta-data (issue #310 fixed via #313) (@tadeusz-niemiec)
         | 
| 57 | 
            +
            - Using an external schema along with a key specified as a `:hash` works as expected (issue #296 fixed via #315) (@tadeusz-niemiec + @solnic)
         | 
| 58 | 
            +
            - `Result#error?(path)` works correctly when the path points to an array item (issue #317 fixed via #318) (@solnic)
         | 
| 59 | 
            +
             | 
| 60 | 
            +
             | 
| 61 | 
            +
            [Compare v1.5.4...v1.5.5](https://github.com/dry-rb/dry-schema/compare/v1.5.4...v1.5.5)
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            ## 1.5.4 
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            2020-09-03
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            ### Fixed
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            - Key validation works correctly with a non-nested maybe hashes (issue #311 fixed via #312) (@svobom57)
         | 
| 70 | 
            +
             | 
| 71 | 
            +
             | 
| 72 | 
            +
            [Compare v1.5.3...master](https://github.com/dry-rb/dry-schema/compare/v1.5.3...master)
         | 
| 73 | 
            +
             | 
| 1 74 | 
             
            ## 1.5.3 2020-08-21
         | 
| 2 75 |  | 
| 3 76 |  | 
    
        data/LICENSE
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    
    
        data/dry-schema.gemspec
    CHANGED
    
    | @@ -29,16 +29,15 @@ Gem::Specification.new do |spec| | |
| 29 29 | 
             
              spec.metadata['source_code_uri']   = 'https://github.com/dry-rb/dry-schema'
         | 
| 30 30 | 
             
              spec.metadata['bug_tracker_uri']   = 'https://github.com/dry-rb/dry-schema/issues'
         | 
| 31 31 |  | 
| 32 | 
            -
              spec.required_ruby_version = ">= 2. | 
| 32 | 
            +
              spec.required_ruby_version = ">= 2.5.0"
         | 
| 33 33 |  | 
| 34 34 | 
             
              # to update dependencies edit project.yml
         | 
| 35 35 | 
             
              spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
         | 
| 36 36 | 
             
              spec.add_runtime_dependency "dry-configurable", "~> 0.8", ">= 0.8.3"
         | 
| 37 | 
            -
              spec.add_runtime_dependency "dry-core", "~> 0. | 
| 38 | 
            -
              spec.add_runtime_dependency "dry-equalizer", "~> 0.2"
         | 
| 37 | 
            +
              spec.add_runtime_dependency "dry-core", "~> 0.5", ">= 0.5"
         | 
| 39 38 | 
             
              spec.add_runtime_dependency "dry-initializer", "~> 3.0"
         | 
| 40 39 | 
             
              spec.add_runtime_dependency "dry-logic", "~> 1.0"
         | 
| 41 | 
            -
              spec.add_runtime_dependency "dry-types", "~> 1. | 
| 40 | 
            +
              spec.add_runtime_dependency "dry-types", "~> 1.5"
         | 
| 42 41 |  | 
| 43 42 | 
             
              spec.add_development_dependency "bundler"
         | 
| 44 43 | 
             
              spec.add_development_dependency "rake"
         | 
    
        data/lib/dry/schema/config.rb
    CHANGED
    
    
    
        data/lib/dry/schema/key_map.rb
    CHANGED
    
    
| @@ -28,10 +28,14 @@ module Dry | |
| 28 28 |  | 
| 29 29 | 
             
                        import_steps(schema)
         | 
| 30 30 |  | 
| 31 | 
            -
                         | 
| 31 | 
            +
                        if !custom_type? || array_type?(current_type) || hash_type?(current_type)
         | 
| 32 | 
            +
                          type(updated_type)
         | 
| 33 | 
            +
                        elsif maybe_type?(current_type)
         | 
| 34 | 
            +
                          type(updated_type.optional)
         | 
| 35 | 
            +
                        end
         | 
| 32 36 | 
             
                      end
         | 
| 33 37 |  | 
| 34 | 
            -
                      trace_opts = opts.reject { |key, _|  | 
| 38 | 
            +
                      trace_opts = opts.reject { |key, _| %i[type_spec type_rule].include?(key) }
         | 
| 35 39 |  | 
| 36 40 | 
             
                      if (type_rule = opts[:type_rule])
         | 
| 37 41 | 
             
                        trace.append(type_rule).evaluate(*predicates, **trace_opts)
         | 
| @@ -62,10 +66,16 @@ module Dry | |
| 62 66 | 
             
                      primitive_inferrer[type].eql?([::Array])
         | 
| 63 67 | 
             
                    end
         | 
| 64 68 |  | 
| 69 | 
            +
                    # @api private
         | 
| 65 70 | 
             
                    def hash_type?(type)
         | 
| 66 71 | 
             
                      primitive_inferrer[type].eql?([::Hash])
         | 
| 67 72 | 
             
                    end
         | 
| 68 73 |  | 
| 74 | 
            +
                    # @api private
         | 
| 75 | 
            +
                    def maybe_type?(type)
         | 
| 76 | 
            +
                      type.meta[:maybe].equal?(true)
         | 
| 77 | 
            +
                    end
         | 
| 78 | 
            +
             | 
| 69 79 | 
             
                    # @api private
         | 
| 70 80 | 
             
                    def build_array_type(array_type, member)
         | 
| 71 81 | 
             
                      if array_type.respond_to?(:of)
         | 
    
        data/lib/dry/schema/message.rb
    CHANGED
    
    
| @@ -4,8 +4,9 @@ require "dry/initializer" | |
| 4 4 |  | 
| 5 5 | 
             
            require "dry/schema/constants"
         | 
| 6 6 | 
             
            require "dry/schema/message"
         | 
| 7 | 
            -
            require "dry/schema/message_set"
         | 
| 8 7 | 
             
            require "dry/schema/message_compiler/visitor_opts"
         | 
| 8 | 
            +
            require "dry/schema/message_set"
         | 
| 9 | 
            +
            require "dry/schema/path"
         | 
| 9 10 |  | 
| 10 11 | 
             
            module Dry
         | 
| 11 12 | 
             
              module Schema
         | 
| @@ -109,17 +110,8 @@ module Dry | |
| 109 110 | 
             
                  end
         | 
| 110 111 |  | 
| 111 112 | 
             
                  # @api private
         | 
| 112 | 
            -
                  def visit_unexpected_key(node,  | 
| 113 | 
            -
                     | 
| 114 | 
            -
             | 
| 115 | 
            -
                    msg = messages.translate("errors.unexpected_key")
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                    Message.new(
         | 
| 118 | 
            -
                      path: path,
         | 
| 119 | 
            -
                      text: msg[:text],
         | 
| 120 | 
            -
                      predicate: nil,
         | 
| 121 | 
            -
                      input: input
         | 
| 122 | 
            -
                    )
         | 
| 113 | 
            +
                  def visit_unexpected_key(node, opts)
         | 
| 114 | 
            +
                    visit_predicate([:unexpected_key, []], opts.dup.update(path: Path[node.first]))
         | 
| 123 115 | 
             
                  end
         | 
| 124 116 |  | 
| 125 117 | 
             
                  # @api private
         | 
| @@ -130,7 +122,10 @@ module Dry | |
| 130 122 |  | 
| 131 123 | 
             
                  # @api private
         | 
| 132 124 | 
             
                  def or_translator
         | 
| 133 | 
            -
                    @or_translator ||= proc { |k| | 
| 125 | 
            +
                    @or_translator ||= proc { |k|
         | 
| 126 | 
            +
                      message = messages.translate(k, **default_lookup_options)
         | 
| 127 | 
            +
                      message.is_a?(Hash) ? message[:text] : message
         | 
| 128 | 
            +
                    }
         | 
| 134 129 | 
             
                  end
         | 
| 135 130 |  | 
| 136 131 | 
             
                  # @api private
         | 
    
        data/lib/dry/schema/path.rb
    CHANGED
    
    | @@ -90,13 +90,25 @@ module Dry | |
| 90 90 | 
             
                    keys.index(key)
         | 
| 91 91 | 
             
                  end
         | 
| 92 92 |  | 
| 93 | 
            +
                  def without_index
         | 
| 94 | 
            +
                    self.class.new(to_a[0..-2])
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
             | 
| 93 97 | 
             
                  # @api private
         | 
| 94 98 | 
             
                  def include?(other)
         | 
| 95 | 
            -
                     | 
| 96 | 
            -
             | 
| 97 | 
            -
                     | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 99 | 
            +
                    if !same_root?(other)
         | 
| 100 | 
            +
                      false
         | 
| 101 | 
            +
                    elsif index?
         | 
| 102 | 
            +
                      if other.index?
         | 
| 103 | 
            +
                        last.equal?(other.last)
         | 
| 104 | 
            +
                      else
         | 
| 105 | 
            +
                        without_index.include?(other)
         | 
| 106 | 
            +
                      end
         | 
| 107 | 
            +
                    elsif other.index? && key_matches(other, :select).size < 2
         | 
| 108 | 
            +
                      false
         | 
| 109 | 
            +
                    else
         | 
| 110 | 
            +
                      self >= other && !other.key_matches(self).include?(nil)
         | 
| 111 | 
            +
                    end
         | 
| 100 112 | 
             
                  end
         | 
| 101 113 |  | 
| 102 114 | 
             
                  # @api private
         | 
    
        data/lib/dry/schema/predicate.rb
    CHANGED
    
    
    
        data/lib/dry/schema/result.rb
    CHANGED
    
    
    
        data/lib/dry/schema/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: dry-schema
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.6.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Piotr Solnica
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-02-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: concurrent-ruby
         | 
| @@ -50,28 +50,20 @@ dependencies: | |
| 50 50 | 
             
                requirements:
         | 
| 51 51 | 
             
                - - "~>"
         | 
| 52 52 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            -
                    version: '0. | 
| 54 | 
            -
             | 
| 55 | 
            -
              prerelease: false
         | 
| 56 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            -
                requirements:
         | 
| 58 | 
            -
                - - "~>"
         | 
| 59 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 60 | 
            -
                    version: '0.4'
         | 
| 61 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 62 | 
            -
              name: dry-equalizer
         | 
| 63 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 64 | 
            -
                requirements:
         | 
| 65 | 
            -
                - - "~>"
         | 
| 53 | 
            +
                    version: '0.5'
         | 
| 54 | 
            +
                - - ">="
         | 
| 66 55 | 
             
                  - !ruby/object:Gem::Version
         | 
| 67 | 
            -
                    version: '0. | 
| 56 | 
            +
                    version: '0.5'
         | 
| 68 57 | 
             
              type: :runtime
         | 
| 69 58 | 
             
              prerelease: false
         | 
| 70 59 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 71 60 | 
             
                requirements:
         | 
| 72 61 | 
             
                - - "~>"
         | 
| 73 62 | 
             
                  - !ruby/object:Gem::Version
         | 
| 74 | 
            -
                    version: '0. | 
| 63 | 
            +
                    version: '0.5'
         | 
| 64 | 
            +
                - - ">="
         | 
| 65 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 66 | 
            +
                    version: '0.5'
         | 
| 75 67 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 76 68 | 
             
              name: dry-initializer
         | 
| 77 69 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -106,14 +98,14 @@ dependencies: | |
| 106 98 | 
             
                requirements:
         | 
| 107 99 | 
             
                - - "~>"
         | 
| 108 100 | 
             
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            -
                    version: '1. | 
| 101 | 
            +
                    version: '1.5'
         | 
| 110 102 | 
             
              type: :runtime
         | 
| 111 103 | 
             
              prerelease: false
         | 
| 112 104 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 113 105 | 
             
                requirements:
         | 
| 114 106 | 
             
                - - "~>"
         | 
| 115 107 | 
             
                  - !ruby/object:Gem::Version
         | 
| 116 | 
            -
                    version: '1. | 
| 108 | 
            +
                    version: '1.5'
         | 
| 117 109 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 118 110 | 
             
              name: bundler
         | 
| 119 111 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -253,14 +245,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 253 245 | 
             
              requirements:
         | 
| 254 246 | 
             
              - - ">="
         | 
| 255 247 | 
             
                - !ruby/object:Gem::Version
         | 
| 256 | 
            -
                  version: 2. | 
| 248 | 
            +
                  version: 2.5.0
         | 
| 257 249 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 258 250 | 
             
              requirements:
         | 
| 259 251 | 
             
              - - ">="
         | 
| 260 252 | 
             
                - !ruby/object:Gem::Version
         | 
| 261 253 | 
             
                  version: '0'
         | 
| 262 254 | 
             
            requirements: []
         | 
| 263 | 
            -
            rubygems_version: 3. | 
| 255 | 
            +
            rubygems_version: 3.1.4
         | 
| 264 256 | 
             
            signing_key: 
         | 
| 265 257 | 
             
            specification_version: 4
         | 
| 266 258 | 
             
            summary: Coercion and validation for data structures
         |