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 )