Skip to content

Instantly share code, notes, and snippets.

@sephraim
Created January 26, 2024 07:35
Show Gist options
  • Save sephraim/ca74e9b96bb05de7f52f58dfe38498e0 to your computer and use it in GitHub Desktop.
Save sephraim/ca74e9b96bb05de7f52f58dfe38498e0 to your computer and use it in GitHub Desktop.
[Convert PascalCase / camelCase to snake_case]
# Convert a string from PascalCase or camelCase to snake_case
#
# @example
# format_string_key("SearchVault") #=> "search_vault"
# format_string_key("SetPINDirection") #=> "set_pin_direction"
# format_string_key("PINNumber") #=> "pin_number"
# format_string_key("myVaultPINNumber") #=> "my_vault_pin_number"
#
# @param key [String] The key name to convert
# @return [String] The converted string
def format_string_key(key)
# e.g. key = " MyVaultPINNumber "
key.strip #=> "MyVaultPINNumber"
.gsub(/([a-z])([A-Z])/, '\1_\2') #=> "My_VaultPIN_Number"
.gsub(/([A-Z][a-z])/, '_\1') #=> "_My__Vault_PIN_Number"
.gsub(/^_/, '') #=> "My__Vault_PIN_Number"
.squeeze('_') #=> "My_Vault_PIN_Number"
.downcase #=> "my_vault_pin_number"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment