Alien-BWIPP
view release on metacpan or search on metacpan
lib/Alien/BWIPP.pm view on Meta::CPAN
sub create_classes {
my ($self) = @_;
my @meta_classes;
my %chunks = %{$self->_chunks};
for my $encoder (@{$self->_encoders}) {
my $prepended = $chunks{HEADER}{LICENCE}{post_script_source_code};
for my $dependency_type (qw(REQUIRES SUGGESTS)) {
if (exists $chunks{ENCODER}{$encoder}{$dependency_type}) {
for my $dependency (split q{ }, $chunks{ENCODER}{$encoder}{$dependency_type}) {
for my $resource_type (qw(RENDERER ENCODER RESOURCE)) {
if (exists $chunks{$resource_type}{$dependency}{post_script_source_code}) {
$prepended .= $chunks{$resource_type}{$dependency}{post_script_source_code};
}
}
}
}
}
my $class_name = $self->meta->name . q{::} . $encoder;
my $meta_class = Moose::Meta::Class->create($class_name,
superclasses => ['Moose::Object'],);
for my $attribute_name (keys %{$chunks{ENCODER}{$encoder}}) {
my $attribute_value = $chunks{ENCODER}{$encoder}{$attribute_name};
$attribute_value = dclone($attribute_value) if ref $attribute_value;
$attribute_value = $prepended . $attribute_value
if 'post_script_source_code' eq $attribute_name;
$meta_class->add_attribute($attribute_name =>
(is => 'ro', default => sub {return $attribute_value;},));
}
push @meta_classes, $meta_class;
}
$self->encoders_meta_classes([@meta_classes]);
return;
}
sub import {
my ($class) = @_;
$class->new->create_classes;
}
1;
__END__
=encoding UTF-8
=head1 NAME
Alien::BWIPP - Barcode Writer in Pure PostScript
=head1 VERSION
This document describes C<Alien::BWIPP> version C<0.007>. It is based on
I<Barcode Writer in Pure PostScript> version C<2014-07-30-1>.
=head1 SYNOPSIS
use Alien::BWIPP;
say $_->name for @{Alien::BWIPP->encoders_meta_classes};
=head1 DESCRIPTION
This modules builds encoder classes from PostScript source.
=head1 INTERFACE
=head2 C<import>
Class method, automatically called by L<use>. Creates an instance and calls
L</create_classes>.
=head2 C<create_classes>
Method, builds encoder classes. The generated classes may have the following
attributes:
=over
=item C<post_script_source_code>
Ready to use PostScript source code, concatenated from the encoder source
code and the renderer needed by it.
=item DESC
Human readable description of this encoder. Example:
AusPost 4 State Customer Code
=item EXAM
Example string for this encoder. Example:
0123456789
=item EXOP
Stringified list of example options for this encoder. Example:
includetext includecheck includecheckintext
=item RNDR
Stringified list of renderers needed for this encoder. Example:
renlinear renmatrix
=item REQUIRES
=item SUGGESTS
=back
=head2 C<encoders_meta_classes>
Class Attribute, returns the generated meta classes as
ArrayRef[L<Moose::Meta::Class>].
( run in 0.791 second using v1.01-cache-2.11-cpan-483215c6ad5 )