grsmv / inflect Goto Github PK
View Code? Open in Web Editor NEWClone of ActiveRecord::Inflect. Originally created by Chris Farmiloe. Updated to use with Go 1.
License: MIT License
Clone of ActiveRecord::Inflect. Originally created by Chris Farmiloe. Updated to use with Go 1.
License: MIT License
INSTALLATION go install bitbucket.org/chrisfarms/inflect PACKAGE package inflect FUNCTIONS func AddAcronym(word string) func AddHuman(suffix, replacement string) func AddIrregular(singular, plural string) func AddPlural(suffix, replacement string) func AddSingular(suffix, replacement string) func AddUncountable(word string) func Asciify(word string) string func Camelize(word string) string func CamelizeDownFirst(word string) string func Capitalize(word string) string func Dasherize(word string) string func ForeignKey(word string) string func ForeignKeyCondensed(word string) string func Humanize(word string) string func Ordinalize(word string) string func Parameterize(word string) string func ParameterizeJoin(word, sep string) string func Pluralize(word string) string func Singularize(word string) string func Tableize(word string) string func Titleize(word string) string func Typeify(word string) string func Uncountables() map[string]bool func Underscore(word string) string TYPES type Rule struct { // contains filtered or unexported fields } used by rulesets type Ruleset struct { // contains filtered or unexported fields } a Ruleset is the config of pluralization rules you can extend the rules with the Add* methods func NewDefaultRuleset() *Ruleset create a new ruleset and load it with the default set of common English pluralization rules func NewRuleset() *Ruleset create a blank ruleset. Unless you are going to build your own rules from scratch you probably won't need this and can just use the defaultRuleset via the global inflect.* methods func (rs *Ruleset) AddAcronym(word string) if you use acronym you may need to add them to the ruleset to prevent Underscored words of things like "HTML" coming out as "h_t_m_l" func (rs *Ruleset) AddHuman(suffix, replacement string) Human rules are applied by humanize to show more friendly versions of words func (rs *Ruleset) AddIrregular(singular, plural string) Add any inconsistant pluralizing/sinularizing rules to the set here. func (rs *Ruleset) AddPlural(suffix, replacement string) add a pluralization rule func (rs *Ruleset) AddPluralExact(suffix, replacement string, exact bool) add a pluralization rule with full string match func (rs *Ruleset) AddSingular(suffix, replacement string) add a singular rule func (rs *Ruleset) AddSingularExact(suffix, replacement string, exact bool) same as AddSingular but you can set `exact` to force a full string match func (rs *Ruleset) AddUncountable(word string) add a word to this ruleset that has the same singular and plural form for example: "rice" func (rs *Ruleset) Asciify(word string) string transforms latin characters like é -> e func (rs *Ruleset) Camelize(word string) string "dino_party" -> "DinoParty" func (rs *Ruleset) CamelizeDownFirst(word string) string same as Camelcase but with first letter downcased func (rs *Ruleset) Capitalize(word string) string uppercase first character func (rs *Ruleset) Dasherize(word string) string "SomeText" -> "some-text" func (rs *Ruleset) ForeignKey(word string) string an underscored foreign key name "Person" -> "person_id" func (rs *Ruleset) ForeignKeyCondensed(word string) string a foreign key (with an underscore) "Person" -> "personid" func (rs *Ruleset) Humanize(word string) string First letter of sentance captitilized Uses custom friendly replacements via AddHuman() func (rs *Ruleset) Ordinalize(str string) string "1031" -> "1031st" func (rs *Ruleset) Parameterize(word string) string param safe dasherized names like "my-param" func (rs *Ruleset) ParameterizeJoin(word, sep string) string param safe dasherized names with custom seperator func (rs *Ruleset) Pluralize(word string) string returns the plural form of a singular word func (rs *Ruleset) Singularize(word string) string returns the singular form of a plural word func (rs *Ruleset) Tableize(word string) string Rails style pluralized table names: "SuperPerson" -> "super_people" func (rs *Ruleset) Titleize(word string) string Captitilize every word in sentance "hello there" -> "Hello There" func (rs *Ruleset) Typeify(word string) string "something_like_this" -> "SomethingLikeThis" func (rs *Ruleset) Uncountables() map[string]bool func (rs *Ruleset) Underscore(word string) string lowercase underscore version "BigBen" -> "big_ben"
we have cases where the user-input is all caps, so "FOOBAR" becomes "f_o_o_b_a_r", went to go patch but the tests are failing as well:
--- FAIL: TestUnderscoreAcronymSequence (0.00 seconds)
inflect_test.go:12: inflect: expected html5_html_api got h_t_m_l5_h_t_m_l_a_p_i
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:12 (0x3d546)
com/segmentio/inflect.assertEqual: t.Errorf("inflect: expected %v got %v \n %s", a, b, debug.Stack())
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:440 (0x3e55b)
com/segmentio/inflect.TestUnderscoreAcronymSequence: assertEqual(t, "html5_html_api", Underscore("HTML5HTMLAPI"))
/usr/local/go/src/pkg/testing/testing.go:391 (0x3269b)
tRunner: test.F(t)
/usr/local/go/src/pkg/runtime/proc.c:1394 (0x180e0)
goexit: runtime·goexit(void)
--- FAIL: TestUnderscore (0.00 seconds)
inflect_test.go:12: inflect: expected html_tidy got h_t_m_l_tidy
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:12 (0x3d546)
com/segmentio/inflect.assertEqual: t.Errorf("inflect: expected %v got %v \n %s", a, b, debug.Stack())
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:448 (0x3e6f9)
com/segmentio/inflect.TestUnderscore: assertEqual(t, underscore, Underscore(camel))
/usr/local/go/src/pkg/testing/testing.go:391 (0x3269b)
tRunner: test.F(t)
/usr/local/go/src/pkg/runtime/proc.c:1394 (0x180e0)
goexit: runtime·goexit(void)
inflect_test.go:12: inflect: expected html_tidy_generator got h_t_m_l_tidy_generator
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:12 (0x3d546)
com/segmentio/inflect.assertEqual: t.Errorf("inflect: expected %v got %v \n %s", a, b, debug.Stack())
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:448 (0x3e6f9)
com/segmentio/inflect.TestUnderscore: assertEqual(t, underscore, Underscore(camel))
/usr/local/go/src/pkg/testing/testing.go:391 (0x3269b)
tRunner: test.F(t)
/usr/local/go/src/pkg/runtime/proc.c:1394 (0x180e0)
goexit: runtime·goexit(void)
inflect_test.go:12: inflect: expected html got h_t_m_l
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:12 (0x3d546)
com/segmentio/inflect.assertEqual: t.Errorf("inflect: expected %v got %v \n %s", a, b, debug.Stack())
/Users/tj/dev/src/github.com/segmentio/inflect/inflect_test.go:448 (0x3e6f9)
com/segmentio/inflect.TestUnderscore: assertEqual(t, underscore, Underscore(camel))
/usr/local/go/src/pkg/testing/testing.go:391 (0x3269b)
tRunner: test.F(t)
/usr/local/go/src/pkg/runtime/proc.c:1394 (0x180e0)
goexit: runtime·goexit(void)
I'll try and patch soon and send over a PR
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.