Skip to content
/ caseit Public

Case conversion library and command line tool written in Go

License

Notifications You must be signed in to change notification settings

runeimp/caseit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CaseIt

Case conversion library and command line tool written in Go

CLI Tool v1.0.1
Library v1.0.0

Case Conversions Implemented

Word Casing

  • lower case – All words in statement are lower cased.
  • Title Case (simple) – All words have the first character upper cased. All other letters are left as they were initially.
  • Title Case (forced) – All letters in a word after the first are lower cased.
  • Title Case (coder) – Like simple title case but also checks if a word is a common initialism such as gRPC, OAuth, OpenID, etc. and enforces the initialism.
  • Title Case (smart) – Like simple title case but also lower cases small words such as "a", "the", etc. Uses my titlecase library which is based on Python Titlecase.
  • UPPER CASE – All words upper cased.

Word Delimiters

Each of the word casing options are then paired with a word separation option

  • CamelCase AKA No Delimiter
    • lowercase
    • camelCase – Initial word is always lower cased.
    • TitleCase
    • ForcedTitleCase
    • CoderTitleCase
    • SmartTitleCase
    • PascalCase – The same a ForcedTitleCase
    • UPPERCASE
  • char*case - Any delimiter for those who simply need more options. * is the default delimiter if you don't specify one with -d or --delimiter.
    • char*lower*case
    • Char*Forced*Case
    • Char*Title*Case
    • Char*Coder*Case
    • Char*Smart*Case
    • CHAR*UPPER*CASE
  • dot.case
    • dot.lower.case
    • Dot.Title.Case
    • Dot.Forced.Title.Case
    • Dot.Coder.Title.Case
    • Dot.Smart.Title.Case
    • DOT.UPPER.CASE
  • kebab-case
    • kebab-lower-case
    • Kebab-Title-Case
    • Kebab-Forced-Title-Case
    • Kebab-Coder-Title-Case
    • Kebab-Smart-Title-Case
    • KEBAB-UPPER-CASE
  • snake_case
    • snake_case
    • Snake_Title_Case
    • Snake_Forced_Title_Case
    • Snake_Coder_Title_Case
    • Snake_Smart_Title_Case
    • SNAKE_UPPER_CASE
  • Word Case AKA Space Case
    • separate words lower case
    • Separate Words Title Case
    • Separate Words Forced Title Case
    • Dot.Coder.Title.Case
    • Separate Words Smart Title Case (words like "a", "the", etc. are not title cased)
    • SEPARATE WORDS UPPER CASE

Features

  • Case conversion
  • Word delimitation
  • No external libraries. OK, that's not entirely true. But the one external library is my own titlecase package. 👼
  • I wanted a tool that could also do Snake_Title_Case. I couldn't find one so I created this tool.

Example

Help

$ caseit
Processes input string(s) providing conversion to almost any code standard desired, including proper title casing.
CaseIt v1.0.0
Usage: caseit

Options:
  --help, -h             display this help and exit
  --version              display version and exit

Commands:
  all                    All commands used
  camel                  Words are not separated by a delimiter
  char                   Character specified separated words
  dot                    Dot separated words
  kebab                  Hyphen separated words
  snake                  Underscore separated words
  word                   Space separated words

Subcommand Help

$ caseit snake -h
Processes input string(s) providing conversion to almost any code standard desired, including proper title casing.
CaseIt v1.0.0
Usage: caseit snake [--all] [--force] [--lower] [--title] [--coder] [--smart] [--upper] [INPUT [INPUT ...]]

Positional arguments:
  INPUT                  The input string(s) to process

Options:
  --all, -a              Use all options
  --force, -f            Forced Title_Snake_Case - Words in all caps will be forced to initial letter upper and the rest lower. Commonly used for database names.
  --lower, -l            Python's traditional_snake_case. This is the default.
  --title, -t            Title_Snake_Case - Words that are all caps are left all caps. Commonly used for database names.
  --coder, -c            Coder Title_Snake_Case - Words that are common initialisms are properly cased for the initialism. Otherwise force title cased. Commonly used for database names.
  --smart, -s            Smart Title_Snake_Case - Uses code based on Python Titlecase which is smart about small words, etc. Commonly used for database names.
  --upper, -u            UPPER_SNAKE_CASE or CONSTANTS_CASE in many languages.
  --help, -h             display this help and exit
  --version              display version and exit

snake_case

Default Case Only (lower for snake_case)

