DynGig-Range-Cluster
view release on metacpan or search on metacpan
lib/DynGig/Range/Cluster.pm view on Meta::CPAN
=head1 NAME
DynGig::Range::Cluster - Extends DynGig::Range::String.
=cut
package DynGig::Range::Cluster;
=head1 VERSION
Version 0.01
=cut
our $VERSION = '0.03';
use base DynGig::Range::String;
use warnings;
use strict;
use Carp;
use DynGig::Range::Cluster::Client;
my %_ENV;
=head1 DESCRIPTION
=head2 setenv( timeout => seconds, server => server )
Sets DynGig::Range::Cluster::Client parameter. Returns object/class.
=cut
sub setenv
{
my $this = shift @_;
%_ENV = ( cluster => DynGig::Range::Cluster::Client->new( @_ ) );
return $this;
}
=head1 SEE ALSO
See DynGig::Range::String for additional methods.
=head1 GRAMMAR
Tokenizer and parser implement the base class BNF with the
following differences.
=cut
sub _parse
{
my ( $this, $input ) = @_;
my $token = $this->_tokenize( $input, qr/[{}:=%()]/, qr/[-&]/ );
$this += $this->_expression( $token, +{ '}' => 0, ')' => 0 } );
}
sub _valid
{
my ( $this, $token, $lex ) = @_;
return 0 unless @$token;
return ref $token->[0] || $token->[0] eq '{' unless $lex;
return ref $token->[0] || $token->[0] !~ /[-+&}:=%()]/ if $lex == 2;
return $token->[0] =~ /[-+&]/;
}
=head2 <range> ::= <literal> | <cluster>
=head2 <cluster> ::= <literal> '(' <expression> ':' <expression> ')'
| <literal> '(' <expression> '%' <expression> ')'
| <literal> '(' <expression> '=' <expression> ')'
=head2 SYMBOLS
I<cluster operator>:
':' : given cluster name ( left operand ), get attribute keys by value.
'%' : given cluster name ( left operand ), get attribute values by key.
'=' : get cluster names with attribute key = value.
=cut
sub _range
{
my ( $this, $token, $scope ) = @_;
croak 'private method' unless $this->isa( ( caller )[0] );
my $range = bless shift @$token, ref $this;
( run in 2.226 seconds using v1.01-cache-2.11-cpan-f4a522933cf )