Perl::Metrics::File - A local file to generate metrics for


Perl-Metrics documentation Contained in the Perl-Metrics distribution.

Index


Code Index:

NAME

Top

Perl::Metrics::File - A local file to generate metrics for

DESCRIPTION

Top

This class provides objects that link files on the local filesystem to the main metrics table via their document hex_id (see PPI::Document)

METHODS

Top

In addition to the general methods provided by Class::DBI, this class has the following additional methods.

path

The path accessor returns a string which contains the non-relative file path on the local system.

checked

The checked accessor returns the Unix epoch time for when the hex_id was last checked for this file.

hex_id

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.

metrics @options

The metric accessor finds and returns all ::Metric object that match the hex_id of the ::File.

Document

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.

SUPPORT

Top

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.

AUTHOR

Top

Adam Kennedy <adamk@cpan.org>

SEE ALSO

Top

Perl::Metrics, PPI

COPYRIGHT

Top


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;