$ caseit snake "This OAuth test" " ALL CAPS to go thru 1--6 of the 1/2 with the correct CIA ID over GRPC"
Source: "This OAuth test"
        " ALL CAPS to go thru 1--6 of the 1/2 with the correct CIA ID over GRPC"
    snake_case:
 lower: this_oauth_test

 lower: all_caps_to_go_thru_1_6_of_the_1_2_with_the_correct_cia_id_over_grpc

Force Case, Coder Case, and Smart Case

$ caseit snake -f -c -s "This OAuth test" " ALL CAPS to go thru 1--6 of the 1/2 with the correct CIA ID over GRPC"
Source: "This OAuth test"
        " ALL CAPS to go thru 1--6 of the 1/2 with the correct CIA ID over GRPC"
    snake_case:
 Force: This_Oauth_Test
 Coder: This_OAuth_Test
 Smart: This_OAuth_Test

 Force: All_Caps_To_Go_Thru_1_6_Of_The_1_2_With_The_Correct_Cia_Id_Over_Grpc
 Coder: All_Caps_To_Go_Thru_1_6_Of_The_1_2_With_The_Correct_CIA_ID_Over_gRPC
 Smart: ALL_CAPS_to_Go_Thru_1_6_of_the_1_2_with_the_Correct_CIA_ID_Over_GRPC

The Kitchen Sink

All cases and all styles

$ caseit all "This OAuth test" " ALL CAPS to go thru 1--6 of the 1/2 with the correct CIA ID over GRPC"
Source: "This OAuth test"
        " ALL CAPS to go thru 1--6 of the 1/2 with the correct CIA ID over GRPC"
    CamelCase:
 lower: thisoauthtest
 camel: thisOauthTest
 Force: ThisOauthTest
 Title: ThisOAuthTest
 Coder: ThisOAuthTest
 Smart: ThisOAuthTest
Pascal: ThisOauthTest
 UPPER: THISOAUTHTEST

 lower: allcapstogothru16ofthe12withthecorrectciaidovergrpc
 camel: allCapsToGoThru16OfThe12WithTheCorrectCiaIdOverGrpc
 Force: AllCapsToGoThru16OfThe12WithTheCorrectCiaIdOverGrpc
 Title: ALLCAPSToGoThru16OfThe12WithTheCorrectCIAIDOverGRPC
 Coder: AllCapsToGoThru16OfThe12WithTheCorrectCIAIDOvergRPC
 Smart: ALLCAPStoGoThru16ofthe12withtheCorrectCIAIDOverGRPC
