The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Schema::Data - Abstract class for versioned DB schema datasets.

SYNOPSIS

 package Schema::Data::Foo;
 use base qw(Schema::Data);

 sub _versions_file {
         return 'versions.txt';
 }

 package main;

 my $obj = Schema::Data::Foo->new;
 my @versions = $obj->list_versions;
 my $schema_data = $obj->schema_data;
 my $version = $obj->version;

DESCRIPTION

This is abstract class for versioned schema dataset modules.

METHODS

new

 my $obj = Schema::Data->new(%params);

Constructor.

Returns instance of object.

  • version

    Selected schema data version.

    Default value is last version.

list_versions

 my @versions = $obj->list_versions;

Get sorted list of versions.

Returns array of versions.

schema_data

 my $schema_data = $obj->schema_data;

Get schema data module name.

Returns string.

version

 my $version = $obj->version;

Get version of schema data, which is actial set.

Returns string.

ERRORS

 new():
         Cannot load Schema data module.
                 Module name: %s
                 Error: %s
         Schema data version has bad format.
                 Schema data version: %s
         From Class::Utils::set_params():
                 Unknown parameter '%s'.

         (only in this abstract class)
         We need to implement distribution file with Schema data versions.

EXAMPLE

 use strict;
 use warnings;

 use File::Path qw(make_path);
 use File::Spec::Functions qw(catfile);
 use File::Temp qw(tempdir tempfile);
 use IO::Barf qw(barf);

 # Temp directory for generated module
 my $temp_dir = tempdir(CLEANUP => 1);

 # File with versions.
 my (undef, $versions_file) = tempfile();

 make_path(catfile($temp_dir, 'Schema', 'Data', 'Foo'));

 my $package_schema_foo = catfile($temp_dir, 'Schema', 'Data', 'Foo.pm');
 barf($package_schema_foo, <<"END");
 package Schema::Data::Foo;

 use base qw(Schema::Data);

 use IO::Barf qw(barf);

 sub _versions_file {
         barf('$versions_file', "0.2.0\\n0.1.0\\n0.1.1");

         return '$versions_file';
 }

 1;
 END
 
 my $package_schema_foo_0_1_0 = catfile($temp_dir, 'Schema', 'Data', 'Foo', '0_1_0.pm');
 barf($package_schema_foo_0_1_0, <<'END');
 package Schema::Data::Foo::0_1_0;

 1;
 END

 my $package_schema_foo_0_1_1 = catfile($temp_dir, 'Schema', 'Data', 'Foo', '0_1_1.pm');
 barf($package_schema_foo_0_1_1, <<'END');
 package Schema::Data::Foo::0_1_1;

 1;
 END

 my $package_schema_foo_0_2_0 = catfile($temp_dir, 'Schema', 'Data', 'Foo', '0_2_0.pm');
 barf($package_schema_foo_0_2_0, <<'END');
 package Schema::Data::Foo::0_2_0;

 1;
 END

 unshift @INC, $temp_dir;

 require Schema::Data::Foo;

 my $obj = Schema::Data::Foo->new;

 my @versions = $obj->list_versions;

 print join "\n", @versions;

 unlink $versions_file;

 # Output:
 # 0.1.0
 # 0.1.1
 # 0.2.0

DEPENDENCIES

Class::Utils, English, Error::Pure, Perl6::Slurp.

REPOSITORY

https://github.com/michal-josef-spacek/Schema-Data

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

LICENSE AND COPYRIGHT

© 2022-2023 Michal Josef Špaček

BSD 2-Clause License

VERSION

0.06