The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

NAME

DBIx::DataFactory::Type - the class for defining the rule of inserting data.

SYNOPSIS

use strict;
use Carp;
sub type_name {
return 'Test';
}
sub make_value {
my ($class, %args) = @_;
return 'test';
}
1;

DESCRIPTION

you can define the rule of inserting data as class. you must define the method named type_name and make_value.

type_name is used to identify the class of type when create_factory_method is called. in following example, factory method insert data, defined by DBIx::DataFactory::Type::Test(see synopsis) make_value method, into 'test' column automatically.

$factory_maker->create_factory_method(
method => 'create_factory_data',
table => 'test_factory',
auto_inserted_columns => {
test => {
type => 'Test',
},
},
);

make_value is used to define data for inserting. hash specified in auto_inserted_columns except type is passed to make_value.

$factory_maker->create_factory_method(
method => 'create_factory_data',
table => 'test_factory',
auto_inserted_columns => {
test => {
type => 'Test',
size => 10,
regexp => '[a-z]{10}',
},
},
);

when the above case, make_value will be called in create_factory_data method as following.

DBIx::DataFactory::Type::Test->make_value(
size => 10,
regexp => '[a-z]{10}',
);

DEFINED TYPE

the following type is already defined in this module.

DBIx::DataFactory::Type::Int

random int maker. you can pass size parameter.

$factory_maker->create_factory_method(
method => 'create_factory_data',
table => 'test_factory',
auto_inserted_columns => {
int => {
type => 'Int',
size => 8,
},
},
);

DBIx::DataFactory::Type::Num

random number maker. you can pass size parameter. size means integer part size.

$factory_maker->create_factory_method(
method => 'create_factory_data',
table => 'test_factory',
auto_inserted_columns => {
num => {
type => 'Num',
size => 8,
},
},
);

DBIx::DataFactory::Type::Str

random string maker. you can pass size or regexp parameter.

if size parameter is passed, this maker produce strings like [a-zA-Z0-9]{$size}.

if regexp parameter is passed, this maker produce strings according to passed regular regexp.

$factory_maker->create_factory_method(
method => 'create_factory_data',
table => 'test_factory',
auto_inserted_columns => {
str => {
type => 'Str',
regexp => '[a-z]{20}',
},
},
);

DBIx::DataFactory::Type::Str

returning one of specified set in a random manner.

$factory_maker->create_factory_method(
method => 'create_factory_data',
table => 'test_factory',
auto_inserted_columns => {
set => {
type => 'Set',
set => ['test1', 'test2'],
},
},
);