mirror of
https://github.com/thegeeklab/ansible-later.git
synced 2024-11-16 10:00:39 +00:00
66 lines
2.4 KiB
PowerShell
66 lines
2.4 KiB
PowerShell
|
# Copyright (c) 2017 Ansible Project
|
||
|
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
|
||
|
|
||
|
# used by Convert-DictToSnakeCase to convert a string in camelCase
|
||
|
# format to snake_case
|
||
|
Function Convert-StringToSnakeCase($string) {
|
||
|
# cope with pluralized abbreaviations such as TargetGroupARNs
|
||
|
if ($string -cmatch "[A-Z]{3,}s") {
|
||
|
$replacement_string = $string -creplace $matches[0], "_$($matches[0].ToLower())"
|
||
|
|
||
|
# handle when there was nothing before the plural pattern
|
||
|
if ($replacement_string.StartsWith("_") -and -not $string.StartsWith("_")) {
|
||
|
$replacement_string = $replacement_string.Substring(1)
|
||
|
}
|
||
|
$string = $replacement_string
|
||
|
}
|
||
|
$string = $string -creplace "(.)([A-Z][a-z]+)", '$1_$2'
|
||
|
$string = $string -creplace "([a-z0-9])([A-Z])", '$1_$2'
|
||
|
$string = $string.ToLower()
|
||
|
|
||
|
return $string
|
||
|
}
|
||
|
|
||
|
# used by Convert-DictToSnakeCase to covert list entries from camelCase
|
||
|
# to snake_case
|
||
|
Function Convert-ListToSnakeCase($list) {
|
||
|
$snake_list = [System.Collections.ArrayList]@()
|
||
|
foreach ($value in $list) {
|
||
|
if ($value -is [Hashtable]) {
|
||
|
$new_value = Convert-DictToSnakeCase -dict $value
|
||
|
} elseif ($value -is [Array] -or $value -is [System.Collections.ArrayList]) {
|
||
|
$new_value = Convert-ListToSnakeCase -list $value
|
||
|
} else {
|
||
|
$new_value = $value
|
||
|
}
|
||
|
[void]$snake_list.Add($new_value)
|
||
|
}
|
||
|
|
||
|
return ,$snake_list
|
||
|
}
|
||
|
|
||
|
# converts a dict/hashtable keys from camelCase to snake_case
|
||
|
# this is to keep the return values consistent with the Ansible
|
||
|
# way of working.
|
||
|
Function Convert-DictToSnakeCase($dict) {
|
||
|
$snake_dict = @{}
|
||
|
foreach ($dict_entry in $dict.GetEnumerator()) {
|
||
|
$key = $dict_entry.Key
|
||
|
$snake_key = Convert-StringToSnakeCase -string $key
|
||
|
|
||
|
$value = $dict_entry.Value
|
||
|
if ($value -is [Hashtable]) {
|
||
|
$snake_dict.$snake_key = Convert-DictToSnakeCase -dict $value
|
||
|
} elseif ($value -is [Array] -or $value -is [System.Collections.ArrayList]) {
|
||
|
$snake_dict.$snake_key = Convert-ListToSnakeCase -list $value
|
||
|
} else {
|
||
|
$snake_dict.$snake_key = $value
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ,$snake_dict
|
||
|
}
|
||
|
|
||
|
# this line must stay at the bottom to ensure all defined module parts are exported
|
||
|
Export-ModuleMember -Alias * -Function * -Cmdlet *
|