—use
strict;
use
warnings;
use
Business::ISBN;
use
Readonly;
Readonly::Array
our
@COVERS
=>
qw(hardback paperback)
;
our
$VERSION
= 0.13;
has
collective
=> (
is
=>
'ro'
,
);
has
cover
=> (
is
=>
'ro'
,
);
has
isbn
=> (
is
=>
'ro'
,
);
has
publisher
=> (
is
=>
'ro'
,
);
has
valid
=> (
is
=>
'ro'
,
);
sub
type {
my
$self
=
shift
;
if
(
$self
->{
'_isbn'
}->as_isbn10->as_string eq
$self
->{
'isbn'
}) {
return
10;
}
else
{
return
13;
}
}
sub
BUILD {
my
$self
=
shift
;
if
(!
defined
$self
->{
'collective'
}) {
$self
->{
'collective'
} = 0;
}
check_bool(
$self
,
'collective'
);
check_required(
$self
,
'isbn'
);
$self
->{
'_isbn'
} = Business::ISBN->new(
$self
->{
'isbn'
});
if
(!
defined
$self
->{
'_isbn'
} || !
$self
->{
'_isbn'
}->is_valid) {
err
"ISBN '$self->{'isbn'}' isn't valid."
;
}
check_isa(
$self
,
'publisher'
,
'MARC::Convert::Wikidata::Object::Publisher'
);
if
(
defined
$self
->{
'cover'
}) {
if
(none {
$self
->{
'cover'
} eq
$_
}
@COVERS
) {
err
"ISBN cover '$self->{'cover'}' isn't valid."
;
}
}
# Check valid.
if
(!
defined
$self
->{
'valid'
}) {
$self
->{
'valid'
} = 1;
}
check_bool(
$self
,
'valid'
);
return
;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
MARC::Convert::Wikidata::Object::ISBN - Bibliographic Wikidata object for ISBN number defined by MARC record.
=head1 SYNOPSIS
use MARC::Convert::Wikidata::Object::ISBN;
my $obj = MARC::Convert::Wikidata::Object::ISBN->new(%params);
my $collective = $obj->collective.
my $cover = $obj->cover;
my $isbn = $obj->isbn;
my $publisher = $obj->publisher;
my $type = $obj->type;
my $valid = $obj->valid;
=head1 METHODS
=head2 C<new>
my $obj = MARC::Convert::Wikidata::Object::ISBN->new(%params);
Constructor.
Returns instance of object.
=over 8
=item * C<collective>
ISBN collective flag.
Parameter means that ISBN is for collection.
Valid value is boolean (0/1).
Default value is 0.
=item * C<cover>
ISBN cover.
Parameter is optional. Valid values are: hardback, paperback
Default value is undef.
=item * C<isbn>
ISBN number.
Parameter is required.
Default value is undef.
=item * C<publisher>
Publishing house object.
Instance of MARC::Convert::Wikidata::Object::Publisher.
Default value is undef.
=item * C<valid>
Flag if ISBN is valid or not.
Default value is 1 (valid),
=back
=head2 C<collective>
my $collective = $obj->collective.
Get collective flag.
Returns bool (0/1).
=head2 C<cover>
my $cover = $obj->cover;
Get ISBN cover.
Returns string.
=head2 C<isbn>
my $isbn = $obj->isbn;
Get ISBN number.
Returns string.
=head2 C<publisher>
my $publisher = $obj->publisher;
Get publishing house name.
Returns instance of MARC::Convert::Wikidata::Object::Publisher.
=head2 C<type>
my $type = $obj->type;
Get type of ISBN number (10 or 13 character length)
Returns number (10 or 13).
=head2 C<valid>
my $valid = $obj->valid;
Get valid flag.
Returns boolean (0/1).
=head1 ERRORS
new():
Parameter 'collective' must be a bool (0/1).
Parameter 'isbn' is required.
ISBN '%s' isn't valid.
ISBN cover '%s' isn't valid.
From check_isa():
Parameter 'publisher' must be a 'MARC::Convert::Wikidata::Object::Publisher' object.
From check_bool():
Parameter '%s' must be a bool (0/1).
Value: %s
=head1 EXAMPLE1
=for comment filename=create_and_dump_isbn.pl
use strict;
use warnings;
use Data::Printer;
use MARC::Convert::Wikidata::Object::ISBN;
use MARC::Convert::Wikidata::Object::Publisher;
my $obj = MARC::Convert::Wikidata::Object::ISBN->new(
'isbn' => '978-80-00-05046-1',
'publisher' => MARC::Convert::Wikidata::Object::Publisher->new(
'name' => 'Albatros',
),
);
p $obj;
# Output:
# MARC::Convert::Wikidata::Object::ISBN {
# parents: Mo::Object
# public methods (8):
# BUILD, type
# Error::Pure:
# err
# List::Util:
# none
# Mo::utils:
# check_bool, check_isa, check_required
# Readonly:
# Readonly
# private methods (0)
# internals: {
# collective 0,
# _isbn 978-80-00-05046-1 (Business::ISBN13),
# isbn "978-80-00-05046-1" (dualvar: 978),
# publisher MARC::Convert::Wikidata::Object::Publisher,
# valid 1
# }
# }
=head1 DEPENDENCIES
L<Business::ISBN>,
L<Error::Pure>,
L<Mo>,
L<Mo::utils>,
L<List::Util>,
L<Readonly>.
=head1 SEE ALSO
=over
=item L<MARC::Convert::Wikidata>
Conversion class between MARC record and Wikidata object.
=back
=head1 REPOSITORY
=head1 AUTHOR
Michal Josef Špaček L<mailto:skim@cpan.org>
=head1 LICENSE AND COPYRIGHT
© Michal Josef Špaček 2021-2025
BSD 2-Clause License
=head1 VERSION
0.13
=cut