| Perl-Metrics documentation | Contained in the Perl-Metrics distribution. |
Perl::Metrics::File - A local file to generate metrics for
This class provides objects that link files on the local filesystem to
the main metrics table via their document hex_id (see PPI::Document)
In addition to the general methods provided by Class::DBI, this class has the following additional methods.
The path accessor returns a string which contains the non-relative file
path on the local system.
The checked accessor returns the Unix epoch time for when the hex_id
was last checked for this file.
In the Perl::Metrics system all documents are identified by the hexidecimal MD5 value for their newline-localized contents.
The hex_id accessor returns this id for the file.
The metric accessor finds and returns all ::Metric object
that match the hex_id of the ::File.
The Document method provides a convenient shortcut which will
load the PPI::Document object for the file (while confirming the
hex_id matches).
Returns a PPI::Object or dies on error.
Bugs should be reported via the CPAN bug tracker at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Perl-Metrics
For other issues, contact the author.
Adam Kennedy <adamk@cpan.org>
Copyright 2005 - 2008 Adam Kennedy.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
| Perl-Metrics documentation | Contained in the Perl-Metrics distribution. |
package Perl::Metrics::File;
use strict; use Perl::Metrics (); use PPI::Document (); use base 'Perl::Metrics::CDBI'; use vars qw{$VERSION}; BEGIN { $VERSION = '0.09'; } ##################################################################### # Class::DBI Setup and Accessors
Perl::Metrics::File->table( 'files' ); Perl::Metrics::File->columns( Essential => 'path', # Absolute local filesystem path - '/foo/bar/baz.pm' 'checked', # UNIX epoch time last checked - '1128495103' 'hex_id', # Document MD5 Identifier - 'abcdef1234567890' ); # Add custom deletion cascade Perl::Metrics::File->add_trigger( before_delete => sub { $_[0]->before_delete }, ); sub before_delete { my $self = shift; if ( $self->search( hex_id => $self->hex_id )->count == 1 ) { # We are the last file with this hex_id. # Remove any metrics that were accumulated. $self->metrics->delete_all; } 1; }
sub metrics { my $self = shift; # Apply default search options to those passed my @params = ( hex_id => $self->hex_id, @_ ); unless ( ref($params[-1]) eq 'HASH' ) { # Add standard ordering push @params, { order_by => 'package, name' }; } # Execute the search return wantarray ? Perl::Metrics::Metric->search( @params ) : scalar Perl::Metrics::Metric->search( @params ); }
sub Document { my $self = shift; my $path = $self->path; # Load and check the Document object my $Document = PPI::Document->new( $path ) or Carp::croak("Failed to load Perl document '$path'"); unless ( $Document->hex_id eq $self->hex_id ) { Carp::croak("Document at '$path' fails hex_id match check"); } $Document; } 1;