-
Notifications
You must be signed in to change notification settings - Fork 1
Описание
Mojolicious::Plugin::AnyData
версия 1.20
Mojolicious::Plugin::AnyData позволяет использовать перл-структуры, такие, как массивы и хэши, подключаясь к ним так, как если бы это была база данных.
use Mojolicious::Plugin::AnyData
sub startup {
my $self = shift;
$self->plugin(any_data => {
load_data => {
cars => [
['id', 'model'],
[ 1, 'Honda'], ],
},
},
helper => 'db',
});
# ... или
$self->plugin(any_data => {
func => ['cars', 'XML', 'cars.xml', 'ad_import'],
});
# ... или
$self->plugin(any_data => {
load_data => 'my_test_data.conf'
});
}
Обязательных параметров, которые нужно указывать в момент подключения плагина, нет. Все данные можно добавить в любой момент времени в любом месте кода. Если вы не укажете имя хелпера, через который будет осуществляться доступ к хендлеру базы данных, он будет назначен по-умолчанию - 'db'.
Чтобы сменить доступ к базе данных с тестовой структуры AnyData на вашу продакшен-модель, достаточно сменить режим вашего приложения на "продакшен".
app->mode('production');
Mojolicious::Plugin::AnyData дает доступ ко всем методам и атрибутам класса DBD::AnyData и DBI.
Этот хелпер создается с именем 'db' или как-то иначе, на ваше усмотрение, для доступа к хендлеру базы данных.
This helper gives access to a plugin instance and provides the following methods:
Этот хелпер осуществляет доступ к экземпляру плагина и позволяет выполнять ряд методов:
It loads data from perl struct (hashref) into the memory. Also, it can support several tables at the same time. You can use this method on startup, like a simple config option:
Загружает данные из perl-структуры (ссылка на хеш) в память. Поддерживает использование нескольких таблиц за раз. Вы можете использовать этот метод в момент подключения плагина:
$self->plugin(any_data => {
load_data => {
artists => [
['id_artist', 'artist_name'],
[ 1, 'Metallica'],
[ 2, 'Dire Staits'],
],
releases => [
['id_release', 'release_name', 'id_artist'],
[ 1, 'Death Magnetic', 1],
[ 2, 'Load', 1],
],
},
});
Или в любом другом месте программы, через хелпер any_data
app->any_data->load_data({
artists => [
['id_artist', 'artist_name'],
[ 1, 'Metallica'],
[ 2, 'Dire Staits'],
],
releases => [
['id_release', 'release_name', 'id_artist'],
[ 1, 'Death Magnetic', 1],
[ 2, 'Load', 1],
],
});
You can also load data stuctures from a separate config, using Mojolicious::Plugin::Config:
Можно даже использовать отдельный конфиг-файл (используется Mojolicious::Plugin::Config для парсинга):
$self->plugin(any_data => {
load_data => 'test_data.conf',
helper => 'db'
});
# или:
app->any_data->load_data('test_data.conf');
Плагин самостоятельно проверяет тип входных параметров и, в случае, если это просто скаляр, использует его в качестве имени конфига для загрузки данных из файла.
It provides a wrapper for the common DBD::AnyData::func method with one change: before loading new data, it will remove the table with the same name from the memory if it already exists.
Осуществляет враппер к методу DBD::AnyData::func, но с одной разницей: перед тем, как загрузить данные, удаляются таблицы, имеющие то же имя, что и загружаемые в этот момент:
$self->plugin(any_data => {
func => ['cars', 'XML', 'cars.xml', 'ad_import'],
});
# или, конечно же
app->any_data->func('cars', 'XML', 'cars.xml', 'ad_import');
Mojolicious, DBI, DBD::AnyData
Александр Пономарев, C<< shootnix@cpan.org >>
Пожалуйста, используйте следующие интерфейсы для багрепортов и предложений: https://github.com/shootnix/Mojolicious-Plugin-AnyData/issues https://github.com/shootnix/Mojolicious-Plugin-AnyData/.