Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rubygem-dry-types for 
openSUSE:Factory checked in at 2022-12-13 18:56:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-dry-types (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-dry-types.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-dry-types"

Tue Dec 13 18:56:36 2022 rev:4 rq:1042633 version:1.7.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-dry-types/rubygem-dry-types.changes      
2022-10-30 18:28:59.282433686 +0100
+++ 
/work/SRC/openSUSE:Factory/.rubygem-dry-types.new.1835/rubygem-dry-types.changes
    2022-12-13 18:56:54.143662797 +0100
@@ -1,0 +2,18 @@
+Wed Dec  7 11:18:42 UTC 2022 - Stephan Kulow <[email protected]>
+
+updated to version 1.7.0
+ see installed CHANGELOG.md
+
+  ## 1.7.0 2022-11-04
+  
+  
+  ### Changed
+  
+  - This version is compatible with recently released dry-rb dependencies 
(@flash-gordon)
+  - Updated to dry-core 1.0 (@flash-gordon + @solnic)
+  - Dependency on dry-container was dropped (@flash-gordon)
+  
+  [Compare 
v1.6.1...v1.7.0](https://github.com/dry-rb/dry-types/compare/v1.6.1...v1.7.0)
+  
+
+-------------------------------------------------------------------

Old:
----
  dry-types-1.6.1.gem

New:
----
  dry-types-1.7.0.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-dry-types.spec ++++++
--- /var/tmp/diff_new_pack.PUSnLJ/_old  2022-12-13 18:56:55.191668390 +0100
+++ /var/tmp/diff_new_pack.PUSnLJ/_new  2022-12-13 18:56:55.195668412 +0100
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-dry-types
-Version:        1.6.1
+Version:        1.7.0
 Release:        0
 %define mod_name dry-types
 %define mod_full_name %{mod_name}-%{version}

++++++ dry-types-1.6.1.gem -> dry-types-1.7.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    2022-10-15 09:53:02.000000000 +0200
+++ new/CHANGELOG.md    2022-11-04 18:02:53.000000000 +0100
@@ -1,5 +1,16 @@
 <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
 
+## 1.7.0 2022-11-04
+
+
+### Changed
+
+- This version is compatible with recently released dry-rb dependencies 
(@flash-gordon)
+- Updated to dry-core 1.0 (@flash-gordon + @solnic)
+- Dependency on dry-container was dropped (@flash-gordon)
+
+[Compare 
v1.6.1...v1.7.0](https://github.com/dry-rb/dry-types/compare/v1.6.1...v1.7.0)
+
 ## 1.6.1 2022-10-15
 
 
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dry-types.gemspec new/dry-types.gemspec
--- old/dry-types.gemspec       2022-10-15 09:53:02.000000000 +0200
+++ new/dry-types.gemspec       2022-11-04 18:02:53.000000000 +0100
@@ -30,14 +30,12 @@
 
   # to update dependencies edit project.yml
   spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
-  spec.add_runtime_dependency "dry-container", "~> 0.3"
-  spec.add_runtime_dependency "dry-core", "~> 0.9", ">= 0.9"
-  spec.add_runtime_dependency "dry-inflector", "~> 0.1", ">= 0.1.2"
-  spec.add_runtime_dependency "dry-logic", "~> 1.3", ">= 1.3"
+  spec.add_runtime_dependency "dry-core", "~> 1.0", "< 2"
+  spec.add_runtime_dependency "dry-inflector", "~> 1.0", "< 2"
+  spec.add_runtime_dependency "dry-logic", ">= 1.4", "< 2"
   spec.add_runtime_dependency "zeitwerk", "~> 2.6"
 
   spec.add_development_dependency "bundler"
-  spec.add_development_dependency "dry-monads", "~> 1.0"
   spec.add_development_dependency "rake"
   spec.add_development_dependency "rspec"
   spec.add_development_dependency "yard"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/builder.rb new/lib/dry/types/builder.rb
--- old/lib/dry/types/builder.rb        2022-10-15 09:53:02.000000000 +0200
+++ new/lib/dry/types/builder.rb        2022-11-04 18:02:53.000000000 +0100
@@ -5,6 +5,7 @@
     # Common API for building types and composition
     #
     # @api public
+    # rubocop:disable Metrics/ModuleLength
     module Builder
       include Dry::Core::Constants
 
@@ -30,8 +31,29 @@
       #
       # @api private
       def |(other)
-        klass = constrained? && other.constrained? ? Sum::Constrained : Sum
-        klass.new(self, other)
+        compose(other, Sum)
+      end
+
+      # Compose two types into an Intersection type
+      #
+      # @param [Type] other
+      #
+      # @return [Intersection, Intersection::Constrained]
+      #
+      # @api private
+      def &(other)
+        compose(other, Intersection)
+      end
+
+      # Compose two types into an Implication type
+      #
+      # @param [Type] other
+      #
+      # @return [Implication, Implication::Constrained]
+      #
+      # @api private
+      def >(other)
+        compose(other, Implication)
       end
 
       # Turn a type into an optional type
@@ -179,6 +201,21 @@
           end
         end
       end
+
+      private
+
+      # @api private
+      def compose(other, composition_class)
+        klass =
+          if constrained? && other.constrained?
+            composition_class::Constrained
+          else
+            composition_class
+          end
+
+        klass.new(self, other)
+      end
     end
+    # rubocop:enable Metrics/ModuleLength
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/composition.rb 
new/lib/dry/types/composition.rb
--- old/lib/dry/types/composition.rb    1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dry/types/composition.rb    2022-11-04 18:02:53.000000000 +0100
@@ -0,0 +1,152 @@
+# frozen_string_literal: true
+
+require "dry/core/equalizer"
+require "dry/types/options"
+require "dry/types/meta"
+
+module Dry
+  module Types
+    module Composition
+      include Type
+      include Builder
+      include Options
+      include Meta
+      include Printable
+      include Dry::Equalizer(:left, :right, :options, :meta, inspect: false, 
immutable: true)
+
+      # @return [Type]
+      attr_reader :left
+
+      # @return [Type]
+      attr_reader :right
+
+      module Constrained
+        def rule
+          left.rule.public_send(self.class.operator, right.rule)
+        end
+
+        def constrained?
+          true
+        end
+      end
+
+      def self.included(base)
+        composition_name = Inflector.demodulize(base)
+        ast_type = Inflector.underscore(composition_name).to_sym
+        base.define_singleton_method(:ast_type) { ast_type }
+        base.define_singleton_method(:composition_name) { composition_name }
+        base.const_set("Constrained", Class.new(base) { include Constrained })
+      end
+
+      # @param [Type] left
+      # @param [Type] right
+      # @param [Hash] options
+      #
+      # @api private
+      def initialize(left, right, **options)
+        super
+        @left, @right = left, right
+        freeze
+      end
+
+      # @return [String]
+      #
+      # @api public
+      def name
+        [left, right].map(&:name).join(" #{self.class.operator} ")
+      end
+
+      # @return [false]
+      #
+      # @api public
+      def default?
+        false
+      end
+
+      # @return [false]
+      #
+      # @api public
+      def constrained?
+        false
+      end
+
+      # @return [Boolean]
+      #
+      # @api public
+      def optional?
+        false
+      end
+
+      # @param [Object] input
+      #
+      # @return [Object]
+      #
+      # @api private
+      def call_unsafe(input)
+        raise NotImplementedError
+      end
+
+      # @param [Object] input
+      #
+      # @return [Object]
+      #
+      # @api private
+      def call_safe(input, &block)
+        raise NotImplementedError
+      end
+
+      # @param [Object] input
+      #
+      # @api public
+      def try(input)
+        raise NotImplementedError
+      end
+
+      # @api private
+      def success(input)
+        result = try(input)
+        if result.success?
+          result
+        else
+          raise ArgumentError, "Invalid success value '#{input}' for 
#{inspect}"
+        end
+      end
+
+      # @api private
+      def failure(input, _error = nil)
+        result = try(input)
+        if result.failure?
+          result
+        else
+          raise ArgumentError, "Invalid failure value '#{input}' for 
#{inspect}"
+        end
+      end
+
+      # @param [Object] value
+      #
+      # @return [Boolean]
+      #
+      # @api private
+      def primitive?(value)
+        raise NotImplementedError
+      end
+
+      # @see Nominal#to_ast
+      #
+      # @api public
+      def to_ast(meta: true)
+        [self.class.ast_type,
+         [left.to_ast(meta: meta), right.to_ast(meta: meta), meta ? self.meta 
: EMPTY_HASH]]
+      end
+
+      # Wrap the type with a proc
+      #
+      # @return [Proc]
+      #
+      # @api public
+      def to_proc
+        proc { |value| self.(value) }
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/container.rb 
new/lib/dry/types/container.rb
--- old/lib/dry/types/container.rb      2022-10-15 09:53:02.000000000 +0200
+++ new/lib/dry/types/container.rb      2022-11-04 18:02:53.000000000 +0100
@@ -1,14 +1,12 @@
 # frozen_string_literal: true
 
-require "dry/container"
-
 module Dry
   module Types
     # Internal container for the built-in types
     #
     # @api private
     class Container
-      include Dry::Container::Mixin
+      include Core::Container::Mixin
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/extensions/maybe.rb 
new/lib/dry/types/extensions/maybe.rb
--- old/lib/dry/types/extensions/maybe.rb       2022-10-15 09:53:02.000000000 
+0200
+++ new/lib/dry/types/extensions/maybe.rb       2022-11-04 18:02:53.000000000 
+0100
@@ -1,6 +1,11 @@
 # frozen_string_literal: true
 
-require "dry/monads/maybe"
+require "dry/monads"
+require "dry/monads/version"
+
+if Gem::Version.new(Dry::Monads::VERSION) < Gem::Version.new("1.5.0")
+  raise "dry-types requires dry-monads >= 1.5.0"
+end
 
 module Dry
   module Types
@@ -13,7 +18,7 @@
       include Decorator
       include Builder
       include Printable
-      include ::Dry::Monads::Maybe::Mixin
+      include ::Dry::Monads[:maybe]
 
       # @param [Dry::Monads::Maybe, Object] input
       #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/extensions/monads.rb 
new/lib/dry/types/extensions/monads.rb
--- old/lib/dry/types/extensions/monads.rb      2022-10-15 09:53:02.000000000 
+0200
+++ new/lib/dry/types/extensions/monads.rb      2022-11-04 18:02:53.000000000 
+0100
@@ -1,6 +1,11 @@
 # frozen_string_literal: true
 
-require "dry/monads/result"
+require "dry/monads"
+require "dry/monads/version"
+
+if Gem::Version.new(Dry::Monads::VERSION) < Gem::Version.new("1.5.0")
+  raise "dry-types requires dry-monads >= 1.5.0"
+end
 
 module Dry
   module Types
@@ -8,7 +13,7 @@
     #
     # @api public
     class Result
-      include Dry::Monads::Result::Mixin
+      include ::Dry::Monads[:result]
 
       # Turn result into a monad
       #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/implication.rb 
new/lib/dry/types/implication.rb
--- old/lib/dry/types/implication.rb    1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dry/types/implication.rb    2022-11-04 18:02:53.000000000 +0100
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+module Dry
+  module Types
+    # Implication type
+    #
+    # @api public
+    class Implication
+      include Composition
+
+      def self.operator
+        :>
+      end
+
+      # @param [Object] input
+      #
+      # @return [Object]
+      #
+      # @api private
+      def call_unsafe(input)
+        if left.try(input).success?
+          right.call_unsafe(input)
+        else
+          input
+        end
+      end
+
+      # @param [Object] input
+      #
+      # @return [Object]
+      #
+      # @api private
+      def call_safe(input, &block)
+        if left.try(input).success?
+          right.call_safe(input, &block)
+        else
+          input
+        end
+      end
+
+      # @param [Object] input
+      #
+      # @api public
+      def try(input)
+        if left.try(input).success?
+          right.try(input)
+        else
+          Result::Success.new(input)
+        end
+      end
+
+      # @param [Object] value
+      #
+      # @return [Boolean]
+      #
+      # @api private
+      def primitive?(value)
+        if left.primitive?(value)
+          right.primitive?(value)
+        else
+          true
+        end
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/intersection.rb 
new/lib/dry/types/intersection.rb
--- old/lib/dry/types/intersection.rb   1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dry/types/intersection.rb   2022-11-04 18:02:53.000000000 +0100
@@ -0,0 +1,108 @@
+# frozen_string_literal: true
+
+require "dry/core/equalizer"
+require "dry/types/options"
+require "dry/types/meta"
+
+module Dry
+  module Types
+    # Intersection type
+    #
+    # @api public
+    class Intersection
+      include Composition
+
+      def self.operator
+        :&
+      end
+
+      # @param [Object] input
+      #
+      # @return [Object]
+      #
+      # @api private
+      def call_unsafe(input)
+        merge_results(left.call_unsafe(input), right.call_unsafe(input))
+      end
+
+      # @param [Object] input
+      #
+      # @return [Object]
+      #
+      # @api private
+      def call_safe(input, &block)
+        try_sides(input, &block).input
+      end
+
+      # @param [Object] input
+      #
+      # @api public
+      def try(input)
+        try_sides(input) do |failure|
+          if block_given?
+            yield(failure)
+          else
+            failure
+          end
+        end
+      end
+
+      # @param [Object] value
+      #
+      # @return [Boolean]
+      #
+      # @api private
+      def primitive?(value)
+        left.primitive?(value) && right.primitive?(value)
+      end
+
+      private
+
+      # @api private
+      def try_sides(input, &block)
+        results = []
+
+        [left, right].each do |side|
+          result = try_side(side, input, &block)
+          return result if result.failure?
+
+          results << result
+        end
+
+        Result::Success.new(merge_results(*results.map(&:input)))
+      end
+
+      # @api private
+      def try_side(side, input)
+        failure = nil
+
+        result = side.try(input) do |f|
+          failure = f
+          yield(f)
+        end
+
+        if result.is_a?(Result)
+          result
+        elsif failure
+          Result::Failure.new(result, failure)
+        else
+          Result::Success.new(result)
+        end
+      end
+
+      # @api private
+      def merge_results(left_result, right_result)
+        case left_result
+        when ::Array
+          left_result
+            .zip(right_result)
+            .map { |lhs, rhs| merge_results(lhs, rhs) }
+        when ::Hash
+          left_result.merge(right_result)
+        else
+          left_result
+        end
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/predicate_registry.rb 
new/lib/dry/types/predicate_registry.rb
--- old/lib/dry/types/predicate_registry.rb     2022-10-15 09:53:02.000000000 
+0200
+++ new/lib/dry/types/predicate_registry.rb     2022-11-04 18:02:53.000000000 
+0100
@@ -15,27 +15,14 @@
       KERNEL_RESPOND_TO = ::Kernel.instance_method(:respond_to?)
       private_constant(:KERNEL_RESPOND_TO)
 
-      if ::UnboundMethod.method_defined?(:bind_call)
-        # @api private
-        def initialize(predicates = Logic::Predicates)
-          @predicates = predicates
-        end
-
-        # @api private
-        def key?(name)
-          KERNEL_RESPOND_TO.bind_call(@predicates, name)
-        end
-      else
-        # @api private
-        def initialize(predicates = Logic::Predicates)
-          @predicates = predicates
-          @has_predicate = KERNEL_RESPOND_TO.bind(@predicates)
-        end
+      # @api private
+      def initialize(predicates = Logic::Predicates)
+        @predicates = predicates
+      end
 
-        # @api private
-        def key?(name)
-          has_predicate.(name)
-        end
+      # @api private
+      def key?(name)
+        KERNEL_RESPOND_TO.bind_call(@predicates, name)
       end
 
       # @api private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/printer/composition.rb 
new/lib/dry/types/printer/composition.rb
--- old/lib/dry/types/printer/composition.rb    1970-01-01 01:00:00.000000000 
+0100
+++ new/lib/dry/types/printer/composition.rb    2022-11-04 18:02:53.000000000 
+0100
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+module Dry
+  module Types
+    # @api private
+    class Printer
+      # @api private
+      class Composition
+        def initialize(printer, composition_class)
+          @printer = printer
+          @composition_class = composition_class
+          freeze
+        end
+
+        def visit(composition)
+          visit_constructors(composition) do |constructors|
+            @printer.visit_options(composition.options, composition.meta) do 
|opts|
+              yield 
"#{@composition_class.composition_name}<#{constructors}#{opts}>"
+            end
+          end
+        end
+
+        private
+
+        def visit_constructors(composition)
+          visit_constructor(composition.left) do |left|
+            visit_constructor(composition.right) do |right|
+              yield "#{left} #{@composition_class.operator} #{right}"
+            end
+          end
+        end
+
+        def visit_constructor(type, &block)
+          case type
+          when @composition_class
+            visit_constructors(type, &block)
+          else
+            @printer.visit(type, &block)
+          end
+        end
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/printer.rb new/lib/dry/types/printer.rb
--- old/lib/dry/types/printer.rb        2022-10-15 09:53:02.000000000 +0200
+++ new/lib/dry/types/printer.rb        2022-11-04 18:02:53.000000000 +0100
@@ -1,17 +1,21 @@
 # frozen_string_literal: true
 
+require "dry/types/printer/composition"
+
 module Dry
   # rubocop:disable Metrics/AbcSize
   # rubocop:disable Metrics/PerceivedComplexity
   module Types
     # @api private
     class Printer
-      MAPPING = { # rubocop:disable Style/MutableConstant
+      MAPPING = {
         Nominal => :visit_nominal,
         Constructor => :visit_constructor,
-        Constrained => :visit_constrained,
-        Constrained::Coercible => :visit_constrained,
-        Hash => :visit_hash,
+        [
+          Constrained,
+          Constrained::Coercible
+        ] => :visit_constrained,
+        Types::Hash => :visit_hash,
         Schema => :visit_schema,
         Schema::Key => :visit_key,
         Map => :visit_map,
@@ -19,12 +23,22 @@
         Array::Member => :visit_array_member,
         Lax => :visit_lax,
         Enum => :visit_enum,
-        Default => :visit_default,
-        Default::Callable => :visit_default,
-        Sum => :visit_sum,
-        Sum::Constrained => :visit_sum,
+        [Default, Default::Callable] => :visit_default,
+        [
+          Sum,
+          Sum::Constrained,
+          Intersection,
+          Intersection::Constrained,
+          Implication,
+          Implication::Constrained
+        ] => :visit_composition,
         Any.class => :visit_any
-      }
+      }.flat_map { |k, v| Array(k).map { |kk| [kk, v] } }.to_h
+
+      def initialize
+        @composition_printers = {}
+        freeze
+      end
 
       def call(type)
         output = "".dup
@@ -87,106 +101,10 @@
         end
       end
 
-      def visit_schema(schema)
-        options = schema.options.dup
-        size = schema.count
-        key_fn_str = ""
-        type_fn_str = ""
-        strict_str = ""
-
-        strict_str = "strict " if options.delete(:strict)
-
-        if (key_fn = options.delete(:key_transform_fn))
-          visit_callable(key_fn) do |fn|
-            key_fn_str = "key_fn=#{fn} "
-          end
-        end
-
-        if (type_fn = options.delete(:type_transform_fn))
-          visit_callable(type_fn) do |fn|
-            type_fn_str = "type_fn=#{fn} "
-          end
-        end
-
-        keys = options.delete(:keys)
-
-        visit_options(options, schema.meta) do |opts|
-          opts = "#{opts[1..]} " unless opts.empty?
-          schema_parameters = "#{key_fn_str}#{type_fn_str}#{strict_str}#{opts}"
-
-          header = "Schema<#{schema_parameters}keys={"
-
-          if size.zero?
-            yield "#{header}}>"
-          else
-            yield header.dup << keys.map { |key|
-              visit(key) { |type| type }
-            }.join(" ") << "}>"
-          end
-        end
-      end
-
-      def visit_map(map)
-        visit(map.key_type) do |key|
-          visit(map.value_type) do |value|
-            options = map.options.dup
-            options.delete(:key_type)
-            options.delete(:value_type)
-
-            visit_options(options) do |_opts|
-              yield "Map<#{key} => #{value}>"
-            end
-          end
-        end
-      end
-
-      def visit_key(key)
-        visit(key.type) do |type|
-          if key.required?
-            yield "#{key.name}: #{type}"
-          else
-            yield "#{key.name}?: #{type}"
-          end
-        end
-      end
-
-      def visit_sum(sum)
-        visit_sum_constructors(sum) do |constructors|
-          visit_options(sum.options, sum.meta) do |opts|
-            yield "Sum<#{constructors}#{opts}>"
-          end
-        end
-      end
-
-      def visit_sum_constructors(sum)
-        case sum.left
-        when Sum
-          visit_sum_constructors(sum.left) do |left|
-            case sum.right
-            when Sum
-              visit_sum_constructors(sum.right) do |right|
-                yield "#{left} | #{right}"
-              end
-            else
-              visit(sum.right) do |right|
-                yield "#{left} | #{right}"
-              end
-            end
-          end
-        else
-          visit(sum.left) do |left|
-            case sum.right
-            when Sum
-              visit_sum_constructors(sum.right) do |right|
-                yield "#{left} | #{right}"
-              end
-            else
-              visit(sum.right) do |right|
-                yield "#{left} | #{right}"
-              end
-            end
-          end
-        end
+      def visit_composition(composition, &block)
+        klass = composition.class
+        @composition_printers[klass] = Composition.new(self, klass)
+        @composition_printers[klass].visit(composition, &block)
       end
 
       def visit_enum(enum)
@@ -234,25 +152,6 @@
         end
       end
 
-      def visit_hash(hash)
-        options = hash.options.dup
-        type_fn_str = ""
-
-        if (type_fn = options.delete(:type_transform_fn))
-          visit_callable(type_fn) do |fn|
-            type_fn_str = "type_fn=#{fn}"
-          end
-        end
-
-        visit_options(options, hash.meta) do |opts|
-          if opts.empty? && type_fn_str.empty?
-            yield "Hash"
-          else
-            yield "Hash<#{type_fn_str}#{opts}>"
-          end
-        end
-      end
-
       def visit_callable(callable)
         fn = callable.is_a?(String) ? FnContainer[callable] : callable
 
@@ -288,6 +187,88 @@
         end
       end
 
+      def visit_schema(schema)
+        options = schema.options.dup
+        size = schema.count
+        key_fn_str = ""
+        type_fn_str = ""
+        strict_str = ""
+
+        strict_str = "strict " if options.delete(:strict)
+
+        if (key_fn = options.delete(:key_transform_fn))
+          visit_callable(key_fn) do |fn|
+            key_fn_str = "key_fn=#{fn} "
+          end
+        end
+
+        if (type_fn = options.delete(:type_transform_fn))
+          visit_callable(type_fn) do |fn|
+            type_fn_str = "type_fn=#{fn} "
+          end
+        end
+
+        keys = options.delete(:keys)
+
+        visit_options(options, schema.meta) do |opts|
+          opts = "#{opts[1..]} " unless opts.empty?
+          schema_parameters = "#{key_fn_str}#{type_fn_str}#{strict_str}#{opts}"
+
+          header = "Schema<#{schema_parameters}keys={"
+
+          if size.zero?
+            yield "#{header}}>"
+          else
+            yield header.dup << keys.map { |key|
+              visit(key) { |type| type }
+            }.join(" ") << "}>"
+          end
+        end
+      end
+
+      def visit_map(map)
+        visit(map.key_type) do |key|
+          visit(map.value_type) do |value|
+            options = map.options.dup
+            options.delete(:key_type)
+            options.delete(:value_type)
+
+            visit_options(options) do |_opts|
+              yield "Map<#{key} => #{value}>"
+            end
+          end
+        end
+      end
+
+      def visit_key(key)
+        visit(key.type) do |type|
+          if key.required?
+            yield "#{key.name}: #{type}"
+          else
+            yield "#{key.name}?: #{type}"
+          end
+        end
+      end
+
+      def visit_hash(hash)
+        options = hash.options.dup
+        type_fn_str = ""
+
+        if (type_fn = options.delete(:type_transform_fn))
+          visit_callable(type_fn) do |fn|
+            type_fn_str = "type_fn=#{fn}"
+          end
+        end
+
+        visit_options(options, hash.meta) do |opts|
+          if opts.empty? && type_fn_str.empty?
+            yield "Hash"
+          else
+            yield "Hash<#{type_fn_str}#{opts}>"
+          end
+        end
+      end
+
       def visit_options(options, meta = EMPTY_HASH) # rubocop:disable 
Metrics/PerceivedComplexity
         if options.empty? && meta.empty?
           yield ""
@@ -312,7 +293,7 @@
       end
     end
 
-    PRINTER = Printer.new.freeze
+    PRINTER = Printer.new
   end
   # rubocop:enable Metrics/AbcSize
   # rubocop:enable Metrics/PerceivedComplexity
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/sum.rb new/lib/dry/types/sum.rb
--- old/lib/dry/types/sum.rb    2022-10-15 09:53:02.000000000 +0200
+++ new/lib/dry/types/sum.rb    2022-11-04 18:02:53.000000000 +0100
@@ -6,62 +6,10 @@
     #
     # @api public
     class Sum
-      include Type
-      include Builder
-      include Options
-      include Meta
-      include Printable
-      include Dry::Equalizer(:left, :right, :options, :meta, inspect: false, 
immutable: true)
+      include Composition
 
-      # @return [Type]
-      attr_reader :left
-
-      # @return [Type]
-      attr_reader :right
-
-      # @api private
-      class Constrained < Sum
-        # @return [Dry::Logic::Operations::Or]
-        def rule
-          left.rule | right.rule
-        end
-
-        # @return [true]
-        def constrained?
-          true
-        end
-      end
-
-      # @param [Type] left
-      # @param [Type] right
-      # @param [Hash] options
-      #
-      # @api private
-      def initialize(left, right, **options)
-        super
-        @left, @right = left, right
-        freeze
-      end
-
-      # @return [String]
-      #
-      # @api public
-      def name
-        [left, right].map(&:name).join(" | ")
-      end
-
-      # @return [false]
-      #
-      # @api public
-      def default?
-        false
-      end
-
-      # @return [false]
-      #
-      # @api public
-      def constrained?
-        false
+      def self.operator
+        :|
       end
 
       # @return [Boolean]
@@ -104,26 +52,6 @@
         end
       end
 
-      # @api private
-      def success(input)
-        if left.valid?(input)
-          left.success(input)
-        elsif right.valid?(input)
-          right.success(input)
-        else
-          raise ArgumentError, "Invalid success value '#{input}' for 
#{inspect}"
-        end
-      end
-
-      # @api private
-      def failure(input, _error = nil)
-        if left.valid?(input)
-          right.failure(input, right.try(input).error)
-        else
-          left.failure(input, left.try(input).error)
-        end
-      end
-
       # @param [Object] value
       #
       # @return [Boolean]
@@ -149,13 +77,6 @@
         end
       end
 
-      # @see Nominal#to_ast
-      #
-      # @api public
-      def to_ast(meta: true)
-        [:sum, [left.to_ast(meta: meta), right.to_ast(meta: meta), meta ? 
self.meta : EMPTY_HASH]]
-      end
-
       # @param [Hash] options
       #
       # @return [Constrained,Sum]
@@ -170,15 +91,6 @@
           super
         end
       end
-
-      # Wrap the type with a proc
-      #
-      # @return [Proc]
-      #
-      # @api public
-      def to_proc
-        proc { |value| self.(value) }
-      end
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types/version.rb new/lib/dry/types/version.rb
--- old/lib/dry/types/version.rb        2022-10-15 09:53:02.000000000 +0200
+++ new/lib/dry/types/version.rb        2022-11-04 18:02:53.000000000 +0100
@@ -2,6 +2,6 @@
 
 module Dry
   module Types
-    VERSION = "1.6.1"
+    VERSION = "1.7.0"
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dry/types.rb new/lib/dry/types.rb
--- old/lib/dry/types.rb        2022-10-15 09:53:02.000000000 +0200
+++ new/lib/dry/types.rb        2022-11-04 18:02:53.000000000 +0100
@@ -8,7 +8,6 @@
 require "concurrent/map"
 
 require "dry/core"
-require "dry/container"
 require "dry/logic"
 
 require "dry/types/constraints"
@@ -41,6 +40,7 @@
         loader.ignore(
           "#{root}/dry-types.rb",
           "#{root}/dry/types/extensions",
+          "#{root}/dry/types/printer",
           "#{root}/dry/types/spec/types.rb",
           "#{root}/dry/types/{#{%w[
             compat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2022-10-15 09:53:02.000000000 +0200
+++ new/metadata        2022-11-04 18:02:53.000000000 +0100
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: dry-types
 version: !ruby/object:Gem::Version
-  version: 1.6.1
+  version: 1.7.0
 platform: ruby
 authors:
 - Piotr Solnica
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2022-10-15 00:00:00.000000000 Z
+date: 2022-11-04 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: concurrent-ruby
@@ -25,79 +25,65 @@
       - !ruby/object:Gem::Version
         version: '1.0'
 - !ruby/object:Gem::Dependency
-  name: dry-container
-  requirement: !ruby/object:Gem::Requirement
-    requirements:
-    - - "~>"
-      - !ruby/object:Gem::Version
-        version: '0.3'
-  type: :runtime
-  prerelease: false
-  version_requirements: !ruby/object:Gem::Requirement
-    requirements:
-    - - "~>"
-      - !ruby/object:Gem::Version
-        version: '0.3'
-- !ruby/object:Gem::Dependency
   name: dry-core
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '0.9'
-    - - ">="
+        version: '1.0'
+    - - "<"
       - !ruby/object:Gem::Version
-        version: '0.9'
+        version: '2'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '0.9'
-    - - ">="
+        version: '1.0'
+    - - "<"
       - !ruby/object:Gem::Version
-        version: '0.9'
+        version: '2'
 - !ruby/object:Gem::Dependency
   name: dry-inflector
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '0.1'
-    - - ">="
+        version: '1.0'
+    - - "<"
       - !ruby/object:Gem::Version
-        version: 0.1.2
+        version: '2'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '0.1'
-    - - ">="
+        version: '1.0'
+    - - "<"
       - !ruby/object:Gem::Version
-        version: 0.1.2
+        version: '2'
 - !ruby/object:Gem::Dependency
   name: dry-logic
   requirement: !ruby/object:Gem::Requirement
     requirements:
-    - - "~>"
-      - !ruby/object:Gem::Version
-        version: '1.3'
     - - ">="
       - !ruby/object:Gem::Version
-        version: '1.3'
+        version: '1.4'
+    - - "<"
+      - !ruby/object:Gem::Version
+        version: '2'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
-    - - "~>"
-      - !ruby/object:Gem::Version
-        version: '1.3'
     - - ">="
       - !ruby/object:Gem::Version
-        version: '1.3'
+        version: '1.4'
+    - - "<"
+      - !ruby/object:Gem::Version
+        version: '2'
 - !ruby/object:Gem::Dependency
   name: zeitwerk
   requirement: !ruby/object:Gem::Requirement
@@ -127,20 +113,6 @@
       - !ruby/object:Gem::Version
         version: '0'
 - !ruby/object:Gem::Dependency
-  name: dry-monads
-  requirement: !ruby/object:Gem::Requirement
-    requirements:
-    - - "~>"
-      - !ruby/object:Gem::Version
-        version: '1.0'
-  type: :development
-  prerelease: false
-  version_requirements: !ruby/object:Gem::Requirement
-    requirements:
-    - - "~>"
-      - !ruby/object:Gem::Version
-        version: '1.0'
-- !ruby/object:Gem::Dependency
   name: rake
   requirement: !ruby/object:Gem::Requirement
     requirements:
@@ -207,6 +179,7 @@
 - lib/dry/types/coercions/params.rb
 - lib/dry/types/compat.rb
 - lib/dry/types/compiler.rb
+- lib/dry/types/composition.rb
 - lib/dry/types/constrained.rb
 - lib/dry/types/constrained/coercible.rb
 - lib/dry/types/constraints.rb
@@ -225,7 +198,9 @@
 - lib/dry/types/fn_container.rb
 - lib/dry/types/hash.rb
 - lib/dry/types/hash/constructor.rb
+- lib/dry/types/implication.rb
 - lib/dry/types/inflector.rb
+- lib/dry/types/intersection.rb
 - lib/dry/types/json.rb
 - lib/dry/types/lax.rb
 - lib/dry/types/map.rb
@@ -239,6 +214,7 @@
 - lib/dry/types/primitive_inferrer.rb
 - lib/dry/types/printable.rb
 - lib/dry/types/printer.rb
+- lib/dry/types/printer/composition.rb
 - lib/dry/types/result.rb
 - lib/dry/types/schema.rb
 - lib/dry/types/schema/key.rb

Reply via email to