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