~mclehman/app-ryov

81d0f2ae69f56b536160071e1fb04a28b677649f — 0xFORDCOMMA 3 years ago 0f91309 master
Refactor update dispatch.
2 files changed, 12 insertions(+), 10 deletions(-)

M META6.json
M bin/ryov
M META6.json => META6.json +1 -1
@@ 18,5 18,5 @@
  "scripts": {
    "test": "zef test ."
  },
  "version": "2020.01.06.1"
  "version": "2020.01.07"
}
\ No newline at end of file

M bin/ryov => bin/ryov +11 -9
@@ 29,20 29,22 @@ multi MAIN('bump', Bool :$breaking = False) {

class X::Ryov::BadUpdate is Exception {
    method message() {
        "Bad update, both transform and value provided";
        "Bad update";
    }
}

sub update-meta6($path, $key, :$transform, :$value) {
    my %meta6 = $path.slurp.&from-json;
    if $transform.defined and $value.defined {
        X::Ryov::BadUpdate.new.throw;
    }
    if $transform.defined {
        %meta6{$key} = $transform(%meta6{$key});
    }
    if $value.defined {
        %meta6{$key} = $value;
    given ($transform, $value)>>.defined {
        when * eqv any((True, True), (False, False)) {
            X::Ryov::BadUpdate.new.throw;
        }
        when * eqv (True, False) {
            %meta6{$key} = $transform(%meta6{$key});
        }
        when * eqv (False, True) {
            %meta6{$key} = $value;
        }
    }
    $path.spurt: to-json %meta6, :sorted-keys;
    return %meta6{$key};