Morpheus
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Morpheus/Key.pm view on Meta::CPAN
package Morpheus::Key;
{
$Morpheus::Key::VERSION = '0.46';
}
use strict;
# ABSTRACT: class representing config key
use overload
'eq' => sub { @_ = upgrade(@_); ${$_[0]} eq ${$_[1]} },
'lt' => \&less,
'le' => sub { @_ = upgrade(@_); $_[0] lt $_[1] or $_[0] eq $_[1] },
'gt' => sub { @_ = upgrade(@_); $_[1] lt $_[0] },
'ge' => sub { @_ = upgrade(@_); $_[1] lt $_[0] or $_[0] eq $_[1] }, #ATTN 'not $x < $y' does not mean '$x >= $y'
'""' => sub { ${$_[0]} },
'@{}' => \&parts;
use base qw(Exporter);
our @EXPORT_OK = qw(key);
sub new {
my $class = shift;
my $key = shift;
$key =~ s{/+}{/}g;
$key =~ s{^/*}{/}; #TODO: support relative keys?
$key =~ s{/+$}{};
bless \$key => $class;
}
sub upgrade {
map { ref $_ ? $_ : __PACKAGE__->new($_) } @_;
}
sub less ($$) {
@_ = upgrade(@_);
my ($key1, $key2) = @_;
$key1 = "$key1";
$key2 = "$key2";
return length $key1 < length $key2 && substr($key2, 0, 1 + length $key1) eq "$key1/";
}
sub parts ($) {
my ($key) = @_;
$key = "$key";
$key =~ s{^/}{};
return [split qr{/}, $key];
}
sub key {
__PACKAGE__->new($_[0]);
}
1;
__END__
=pod
=head1 NAME
Morpheus::Key - class representing config key
=head1 VERSION
version 0.46
=head1 SYNOPSIS
use Morpheus::Key qw(key);
$key = Morpheus::Key->new("/foo/bar/x");
$key = key("/foo/bar/y");
say "key: $key";
say "parts: ", join '/', @{ $key->parts };
key("/foo/bar") ge key("/foo"); # true
key("/foo") gt key("/bar"); # false
key("/bar") gt key("/foo"); # also false
=head1 DESCRIPTION
Morpheus configuration tree looks very much like a file system with directory structure and files. The names of these "directories" and "files" are called I<configuration keys>. They are either represented by a string of the form C</namespace/subname...
Morpheus::Key class provides the following features:
=head2 Normalization
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.568 second using v1.00-cache-2.02-grep-82fe00e-cpan-d29e8ade9f55 )