Skip to content

Commit b2aed58

Browse files
creed-brattonbfabio
authored andcommitted
fix: avoid allocating a new validator on every isOrganisationURI call
New() registered all custom validators on every field validation. Replace with sharedValidator (already exists in the package) for urn_rfc2141 and a direct ipaCodes map lookup for the IPA code check. Also update stale indicepa.gov.it URLs to the vocabulary repo.
1 parent e2a65b0 commit b2aed58

4 files changed

Lines changed: 11 additions & 12 deletions

File tree

v0_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ func TestInvalidTestcasesV0(t *testing.T) {
238238
ValidationError{"organisation.uri", "uri is not a valid URI", 20, 3},
239239
},
240240
"organisation_uri_wrong_italian_pa2.yml": ValidationResults{
241-
ValidationError{"organisation.uri", "uri must be a valid Italian Public Administration Code (iPA) with format 'urn:x-italian-pa:[codiceIPA]' (see https://www.indicepa.gov.it/public-services/opendata-read-service.php?dstype=FS&filename=amministrazioni.txt)", 19, 3},
241+
ValidationError{"organisation.uri", "uri must be a valid Italian Public Administration Code (iPA) with format 'urn:x-italian-pa:[codiceIPA]' (see https://github.com/publiccodeyml/italian-organizations-ipa-vocabulary)", 19, 3},
242242
},
243243

244244
// inputTypes
@@ -288,7 +288,7 @@ func TestInvalidTestcasesV0(t *testing.T) {
288288
ValidationError{"fundedBy[0].uri", "uri is not a valid URI", 20, 5},
289289
},
290290
"fundedBy_uri_wrong_italian_pa2.yml": ValidationResults{
291-
ValidationError{"fundedBy[0].uri", "uri must be a valid Italian Public Administration Code (iPA) with format 'urn:x-italian-pa:[codiceIPA]' (see https://www.indicepa.gov.it/public-services/opendata-read-service.php?dstype=FS&filename=amministrazioni.txt)", 19, 5},
291+
ValidationError{"fundedBy[0].uri", "uri must be a valid Italian Public Administration Code (iPA) with format 'urn:x-italian-pa:[codiceIPA]' (see https://github.com/publiccodeyml/italian-organizations-ipa-vocabulary)", 19, 5},
292292
},
293293

294294
// roadmap
@@ -535,7 +535,7 @@ func TestInvalidTestcasesV0(t *testing.T) {
535535
ValidationError{"IT.countryExtensionVersion", "countryExtensionVersion must be one of the following: \"0.2\" or \"1.0\"", 12, 3},
536536
},
537537
"it_riuso_codiceIPA_invalid.yml": ValidationResults{
538-
ValidationError{"IT.riuso.codiceIPA", "codiceIPA must be a valid Italian Public Administration Code (iPA) (see https://www.indicepa.gov.it/public-services/opendata-read-service.php?dstype=FS&filename=amministrazioni.txt)", 55, 5},
538+
ValidationError{"IT.riuso.codiceIPA", "codiceIPA must be a valid Italian Public Administration Code (iPA) (see https://github.com/publiccodeyml/italian-organizations-ipa-vocabulary)", 55, 5},
539539
},
540540
"it_IT_duplicated.yml": ValidationResults{
541541
ValidationWarning{"it", "Lowercase country codes are DEPRECATED and will be removed in the future. Use 'IT' instead", 116, 1},

validators/common.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,6 @@ func isURL(fl validator.FieldLevel) bool {
8181
}
8282

8383
func isOrganisationURI(fl validator.FieldLevel) bool {
84-
validate := New()
85-
8684
field := fl.Field().String()
8785

8886
u, err := url.ParseRequestURI(field)
@@ -92,16 +90,17 @@ func isOrganisationURI(fl validator.FieldLevel) bool {
9290

9391
// Validate URNs as well
9492
if strings.EqualFold(u.Scheme, "urn") {
95-
err := validate.Var(field, "urn_rfc2141")
93+
err := sharedValidator.Var(field, "urn_rfc2141")
9694
if err != nil {
9795
return false
9896
}
9997

10098
if strings.HasPrefix(strings.ToLower(u.Opaque), "x-italian-pa:") {
10199
ipa := u.Opaque[len("x-italian-pa:"):]
102-
err := validate.Var(ipa, "is_italian_ipa_code")
103100

104-
return err == nil
101+
_, ok := ipaCodes[strings.ToLower(ipa)]
102+
103+
return ok
105104
}
106105

107106
return true

validators/it.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ func init() {
2020
}
2121
}
2222

23-
// isCodiceIPA returns true if the field is a valid Italian Public Administration Code
24-
// (iPA) from https://indicepa.gov.it.
23+
// isItalianIpaCode returns true if the field is a valid Italian Public Administration Code
24+
// (iPA) from https://github.com/publiccodeyml/italian-organizations-ipa-vocabulary.
2525
func isItalianIpaCode(fl validator.FieldLevel) bool {
2626
_, ok := ipaCodes[strings.ToLower(fl.Field().String())]
2727

validators/validator.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ func RegisterLocalErrorMessages(v *validator.Validate, trans ut.Translator) erro
155155

156156
err = ut.Add(
157157
"organisation_uri_invalid_italian_pa",
158-
"{0} must be a valid Italian Public Administration Code (iPA) with format 'urn:x-italian-pa:[codiceIPA]' (see https://www.indicepa.gov.it/public-services/opendata-read-service.php?dstype=FS&filename=amministrazioni.txt)", //nolint:lll // long URL in message
158+
"{0} must be a valid Italian Public Administration Code (iPA) with format 'urn:x-italian-pa:[codiceIPA]' (see https://github.com/publiccodeyml/italian-organizations-ipa-vocabulary)", //nolint:lll // long URL in message
159159
false)
160160
if err != nil {
161161
return fmt.Errorf("registering translation: %w", err)
@@ -200,7 +200,7 @@ func RegisterLocalErrorMessages(v *validator.Validate, trans ut.Translator) erro
200200
},
201201
{
202202
tag: "is_italian_ipa_code",
203-
translation: "{0} must be a valid Italian Public Administration Code (iPA) (see https://www.indicepa.gov.it/public-services/opendata-read-service.php?dstype=FS&filename=amministrazioni.txt)", //nolint:lll // long URL in message
203+
translation: "{0} must be a valid Italian Public Administration Code (iPA) (see https://github.com/publiccodeyml/italian-organizations-ipa-vocabulary)", //nolint:lll // long URL in message
204204
},
205205
{
206206
tag: "iso3166_1_alpha2_lower_or_upper",

0 commit comments

Comments
 (0)