The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# $HeadURL: https://svn.oucs.ox.ac.uk/people/oliver/pub/librpc-serialized-perl/trunk/lib/RPC/Serialized/ACL/Group.pm $
# $LastChangedRevision: 1326 $
# $LastChangedDate: 2008-10-01 16:16:56 +0100 (Wed, 01 Oct 2008) $
# $LastChangedBy: oliver $
#
package RPC::Serialized::ACL::Group;
{
  $RPC::Serialized::ACL::Group::VERSION = '1.123630';
}

use strict;
use warnings FATAL => 'all';

use URI;
use Readonly;
use RPC::Serialized::Exceptions;

Readonly my %schemes => (
    'file' => sub {
        my $uri = shift;

        return 'RPC::Serialized::ACL::Group::GDBM_File'
            if $uri->file =~ /\.gdbm$/;

        return 'RPC::Serialized::ACL::Group::File';
    }
);

sub new {
    my $proto = shift;
    my $str   = shift
        or throw_app 'URI not specified';

    my $uri = URI->new($str)
        or throw_app "Failed to parse URI '$str'";

    my $scheme = $uri->scheme
        or throw_app "Failed to parse scheme from URI '$str'";

    my $map = $schemes{$scheme}
        or throw_app "Unsupported URI scheme '$scheme'";

    my $class = $map->($uri);
    eval "require $class"
        or throw_system "Failed to load '$class': $!";

    return $class->new($uri);
}

sub is_member {
    my $self = shift;
    my $name = shift;
    return;
}

sub match {
    my $self = shift;
    my $name = shift;
    return defined($name) && $self->is_member($name);
}

1;