Created
October 18, 2023 12:16
-
-
Save Menziess/37cddbfb3ea6d937317f859c41b55800 to your computer and use it in GitHub Desktop.
Convert input string to snake-, camel-, kebab- or pascalcase.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from re import findall | |
from toolz.curried import curry, map, pipe | |
def to_something_case(text: str, case='snake') -> str: | |
"""Convert input string to snake-, camel-, kebab- or pascalcase.""" | |
if not text: | |
return text | |
first_char, sep, other_first_chars = { | |
'snake': (str.lower, '_', str.lower), | |
'camel': (str.lower, '', str.title), | |
'kebab': (str.lower, '-', str.lower), | |
'pascal': (str.title, '', str.title), | |
}[case] | |
result = pipe( | |
text, | |
curry(findall)(r'[A-Z][a-z]*|[a-z]+'), | |
map(str.lower), | |
map(other_first_chars), | |
sep.join, | |
) | |
return first_char(result[0]) + result[1:] | |
def test_to_something_case(): | |
"""Should convert strings to camelcase.""" | |
assert to_something_case('My sentence!') == 'my_sentence' | |
assert to_something_case('My sentence!', case='snake') == 'my_sentence' | |
assert to_something_case('My sentence!', case='camel') == 'mySentence' | |
assert to_something_case('My sentence!', case='kebab') == 'my-sentence' | |
assert to_something_case('My sentence!', case='pascal') == 'MySentence' | |
assert to_something_case('camelCase') == 'camel_case' | |
assert to_something_case('PascalCase') == 'pascal_case' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment