App-MARC-Leader

 view release on metacpan or  search on metacpan

Leader.pm  view on Meta::CPAN

package App::MARC::Leader;

use strict;
use warnings;

use Class::Utils qw(set_params);
use Getopt::Std;
use MARC::File::XML (BinaryEncoding => 'utf8', RecordFormat => 'MARC21');
use MARC::Leader 0.06;
use MARC::Leader::Print 0.08;
use Unicode::UTF8 qw(encode_utf8);

our $VERSION = 0.11;

# Constructor.
sub new {
	my ($class, @params) = @_;

	# Create object.
	my $self = bless {}, $class;

	# Process parameters.
	set_params($self, @params);

	# Object.
	return $self;
}

# Run.
sub run {
	my $self = shift;

	my $marc_leader;
	# XXX Naive detect of MARC leader before getopts.
	if (defined $ARGV[-1] && length($ARGV[-1]) eq 24) {
		$marc_leader = pop @ARGV;
	}

	# Process arguments.
	$self->{'_opts'} = {
		'a' => undef,
		'd' => 0,
		'f' => undef,
		'h' => 0,
		'l' => undef,
		'v' => undef,
	};
	if (! getopts('adf:hl:v', $self->{'_opts'})
		|| $self->{'_opts'}->{'h'}
		|| (! $self->{'_opts'}->{'f'} && ! defined $marc_leader)) {

		print STDERR "Usage: $0 [-a] [-d] [-f marc_xml_file] [-h] [-l lang_code] [-v] [--version] [leader_string]\n";
		print STDERR "\t-a\t\t\tPrint with ANSI colors (or use NO_COLOR/COLOR env variables).\n";
		print STDERR "\t-d\t\t\tDon't print description.\n";
		print STDERR "\t-f marc_xml_file\tMARC XML file.\n";
		print STDERR "\t-h\t\t\tPrint help.\n";
		print STDERR "\t-l lang_code\t\tISO 639-1 language code (default is from locales).\n";
		print STDERR "\t-v\t\t\tVerbose mode.\n";
		print STDERR "\t--version\t\tPrint version.\n";
		print STDERR "\t[leader_string]\t\tMARC Leader string.\n";
		return 1;
	}

	if ($self->{'_opts'}->{'f'}) {
		my $marc_file = MARC::File::XML->in($self->{'_opts'}->{'f'});
		# XXX Check
		$marc_leader = $marc_file->next->leader;
	}

	# Parse MARC leader.
	my $leader = MARC::Leader->new(
		'verbose' => $self->{'_opts'}->{'v'},
	)->parse($marc_leader);

	# Print information.
	print encode_utf8(scalar MARC::Leader::Print->new(
		'lang' => $self->{'_opts'}->{'l'},
		'mode_ansi' => $self->{'_opts'}->{'a'},
		'mode_desc' => $self->{'_opts'}->{'d'} ? 0 : 1,
	)->print($leader));
	print "\n";

	return 0;
}

1;

__END__

=pod

=encoding utf8

=head1 NAME

App::MARC::Leader - Base class for marc-leader tool.

=head1 SYNOPSIS

 use App::MARC::Leader;

 my $app = App::MARC::Leader->new;
 my $exit_code = $app->run;

=head1 METHODS

=head2 C<new>

 my $app = App::MARC::Leader->new;

Constructor.

Returns instance of object.

=head2 C<run>

 my $exit_code = $app->run;



( run in 2.131 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )