hanami / hanami/hanami-validations

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

Open
#223 3 comments 0 reactions 1 assignee Assigned to @timriley View on GitHub
help wanted
Dominant language
Ruby
Stars
208
Forks
45
PR merge metrics
No merged PRs in 30d

Description

# 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.
```ruby
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
```ruby
puts Validators::UserValidator.namespace.to_s #=> validators.user
```

# Motivation
I'd like to define custom error messages for this validator, like below.
```yaml
# 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
```ruby
require 'hanami/validations'

module Validators
class UserValidator
include Hanami::Validations

namespace :'validators/user'
end
end
```

## 2. apply monkey patch (for Ruby >= 2.5.0)
```ruby
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 :(

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.