dry-rb/dry-validation

Macros do not support validation on root object

Open

#688 建立於 2021年8月12日

在 GitHub 查看
 (1 留言) (1 反應) (0 負責人)Ruby (193 fork)github user discovery
bughelp wanted

倉庫指標

Star
 (1,421 star)
PR 合併指標
 (PR 指標待抓取)

描述

Describe the bug

I extracted a macro into a reusable module, like this:

module ReusableRule
  extend ::ActiveSupport::Concern

  included do
    register_macro(:reusable_macro) do
      # do some validations here 
    end
  end
end

and use it like this:

class SomeContracr < ::Dry::Validation::Contract
  params do
    # define some params here
  end

  include ::ReusableRule
  rule(path_to: :inner_hash).validate(:reusable_macro)
end

which works fine.

But I cannot use it on the root hash, like this:

class SomeContracr < ::Dry::Validation::Contract
  params do
    # define some params here
  end

  include ::ReusableRule
  rule.validate(:reusable_macro)
end

Expected behavior

The macro should validate the root hash the same way as when I use it on an inner hash.

Actual behavior

dry-validation throws an ArgumentError

lib/dry/validation/values.rb:59:in `[]': +key+ must be a valid path specification (ArgumentError)

My environment

  • Ruby version: 3.0
  • OS: Docker image (Debian)

Suggestion

Probably adding

return data if args.size < 1

around here.

貢獻者指南