validations icon indicating copy to clipboard operation
validations copied to clipboard

Unexpected value returned from `Hanami::Validations::Namespace`

Open epaew opened this issue 1 year ago • 3 comments

Environments

  • CRuby 2.7.6
  • hanami-validations 1.3.9

Issue detail

When the validator class is defined in the module with name includes Validator, Hanami::Validations::Namespace returns unexpected value.

require 'hanami/validations'

module Validators
  class UserValidator
    include Hanami::Validations

    messages :i18n

    validations do
      required(:name) { filled? & str? }
    end
  end
end

puts Validators::UserValidator.namespace.to_s #=> s.user_validator

Expected

puts Validators::UserValidator.namespace.to_s #=> validators.user

Motivation

I'd like to define custom error messages for this validator, like below.

# config/locales/errors.en.yml
en:
  errors:
    rules:
      validators:
        user:
          rules:
            name:
              filled?: "must be non empty string"
              str?: "must be non empty string"

How to escape

1. define namespace manually

https://guides.hanamirb.org/v1.3/validations/advanced-usage/#custom-namespace

require 'hanami/validations'

module Validators
  class UserValidator
    include Hanami::Validations

    namespace :'validators/user'
  end
end

2. apply monkey patch (for Ruby >= 2.5.0)

require 'hanami/validations'

module Hanami
  module Validations
    class Namespace
      private

      def name_without_suffix
        @name.delete_suffix(SUFFIX)
      end
    end
  end
end

module Validators
  class UserValidator
    include Hanami::Validations
  end
end

puts Validators::UserValidator.namespace.to_s #=> validators.user

Now hanami-validations gem supports Ruby >= 2.3.0, so I give up to create pull request :(

epaew avatar Oct 06 '22 14:10 epaew