dotReader
view release on metacpan or search on metacpan
lib/dtRdr/User.pm view on Meta::CPAN
package dtRdr::User;
$VERSION = eval{require version}?version::qv($_):$_ for(0.1.1);
use warnings;
use strict;
use Carp;
use dtRdr;
use dtRdr::Config;
use dtRdr::Library;
use File::Basename ();
use File::Spec;
use Class::Accessor::Classy;
ro 'config';
ro 'username';
ro 'name';
ls libraries => \ (my $set_libraries), add => \ (my $add_libraries);
no Class::Accessor::Classy;
=head1 NAME
dtRdr::User.pm - user class
=cut
# TODO most of the user and config stuff is just hobbling along at the
# moment and could really use a rethink.
=head1 Constructor
=head2 new
$user = dtRdr::User->new(username => $username);
=cut
sub new {
my $class = shift;
ref($class) and croak("not an object method");
(@_%2) and croak("odd number of elements in argument list");
my (%attr) = @_;
unless(defined($attr{username})) {
$attr{username} = getlogin || getpwuid($<) || "Kilroy";
}
my $self = {
name => 'me',
%attr,
#info => {}, # XXX why not just self?
};
bless($self, $class);
return($self);
} # end subroutine new definition
########################################################################
=head1 Methods
=head2 init_config
$user->init_config($filename);
=cut
sub init_config {
my $self = shift;
my ($filename) = @_;
$self->{config} and croak("can only init once");
die "config requires filename" unless(defined($filename));
# dtRdr::Plugins->init($config); # ?
my $config = $self->{config} = dtRdr::Config->new($filename);
my $basedir = File::Basename::dirname($filename);
my @libraries = $config->libraries;
# XXX should definitely go elsewhere
$self->$set_libraries();
foreach my $info (@libraries) {
# lookup the type
my $library_class = dtRdr::Library->class_by_type($info->type);
my $library = $library_class->new();
# let that be absolute or relative to dirname
my $uri = $info->uri;
unless(File::Spec->file_name_is_absolute($uri)) {
$uri = File::Spec->catfile($basedir, $uri);
}
$library->load_uri($uri);
$self->$add_libraries($library);
}
1;
} # end subroutine init_config definition
########################################################################
=head2 add_library
Add a library and store it.
( run in 0.798 second using v1.01-cache-2.11-cpan-39bf76dae61 )