Skip to content

Switch case #7995

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
May 10, 2023
108 changes: 108 additions & 0 deletions strings/string_switch_case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import re

"""
general info:
https://en.wikipedia.org/wiki/Naming_convention_(programming)#Python_and_Ruby

pascal case [ an upper Camel Case ]: https://en.wikipedia.org/wiki/Camel_case

camel case: https://en.wikipedia.org/wiki/Camel_case

kebab case [ can be found in general info ]:
https://en.wikipedia.org/wiki/Naming_convention_(programming)#Python_and_Ruby

snake case: https://en.wikipedia.org/wiki/Snake_case
"""


# assistant functions
def split_input(str_: str) -> list:
"""
>>> split_input("one two 31235three4four")
[['one', 'two', '31235three4four']]
"""
return [char.split() for char in re.split(r"[^ a-z A-Z 0-9 \s]", str_)]


def to_simple_case(str_: str) -> str:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file strings/string_switch_case.py, please provide doctest for the function to_simple_case

"""
>>> to_simple_case("one two 31235three4four")
'OneTwo31235three4four'
"""
string_split = split_input(str_)
return "".join(
["".join([char.capitalize() for char in sub_str]) for sub_str in string_split]
)


def to_complex_case(text: str, upper: bool, separator: str) -> str:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file strings/string_switch_case.py, please provide doctest for the function to_complex_case

"""
>>> to_complex_case("one two 31235three4four", True, "_")
'ONE_TWO_31235THREE4FOUR'
>>> to_complex_case("one two 31235three4four", False, "-")
'one-two-31235three4four'
"""
try:
string_split = split_input(text)
if upper:
res_str = "".join(
[
separator.join([char.upper() for char in sub_str])
for sub_str in string_split
]
)
else:
res_str = "".join(
[
separator.join([char.lower() for char in sub_str])
for sub_str in string_split
]
)
return res_str
except IndexError:
return "not valid string"


# main content
def to_pascal_case(text: str) -> str:
"""
>>> to_pascal_case("one two 31235three4four")
'OneTwo31235three4four'
"""
return to_simple_case(text)


def to_camel_case(text: str) -> str:
"""
>>> to_camel_case("one two 31235three4four")
'oneTwo31235three4four'
"""
try:
res_str = to_simple_case(text)
return res_str[0].lower() + res_str[1:]
except IndexError:
return "not valid string"


def to_snake_case(text: str, upper: bool) -> str:
"""
>>> to_snake_case("one two 31235three4four", True)
'ONE_TWO_31235THREE4FOUR'
>>> to_snake_case("one two 31235three4four", False)
'one_two_31235three4four'
"""
return to_complex_case(text, upper, "_")


def to_kebab_case(text: str, upper: bool) -> str:
"""
>>> to_kebab_case("one two 31235three4four", True)
'ONE-TWO-31235THREE4FOUR'
>>> to_kebab_case("one two 31235three4four", False)
'one-two-31235three4four'
"""
return to_complex_case(text, upper, "-")


if __name__ == "__main__":
__import__("doctest").testmod()