Releases: dry-rb/dry-types
v1.7.2
Fixed
- Fixed BigDecimal warning due to not being required in gemspec (@bkuhlmann in #464)
v1.7.1
Fixed
- Warning from jruby about overwritten keyword (@flash-gordon + @klobuczek in #454)
v1.7.0
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)
v1.6.1
Changed
- Fix issues with internal const_missing and Inflector/Module constants (@flash-gordon + @solnic)
v1.6.0
Changed
- Optimize
PredicateRegistry
for Ruby 2.7+ (see #420 for more details) (@casperisfine) - Use zeitwerk for auto-loading (@flash-gordon)
v1.5.1
v1.5.0
Added
-
Wrapping constructor types 🎉 (@flash-gordon)
Constructor blocks can have a second argument.
The second argument is the underlying type itself:age_from_year = Dry::Types['coercible.integer'].constructor do |input, type| Date.today.year - type.(input) end age_from_year.('2000') # => 21
With wrapping constructors you have control over "type application". You can even
run it more than once:inc = Dry::Types['integer'].constructor(&:succ) inc2x = inc.constructor { _2.(_2.(_2.(_1))) } inc2x.(10) # => 13
-
Fallbacks 🎉 (@flash-gordon)
age = Dry::Types['coercible.ineger'].fallback(18) age.('10') # => 10 age.('20') # => 20 age.('abc') # => 18
Fallbacks are different from default values: the later will be evaluated
only when no input provided.Under the hood,
.fallback
creates a wrapping constructor. -
params.string
as an alias forstrict.string
. This addition should be non-breaking (@flash-gordon) -
API for defining custom type builders similar to
.default
,.constructor
, or.optional
(@flash-gordon)# Making an alias for `.fallback` Dry::Types.define_builder(:or) { |type, v| type.fallback(v) } # Using new builder type = Dry::Types['integer'].or(-273) type.(:invalid) # => -273
Changed
-
Inferring predicates from class names is deprecated. It's very unlikely your code depends on it,
however, if it does, you'll get an exception with instructions. (@flash-gordon)If you don't rely on inferring, just disable it with:
Dry::Types::PredicateInferrer::Compiler.infer_predicate_by_class_name false
Otherwise, enable it explicitly:
Dry::Types::PredicateInferrer::Compiler.infer_predicate_by_class_name true
v1.4.0
1.4.0 2020-03-09
Fixed
json.nil
no longer coerces empty strings tonil
. It was a long-standing
bug that for some reason remained unnoticed for years. Technically,
this may be a breaking change for JSON schemas described with dry-schema (@flash-gordon)
v1.3.1
1.3.1 2020-02-17
Changed
- Predicate inferrer now returns
hash?
for hash schemas. Note, it doesn't spit more complex preds because we have different plans for dry-schema (@flash-gordon)
v1.3.0
Added
Schema#merge
for merging two hash schemas (@waiting-for-dev)- Aliases for
.constructor
to non-constructor types. Now you can call.prepend
/.append
without silly checks for the type being a constructor (flash-gordon)(Dry::Types['integer'].prepend(-> { _1 + 1 })).(1) # => 2 (Dry::Types['coercible.integer'] >> -> { _1 * 2 }).('99') # => 198
Hash::Schema#clear
returns a schema with the same options but without keys- Optional namespace now includes strict types by default (@flash-gordon)
Fixed
Schema::Key#optional
returns an instance ofSchema::Key
as it should have done- Composition with function handling exceptions. This could occasionally lead to unexpected exceptions (@flash-gordon)