lib/dry/schema/macros/filled.rb in dry-schema-1.0.3 vs lib/dry/schema/macros/filled.rb in dry-schema-1.1.0
- old
+ new
@@ -1,30 +1,68 @@
# frozen_string_literal: true
+require 'dry/schema/primitive_inferrer'
require 'dry/schema/macros/value'
module Dry
module Schema
module Macros
# Macro used to prepend `:filled?` predicate
#
# @api private
class Filled < Value
+ # @!attribute [r] primitive_inferrer
+ # PrimitiveInferrer used to get a list of primitive classes from configured type
+ # @return [PrimitiveInferrer]
+ # @api private
+ option :primitive_inferrer, default: proc { PrimitiveInferrer.new }
+
# @api private
def call(*predicates, **opts, &block)
+ ensure_valid_predicates(predicates)
+
+ if opts[:type_spec]
+ if filter?
+ value(*predicates, **opts, &block)
+ else
+ value(predicates[0], :filled?, *predicates[1..predicates.size - 1], **opts, &block)
+ end
+ else
+ value(:filled?, *predicates, **opts, &block)
+ end
+ end
+
+ # @api private
+ # rubocop:disable Style/GuardClause
+ def ensure_valid_predicates(predicates)
if predicates.include?(:empty?)
raise ::Dry::Schema::InvalidSchemaError, 'Using filled with empty? predicate is invalid'
end
if predicates.include?(:filled?)
raise ::Dry::Schema::InvalidSchemaError, 'Using filled with filled? is redundant'
end
+ end
+ # rubocop:enable Style/GuardClause
- if opts[:type_spec]
- value(predicates[0], :filled?, *predicates[1..predicates.size - 1], **opts, &block)
- else
- value(:filled?, *predicates, **opts, &block)
- end
+ # @api private
+ def filter?
+ !primitives.include?(NilClass) && processor_config.filter_empty_string
+ end
+
+ # @api private
+ def processor_config
+ schema_dsl.processor_type.config
+ end
+
+ # @api private
+ def primitives
+ primitive_inferrer[schema_type]
+ end
+
+ # @api private
+ def schema_type
+ schema_dsl.types[name]
end
end
end
end
end