From e2a30aba7aac0a3b37265614bfc107f8403db1fd Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Thu, 10 Dec 2015 22:29:40 -0800 Subject: [PATCH] add a plural namer --- cmd/libs/go2idl/namer/plural_namer.go | 56 ++++++++++++++++++ cmd/libs/go2idl/namer/plural_namer_test.go | 68 ++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 cmd/libs/go2idl/namer/plural_namer.go create mode 100644 cmd/libs/go2idl/namer/plural_namer_test.go diff --git a/cmd/libs/go2idl/namer/plural_namer.go b/cmd/libs/go2idl/namer/plural_namer.go new file mode 100644 index 00000000000..3fc4cdb06e2 --- /dev/null +++ b/cmd/libs/go2idl/namer/plural_namer.go @@ -0,0 +1,56 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package namer + +import "k8s.io/kubernetes/cmd/libs/go2idl/types" + +type pluralNamer struct { + exceptions map[string]string + finalize func(string) string +} + +// NewPluralNamer returns a namer that returns the plural form of the input +// type's name. +func NewPluralNamer(exceptions map[string]string, public bool) *pluralNamer { + var finalize func(string) string + if public { + finalize = IC + } else { + finalize = IL + } + return &pluralNamer{exceptions, finalize} +} + +// Name returns the plural form of the type's name. If the type's name is found +// in the exceptions map, the map value is returned. +func (r *pluralNamer) Name(t *types.Type) string { + singular := t.Name.Name + var plural string + var ok bool + if plural, ok = r.exceptions[singular]; ok { + return r.finalize(plural) + } + switch string(singular[len(singular)-1]) { + case "s", "x": + plural = singular + "es" + case "y": + plural = singular[:len(singular)-1] + "ies" + default: + plural = singular + "s" + } + return r.finalize(plural) +} diff --git a/cmd/libs/go2idl/namer/plural_namer_test.go b/cmd/libs/go2idl/namer/plural_namer_test.go new file mode 100644 index 00000000000..1201e84e941 --- /dev/null +++ b/cmd/libs/go2idl/namer/plural_namer_test.go @@ -0,0 +1,68 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package namer + +import ( + "testing" + + "k8s.io/kubernetes/cmd/libs/go2idl/types" +) + +func TestPluralNamer(t *testing.T) { + exceptions := map[string]string{ + // The type name is already in the plural form + "Endpoints": "endpoints", + } + public := NewPluralNamer(exceptions, true) + private := NewPluralNamer(exceptions, false) + + cases := []struct { + typeName string + expectedPrivate string + expectedPublic string + }{ + { + "Pod", + "pods", + "Pods", + }, + { + "Entry", + "entries", + "Entries", + }, + { + "Endpoints", + "endpoints", + "Endpoints", + }, + { + "Bus", + "buses", + "Buses", + }, + } + for _, c := range cases { + testType := &types.Type{Name: types.Name{Name: c.typeName}} + if e, a := c.expectedPrivate, private.Name(testType); e != a { + t.Errorf("Unexpected result from private plural namer. Expected: %s, Got: %s", e, a) + } + if e, a := c.expectedPublic, public.Name(testType); e != a { + t.Errorf("Unexpected result from public plural namer. Expected: %s, Got: %s", e, a) + } + } +}