Data::Maker

| Нет комментариев

Есть такой модуль — Data::Maker, с помощью которого возможно готовить наборы тестовых (или, если угодно, фейковых) данных в разных форматах.

Простейший пример по мотивам примера из документации все объясняет:

use v5.10;
use strict;
use Data::Maker;

my $maker = Data::Maker->new(
    record_count => 5,
    fields => [
        {
            name => 'phone',
            format => '+7 \d\d\d \d\d\d-\d\d-\d\d',
        },

    ]
);


while (my $item = $maker->next_record) {
    say $item->phone->value;
}

Эта программа печатает пять телефонных номеров в формате, указанном при создании объекта Data::Maker:

+7 536 209-69-11
+7 119 599-52-63
+7 778 591-94-25
+7 723 863-71-04
+7 894 976-58-35

Теперь более сложный пример. В каждом случайном объекте помимо телефона будут формироваться имя, фамилия, а заодно и дата рождения.

Если номер телефона генерировался по заданной маске, напоминающей регулярное выражение, то логика для остальных полей реализована внутри соответствующих классов, например, Data::Maker::Field::DateTime. Ему, кстати, возможно передать параметры (какие именно, видно в исходнике).

use v5.10;
use strict;
use Data::Maker;
use Data::Maker::Field::Person::FirstName;
use Data::Maker::Field::Person::LastName;
use Data::Maker::Field::DateTime;

my $maker = Data::Maker->new(
    record_count => 10,
    fields => [
        {
            name => 'phone',
            format => '+7 \d\d\d \d\d\d-\d\d-\d\d',
        },
        {
            name => 'firstname',
            class => 'Data::Maker::Field::Person::FirstName',
        },
        {
            name => 'lastname',
            class => 'Data::Maker::Field::Person::LastName',
        },
        {
            name => 'birthday',
            class => 'Data::Maker::Field::DateTime',
            args => {
                start => 1980,
                end => 1990,
            },
        },
    ]
);


while (my $item = $maker->next_record) {
    say $item->firstname->value, ' ',
        $item->lastname->value, "\t",
        $item->phone->value, "\t",
        $item->birthday->value;
}

Результат работы:

Sherrie Webster +7 001 585-82-85        1985-12-07T07:56:59
Opal Merrill    +7 235 817-78-63        1985-07-28T05:10:55
Erik Miles      +7 252 016-71-82        1988-05-30T08:47:48
Darlene Peters  +7 038 976-13-95        1981-12-10T02:53:20
Michael Salinas +7 039 850-43-23        1982-09-22T09:44:26
Sallie Roth     +7 404 102-02-88        1989-04-06T23:47:54
Renee Lowe      +7 975 958-07-91        1981-04-10T23:00:27
Deanna Rocha    +7 442 730-46-48        1987-05-26T15:11:47
Rena Benson     +7 535 737-78-68        1987-12-01T17:11:34
Ella Obrien     +7 064 783-65-38        1986-03-20T11:36:36

Автор честно признается, что скорость работы генератора довольно низкая. Тем не менее, это интересный модуль, который может быть полезен для тестов.

P. S. Moose настолько проникает в разработчика, что даже краткое описание модуля Data::Maker::Field содержит технические детали: a Moose role that is consumed by all Data::Maker field classes; the ones included with Data::Maker and the ones that you write yourself to extend Data::Maker's capabilities.    

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 05.04.2010 17:19. Автор — ash.

Предыдущая запись — Однострочники

Следующая запись — Perl 5.12 и \w

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.