diff options
author | Samantha McVey <samantham@posteo.net> | 2017-04-25 13:33:53 -0700 |
---|---|---|
committer | Samantha McVey <samantham@posteo.net> | 2017-04-25 13:33:53 -0700 |
commit | 67a34d4225146d2a343ec9e4ff37d50f9c2b43dc (patch) | |
tree | 8ef0d7ca4637f8d8e448f5f07cf3f798f817191a /lib/Hash | |
parent | a2d567952ec1ce7f10dfff67822818c9f5109014 (diff) |
Clean up code some with a given when
Diffstat (limited to 'lib/Hash')
-rw-r--r-- | lib/Hash/Merge.pm6 | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/lib/Hash/Merge.pm6 b/lib/Hash/Merge.pm6 index b24f25d..60551a3 100644 --- a/lib/Hash/Merge.pm6 +++ b/lib/Hash/Merge.pm6 @@ -24,28 +24,30 @@ augment class Hash { for %merge-source.keys -> $key { if %merge-into{$key}:exists { - if %merge-source{$key} ~~ Hash { - hashmerge %merge-into{$key}, %merge-source{$key}, :$no-append-array; - } elsif %merge-source{$key} ~~ Positional { - if $no-append-array { - %merge-into{$key} = %merge-source{$key}; - } else { - my @a; - - @a.push: $_ for %merge-into{$key}.list; - @a.push: $_ for %merge-source{$key}.list; - - %merge-into{$key} = @a; + given %merge-source{$key} { + when Hash { + hashmerge %merge-into{$key}, + %merge-source{$key}, + :$no-append-array; + } + when Positional { + %merge-into{$key} = $no-append-array + ?? %merge-source{$key} + !! + do { + my @a; + @a.push: $_ for %merge-into{$key}.list; + @a.push: $_ for %merge-source{$key}.list; + @a; + } } - } else { # Non-positionals, so strings or Bools or whatever - %merge-into{$key} = %merge-source{$key}; + default { %merge-into{$key} = %merge-source{$key} } } } else { %merge-into{$key} = %merge-source{$key}; } } - %merge-into; } } |