Pascal: AllCapsToGoThru16OfThe12WithTheCorrectCiaIdOverGrpc
 UPPER: ALLCAPSTOGOTHRU16OFTHE12WITHTHECORRECTCIAIDOVERGRPC

    char*case:
 lower: this*oauth*test
 Force: This*Oauth*Test
 Title: This*OAuth*Test
 Coder: This*OAuth*Test
 Smart: This*OAuth*Test
 UPPER: THIS*OAUTH*TEST

 lower: all*caps*to*go*thru*1*6*of*the*1*2*with*the*correct*cia*id*over*grpc
 Force: All*Caps*To*Go*Thru*1*6*Of*The*1*2*With*The*Correct*Cia*Id*Over*Grpc
 Title: ALL*CAPS*To*Go*Thru*1*6*Of*The*1*2*With*The*Correct*CIA*ID*Over*GRPC
 Coder: All*Caps*To*Go*Thru*1*6*Of*The*1*2*With*The*Correct*CIA*ID*Over*gRPC
 Smart: ALL*CAPS*to*Go*Thru*1*6*of*the*1*2*with*the*Correct*CIA*ID*Over*GRPC
 UPPER: ALL*CAPS*TO*GO*THRU*1*6*OF*THE*1*2*WITH*THE*CORRECT*CIA*ID*OVER*GRPC

    dot.case:
 lower: this.oauth.test
 Force: This.Oauth.Test
 Title: This.OAuth.Test
 Coder: This.OAuth.Test
 Smart: This.OAuth.Test
 UPPER: THIS.OAUTH.TEST

 lower: all.caps.to.go.thru.1.6.of.the.1.2.with.the.correct.cia.id.over.grpc
 Force: All.Caps.To.Go.Thru.1.6.Of.The.1.2.With.The.Correct.Cia.Id.Over.Grpc
 Title: ALL.CAPS.To.Go.Thru.1.6.Of.The.1.2.With.The.Correct.CIA.ID.Over.GRPC
 Coder: All.Caps.To.Go.Thru.1.6.Of.The.1.2.With.The.Correct.CIA.ID.Over.gRPC
 Smart: ALL.CAPS.to.Go.Thru.1.6.of.the.1.2.with.the.Correct.CIA.ID.Over.GRPC
 UPPER: ALL.CAPS.TO.GO.THRU.1.6.OF.THE.1.2.WITH.THE.CORRECT.CIA.ID.OVER.GRPC

    kebab-case:
 lower: this-oauth-test
 Force: This-Oauth-Test
 Title: This-OAuth-Test
 Coder: This-OAuth-Test
 Smart: This-OAuth-Test
 UPPER: THIS-OAUTH-TEST

 lower: all-caps-to-go-thru-1-6-of-the-1-2-with-the-correct-cia-id-over-grpc
 Force: All-Caps-To-Go-Thru-1-6-Of-The-1-2-With-The-Correct-Cia-Id-Over-Grpc
 Title: ALL-CAPS-To-Go-Thru-1-6-Of-The-1-2-With-The-Correct-CIA-ID-Over-GRPC
 Coder: All-Caps-To-Go-Thru-1-6-Of-The-1-2-With-The-Correct-CIA-ID-Over-gRPC
 Smart: ALL-CAPS-to-Go-Thru-1-6-of-the-1-2-with-the-Correct-CIA-ID-Over-GRPC
 UPPER: ALL-CAPS-TO-GO-THRU-1-6-OF-THE-1-2-WITH-THE-CORRECT-CIA-ID-OVER-GRPC

    snake_case:
 lower: this_oauth_test
 Force: This_Oauth_Test
 Title: This_OAuth_Test
 Coder: This_OAuth_Test
 Smart: This_OAuth_Test
 UPPER: THIS_OAUTH_TEST

 lower: all_caps_to_go_thru_1_6_of_the_1_2_with_the_correct_cia_id_over_grpc
 Force: All_Caps_To_Go_Thru_1_6_Of_The_1_2_With_The_Correct_Cia_Id_Over_Grpc
 Title: ALL_CAPS_To_Go_Thru_1_6_Of_The_1_2_With_The_Correct_CIA_ID_Over_GRPC
 Coder: All_Caps_To_Go_Thru_1_6_Of_The_1_2_With_The_Correct_CIA_ID_Over_gRPC
 Smart: ALL_CAPS_to_Go_Thru_1_6_of_the_1_2_with_the_Correct_CIA_ID_Over_GRPC
 UPPER: ALL_CAPS_TO_GO_THRU_1_6_OF_THE_1_2_WITH_THE_CORRECT_CIA_ID_OVER_GRPC

    Word Case:
 lower: this oauth test
 Force: This Oauth Test
 Title: This OAuth Test
 Coder: This OAuth Test
 Smart: This OAuth Test
 UPPER: THIS OAUTH TEST

 lower: all caps to go thru 1 6 of the 1 2 with the correct cia id over grpc
 Force: All Caps To Go Thru 1 6 Of The 1 2 With The Correct Cia Id Over Grpc
 Title: ALL CAPS To Go Thru 1 6 Of The 1 2 With The Correct CIA ID Over GRPC
 Coder: All Caps To Go Thru 1 6 Of The 1 2 With The Correct CIA ID Over gRPC
 Smart: ALL CAPS to Go Thru 1 6 of the 1 2 with the Correct CIA ID Over GRPC
 UPPER: ALL CAPS TO GO THRU 1 6 OF THE 1 2 WITH THE CORRECT CIA ID OVER GRPC

ToDo:

  • Add all the casing options
  • Add more options to caseit command line tool
  • Add custom delimiter support for CLI input
  • Add custom delimiter support for library output
  • Add unit tests
  • Update Create the docs
  • Update caseit.Separatem() to handle things like "ID or other ALL CAPS casing" to maintain the caps when possible
  • Setup cross-compiling for releases

References

My main reference in starting this was Properly Capitalizing a Title and a quick review of the other similar products that already existed.

Similar Products

  • strcase by Ian Coleman – Very close to what I did with CaseIt. There are a few features in both that are present in the other.
  • go-strcase by Adrian Stoewer – This one is fine if you just need kebab-case, snake_case, camelCase, and PascalCase.
  • snaker by Serenize UG – This one only handles snake_case, camelCase, and PascalCase. But also is aware of common initialisms and words with odd capitalization usage such as ID and OAuth and inspired my usage of that concept in this app.

About

Case conversion library and command line tool written in Go

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages