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 )