[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/CPANPLUS/Module/ -> Author.pm (source)

   1  package CPANPLUS::Module::Author;
   2  
   3  use strict;
   4  
   5  use CPANPLUS::Error;
   6  use Params::Check               qw[check];
   7  use Locale::Maketext::Simple    Class => 'CPANPLUS', Style => 'gettext';
   8  
   9  local $Params::Check::VERBOSE = 1;
  10  
  11  =pod
  12  
  13  =head1 NAME
  14  
  15  CPANPLUS::Module::Author
  16  
  17  =head1 SYNOPSIS
  18  
  19      my $author = CPANPLUS::Module::Author->new(
  20                      author  => 'Jack Ashton',
  21                      cpanid  => 'JACKASH',
  22                      _id     => INTERNALS_OBJECT_ID,
  23                  );
  24  
  25      $author->cpanid;
  26      $author->author;
  27      $author->email;
  28  
  29      @dists  = $author->distributions;
  30      @mods   = $author->modules;
  31  
  32      @accessors = CPANPLUS::Module::Author->accessors;
  33  
  34  =head1 DESCRIPTION
  35  
  36  C<CPANPLUS::Module::Author> creates objects from the information in the
  37  source files. These can then be used to query on.
  38  
  39  These objects should only be created internally. For C<fake> objects,
  40  there's the C<CPANPLUS::Module::Author::Fake> class.
  41  
  42  =head1 ACCESSORS
  43  
  44  An objects of this class has the following accessors:
  45  
  46  =over 4
  47  
  48  =item author
  49  
  50  Name of the author.
  51  
  52  =item cpanid
  53  
  54  The CPAN id of the author.
  55  
  56  =item email
  57  
  58  The email address of the author, which defaults to '' if not provided.
  59  
  60  =item parent
  61  
  62  The C<CPANPLUS::Internals::Object> that spawned this module object.
  63  
  64  =back
  65  
  66  =cut
  67  
  68  my $tmpl = {
  69      author      => { required => 1 },   # full name of the author
  70      cpanid      => { required => 1 },   # cpan id
  71      email       => { default => '' },   # email address of the author
  72      _id         => { required => 1 },   # id of the Internals object that spawned us
  73  };
  74  
  75  ### autogenerate accessors ###
  76  for my $key ( keys %$tmpl ) {
  77      no strict 'refs';
  78      *{__PACKAGE__."::$key"} = sub {
  79          my $self = shift;
  80          $self->{$key} = $_[0] if @_;
  81          return $self->{$key};
  82      }
  83  }
  84  
  85  sub parent {
  86      my $self = shift;
  87      my $obj  = CPANPLUS::Internals->_retrieve_id( $self->_id );
  88  
  89      return $obj;
  90  }
  91  
  92  =pod
  93  
  94  =head1 METHODS
  95  
  96  =head2 $auth = CPANPLUS::Module::Author->new( author => AUTHOR_NAME, cpanid => CPAN_ID, _id => INTERNALS_ID [, email => AUTHOR_EMAIL] )
  97  
  98  This method returns a C<CPANPLUS::Module::Author> object, based on the given
  99  parameters.
 100  
 101  Returns false on failure.
 102  
 103  =cut
 104  
 105  sub new {
 106      my $class   = shift;
 107      my %hash    = @_;
 108  
 109      ### don't check the template for sanity
 110      ### -- we know it's good and saves a lot of performance
 111      local $Params::Check::SANITY_CHECK_TEMPLATE = 0;
 112  
 113      my $object = check( $tmpl, \%hash ) or return;
 114  
 115      return bless $object, $class;
 116  }
 117  
 118  =pod
 119  
 120  =head2 @mod_objs = $auth->modules()
 121  
 122  Return a list of module objects this author has released.
 123  
 124  =cut
 125  
 126  sub modules {
 127      my $self    = shift;
 128      my $cb      = $self->parent;
 129  
 130      my $aref = $cb->_search_module_tree(
 131                      type    => 'author',
 132                      allow   => [$self],
 133                  );
 134      return @$aref if $aref;
 135      return;
 136  }
 137  
 138  =pod
 139  
 140  =head2 @dists = $auth->distributions()
 141  
 142  Returns a list of module objects representing all the distributions
 143  this author has released.
 144  
 145  =cut
 146  
 147  sub distributions {
 148      my $self = shift;
 149      my %hash = @_;
 150  
 151      local $Params::Check::ALLOW_UNKNOWN = 1;
 152      local $Params::Check::NO_DUPLICATES = 1;
 153  
 154      my $mod;
 155      my $tmpl = {
 156          module  => { default => '', store => \$mod },
 157      };
 158  
 159      my $args = check( $tmpl, \%hash ) or return;
 160  
 161      ### if we didn't get a module object passed, we'll find one ourselves ###
 162      unless( $mod ) {
 163          my @list = $self->modules;
 164          if( @list ) {
 165              $mod = $list[0];
 166          } else {
 167              error( loc( "This author has released no modules" ) );
 168              return;
 169          }
 170      }
 171  
 172      my $file = $mod->checksums( %hash );
 173      my $href = $mod->_parse_checksums_file( file => $file ) or return;
 174  
 175      my @rv;
 176      for my $dist ( keys %$href ) {
 177          my $clone = $mod->clone;
 178  
 179          $clone->package( $dist );
 180          $clone->module(  $clone->package_name );
 181          $clone->version( $clone->package_version );
 182          $clone->mtime(   $href->{$dist}->{'mtime'} );   # release date
 183  
 184          ### .meta files are now also in the checksums file,
 185          ### which means we have to filter out things that dont
 186          ### match our regex
 187          push @rv, $clone if $clone->package_extension;
 188      }
 189  
 190      return @rv;
 191  }
 192  
 193  
 194  =pod
 195  
 196  =head1 CLASS METHODS
 197  
 198  =head2 accessors ()
 199  
 200  Returns a list of all accessor methods to the object
 201  
 202  =cut
 203  
 204  sub accessors { return keys %$tmpl };
 205  
 206  1;
 207  
 208  # Local variables:
 209  # c-indentation-style: bsd
 210  # c-basic-offset: 4
 211  # indent-tabs-mode: nil
 212  # End:
 213  # vim: expandtab shiftwidth=4:


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1