diff --git a/.github/workflows/Process-PSModule.yml b/.github/workflows/Process-PSModule.yml index 9462763..a8e37ad 100644 --- a/.github/workflows/Process-PSModule.yml +++ b/.github/workflows/Process-PSModule.yml @@ -27,5 +27,5 @@ permissions: jobs: Process-PSModule: - uses: PSModule/Process-PSModule/.github/workflows/workflow.yml@205d193f34cbbaf9992955c21d842bcf98a1859f # v5.4.6 + uses: PSModule/Process-PSModule/.github/workflows/workflow.yml@da180bac16b13bfbcdf08b2e4e221b5b49e5ff28 # v6.1.4 secrets: inherit diff --git a/README.md b/README.md index ebb04ec..7354e3f 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,12 @@ # Hashtable -Hashtable is a comprehensive module that provides functions for working with PowerShell hashtables. -It enables you to convert hashtables to PSCustomObjects and vice versa, format hashtables into readable PowerShell -code, merge hashtables with override support, and remove entries based on specific criteria. This collection of -utilities is designed to simplify complex hashtable manipulations and help automate your PowerShell workflows. - -## Prerequisites - -This module uses the following external resources: -- The [PSModule framework](https://github.com/PSModule) for building, testing, and publishing the module. +Hashtable is a comprehensive PowerShell module for working with hashtables. It converts hashtables to and from +PSCustomObjects, formats hashtables into readable PowerShell code, merges hashtables with override support, and removes +entries based on specific criteria — simplifying complex hashtable manipulations in your automation workflows. ## Installation -To install the module from the PowerShell Gallery, you can use the following command: +Install the module from the PowerShell Gallery: ```powershell Install-PSResource -Name Hashtable @@ -21,11 +15,9 @@ Import-Module -Name Hashtable ## Usage -Below are some examples illustrating typical use cases for the module. - -### Example 1: Converting a Hashtable to a PSCustomObject +### Example: Convert a hashtable to a PSCustomObject -This example demonstrates how to convert a nested hashtable into a PSCustomObject, making it easier to manipulate and explore your data. +Convert a nested hashtable into a PSCustomObject, making it easier to manipulate and explore your data. ```powershell $hashtable = @{ @@ -41,10 +33,10 @@ $object = $hashtable | ConvertFrom-Hashtable $object | Format-List ``` -### Example 2: Merging Hashtables +### Example: Merge hashtables with overrides -Merge a default settings hashtable with user-specified overrides. In this example, the values in the override hashtable -replace those in the main hashtable. +Merge a default settings hashtable with user-specified overrides. Values in the override hashtable replace those in the +base hashtable. ```powershell $defaultSettings = @{ @@ -61,10 +53,10 @@ $mergedSettings = $defaultSettings | Merge-Hashtable -Overrides $userSettings $mergedSettings ``` -### Example 3: Formatting a Hashtable as PowerShell Code +### Example: Format a hashtable as PowerShell code -Convert a hashtable into a nicely formatted PowerShell code representation. This is especially useful for exporting -configurations to a `.psd1` file. +Convert a hashtable into a nicely formatted PowerShell code representation — useful for exporting configuration to a +`.psd1` file. ```powershell $configuration = @{ @@ -81,39 +73,29 @@ $formattedConfig = $configuration | Format-Hashtable Write-Output $formattedConfig ``` -### Example 4: Removing Hashtable Entries Based on Criteria +### Example: Remove hashtable entries by criteria -Remove specific entries from a hashtable, such as keys with null or empty values, or those matching a particular name. +Remove specific entries from a hashtable, such as keys with null or empty values or a key matching a particular name. ```powershell $ht = @{ - ValidKey = 'SomeValue' - EmptyKey = '' - RemoveMe = 'Unwanted' + ValidKey = 'SomeValue' + EmptyKey = '' + RemoveMe = 'Unwanted' } -# Remove entries with null or empty values and keys named 'RemoveMe' +# Remove entries with null or empty values and the key named 'RemoveMe' $ht | Remove-HashtableEntry -NullOrEmptyValues -Keys 'RemoveMe' $ht ``` -You can use `Get-Command -Module 'Hashtable'` to list available commands, and `Get-Help -Examples ` to view command-specific examples. - ## Documentation -Detailed documentation for each function is available via inline help. For more extensive documentation, please visit the -[Hashtable docs](https://psmodule.io/Hashtable/) or [PSModule Docs](https://psmodule.io/docs). - -## Contributing +Documentation is published at [psmodule.io/Hashtable](https://psmodule.io/Hashtable/). -Coder or not, you can contribute to the project! We welcome all contributions. +Use PowerShell help and command discovery for module details: -### For Users - -If you don't code, your feedback is invaluable. If you encounter issues, unexpected behaviors, or missing functionality, -please submit a bug report or feature request via the project's issues page. - -### For Developers - -If you code, we'd love to see your contributions. Please review the [Contribution Guidelines](CONTRIBUTING.md) for more details. -You can start by picking up an existing issue or submitting a new one if you have an idea for a new feature or improvement. +```powershell +Get-Command -Module Hashtable +Get-Help -Name ConvertTo-Hashtable -Examples +``` diff --git a/tests/Hashtable.Tests.ps1 b/tests/Hashtable.Tests.ps1 index 561cbe8..7fb085e 100644 --- a/tests/Hashtable.Tests.ps1 +++ b/tests/Hashtable.Tests.ps1 @@ -1,5 +1,19 @@ -Describe 'Module' { +#Requires -Modules @{ ModuleName = 'Pester'; ModuleVersion = '6.0.0'; MaximumVersion = '6.*' } + +Describe 'Module' { Describe 'Merge-Hashtable' { + It 'Merges into an empty hashtable' { + $Main = @{} + $Override = @{ + Key1 = 'Value1' + Key2 = 'Value2' + } + $Result = Merge-Hashtable -Main $Main -Overrides $Override + + $Result.Key1 | Should -Be 'Value1' + $Result.Key2 | Should -Be 'Value2' + } + It 'Merges two hashtable' { $Main = @{ Action = ''