aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamantha McVey <samantham@posteo.net>2017-04-25 13:33:53 -0700
committerSamantha McVey <samantham@posteo.net>2017-04-25 13:33:53 -0700
commit67a34d4225146d2a343ec9e4ff37d50f9c2b43dc (patch)
tree8ef0d7ca4637f8d8e448f5f07cf3f798f817191a
parenta2d567952ec1ce7f10dfff67822818c9f5109014 (diff)
Clean up code some with a given when
-rw-r--r--lib/Hash/Merge.pm632
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;
}
}