gems dry-types 1.5.0
v1.5.0

latest releases: 1.8.3, 1.8.2, 1.8.1...
4 years ago

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 for strict.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

Compare v1.4.0...v1.5.0

Don't miss a new dry-types release

NewReleases is sending notifications on new releases.