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
93 changes: 93 additions & 0 deletions strings/string_switch_case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
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) -> 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 split_input

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

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

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()