## ------------------------------------------------------------------------- ##
## Module
## ------------------------------------------------------------------------- ##

^Module := ^Class.new({});
^Module.set_superclasses([ ^Package ]);

^Module.add_attribute('$!version',   '');
^Module.add_attribute('$!authority', '');

^Module.add_method('version',     -> { self`get_attr('$!version') });
^Module.add_method('set_version', -> $version {
    -> { self`set_attr('$!version', $version) }`do_if($version`not_nil);
});

^Module.add_method('authority',     -> { self`get_attr('$!authority') });
^Module.add_method('set_authority', -> $authority {
    -> { self`set_attr('$!authority', $authority) }`do_if($authority`not_nil);
});

^Module.add_method('identifier', -> {
    $output := self`get_attr('$!name');
    $output := self`get_attr('$!version')`not_nil`if_else(
        -> { $output`concat('-')`concat(self`get_attr('$!version')) },
        -> { $output }
    );
    $output := self`get_attr('$!authority')`not_nil`if_else(
        -> { $output`concat('-')`concat(self`get_attr('$!authority')) },
        -> { $output }
    ); 
    $output;
});
