Quota-OO

 view release on metacpan or  search on metacpan

lib/Quota/OO.pm  view on Meta::CPAN

package Quota::OO;

use strict;
use warnings;

use version;our $VERSION = qv('0.0.1');

use Class::Std;
use Class::Std::Utils;

use Quota;

{
    my %dev :ATTR('set' => 'dev', 'get' => 'dev', 'init_arg' => 'dev');
    my %uid :ATTR('set' => 'uid', 'get' => 'uid', 'init_arg' => 'uid');
    my %gid :ATTR('set' => 'gid', 'get' => 'gid', 'init_arg' => 'gid');

    my %rpc_host :ATTR('set' => 'rpc_host', 'get' => 'rpc_host', 'init_arg' => 'rpc_host');
    my %rpc_path :ATTR('set' => 'rpc_path', 'get' => 'rpc_path', 'init_arg' => 'rpc_path');
    my %rpc_port :ATTR('set' => 'rpc_port', 'get' => 'rpc_port', 'init_arg' => 'rpc_port');
    my %rpc_uid  :ATTR('set' => 'rpc_uid',  'get' =>  'rpc_uid', 'init_arg' => 'rpc_uid');
    my %rpc_gid  :ATTR('set' => 'rpc_gid',  'get' =>  'rpc_gid', 'init_arg' => 'rpc_gid');
    my %rpc_use_tcp :ATTR('set' => 'rpc_use_tcp', 'get' => 'rpc_use_tcp', 'init_arg' => 'rpc_use_tcp');
    my %rpc_timeout :ATTR('set' => 'rpc_timeout', 'get' => 'rpc_timeout', 'init_arg' => 'rpc_timeout');

    sub BUILD {
        my ($self, $obj_id, $arg_ref) = @_;

        $dev{$obj_id} = $self->set_dev( $arg_ref->{'dev'} );
        $uid{$obj_id} = $self->set_uid( $arg_ref->{'uid'} );
        $gid{$obj_id} = $self->set_gid( $arg_ref->{'gid'} );
    }

    sub set_dev {
        my ($self, $dev)	= @_;
        $dev{ ident $self }   = $self->getqcarg($dev);
    }

    sub set_uid {
        my ($self, $uid) = @_;
        $uid{ ident $self } = $uid =~ m{^\d+$} ? $uid : $>;	
    }

    sub set_gid {
        my ($self, $gid) = @_;
        $gid{ ident $self } 
            = $gid =~ m{^\d+$} ? $gid : ( getpwuid($uid{ ident $self }) )[3];	
    }

#### do rcp* ##
#### Quota::rpcquery ##
	sub rpcquery {
    	my ($self, $host, $path, $uid) = @_;
        
        Quota::rpcquery(
	        defined $host ? $host : $rpc_host{ ident $self },
	        defined $path ? $path : $rpc_path{ ident $self }, 
	        defined $uid  ? $uid  : $rpc_uid{ ident $self },
	    );
	}

#### Quota::rpcpeer ##
	sub rpcpeer {
    	my ($self, $port, $use_tcp, $timeout) = @_;
    
        Quota::rpcpeer(
	        defined $port    ? $port    : $rpc_port{ ident $self }, 
	        defined $use_tcp ? $use_tcp : $rpc_use_tcp{ ident $self }, 
	        defined $timeout ? $timeout : $rpc_timeout{ ident $self },
	    );
	}

#### Quota::rpcauth ##
	sub rpcauth {
    	my ($self, $uid, $gid, $ host) = @_;

        Quota::rpcauth(
	        defined $uid  ? $uid  : $rpc_uid{ ident $self }, 
	        defined $gid  ? $gid  : $rpc_gid{ ident $self }, 
	        defined $host ? $host : $rpc_host{ ident $self },
	    );
	}

	sub get_rpc_query {
    	my ($self, $args_hr) = @_;

    	$self->rpcpeer( 
            $args_hr->{'rpc_port'}, 
            $args_hr->{'rpc_use_tcp'},
            $args_hr->{'rpc_timeout'},
        );

    	$self->rpcauth( 
            $args_hr->{'rpc_uid'},
            $args_hr->{'rpc_gid'},
            $args_hr->{'rpc_host'},
        );

        my @rpc_results = $self->rcpquery( 
            				  $args_hr->{'rpc_host'},
            		 		  $args_hr->{'rpc_path'},
            		          $args_hr->{'rpc_uid'},
                          );
    	return wantarray ? @rpc_results : \@rpc_results;
   	
    }



( run in 2.303 seconds using v1.01-cache-2.11-cpan-5735350b133 )