Это старая версия документа.
Общие вопросы
Мануал по работе с фреймворком ABillS
Форматирование кода
- В форматирование кода не использовать табов только двойные пробелы
- Форматирование if else
if (expr) { ... } else { ... }
- для удобства форматирования кода можно воспользоваться утилитой perltidy
https://support.abills.net.ua/perltidy.cgi
Общий шаблон функций
#********************************************************** =head2 test_function($attr) - Test function Arguments: $attr - Extra attributes TEXT - Some text Returns: TRUE or FALSE Example: test_function({ TEXT => 'Some text' }); =cut #********************************************************** sub test_function { my ($attr) = @_; print "Hello world!"; return 1; }
Рекомендации:
- Отделение шапки функции звёздочками (58 штук).
- Не игнорируйте создание комментариев перед началом функции.
- Называйте функции строчными буквами (маленькими) с разделением нижним подчёркиванием.
- По умолчанию, в случае успешного выполнения функция должна возвращать 1, в случае ошибки - 0.
- Минимизируйте использование глобальных переменных в функциях.
Можно ли использовать HTML в коде ?
Ни в коем случае не используйте HTML в коде управляющей модели, вместо этого используйте обекты ABillS::HTML или шаблоны
Дополнительные модули
загрузка дополнительных модулей Perl осуществляется командой
load_pmodule('Simple::XML');
(Библиотека Misc.pm)
С проверкой ошибок код выглядит так
my $loaded_imager_error = load_pmodule( "Imager", { RETURN => 1 } ); if ( $loaded_imager_error ){ print $loaded_imager_error; return 0; }
Поиск в полях
Для удобства поиска было разработано несколько разделителей
Для цифровых полей
разделитель запятая (,) обозначает AND
пример: искать значения поля 56 и 66
56,66
разделитель запятая (;) обозначает OR
пример: искать значения поля 56 или 66
56;66
Тестирование
Для тестирования системы существует каталог с тестами abills/t
perl web.t
тестирование синтаксиса и стрес тест веб приложений
НЕ ИСПОЛЬЗОВАТЬ НА ПРОДАКШН СИСТЕМЕ
Тест проверки авторизации и аккаунтинга
t/Aaa.t
проверка DHCP авторизации используя преготовленный RAD PAIRS пакет dhcp.discover
perl Aaa.t dhcp_test dhcp.discovery
Тестирование абон платы тарифного плана
perl Tariffs.t FILENAME=tp_test1.tp
FILENAME | файл с описанием тарифного плана и параметров абонента |
---|
В системе также есть специальный скрипт запуска выделенных тестов, которые хранятся в отдельных каталогах Запуск тестов для модуля или папки
Создание демона
use Abills::Base; use Abills::Server; my $ARGV = parse_arguments(\@ARGV); # демонизация и ведение лога if (defined($ARGV->{'-d'})) { my $pid_file = daemonize(); # ведение лога #$Log->log_print('LOG_EMERG', '', "$prog_name Daemonize... $pid_file"); } #Стоп процесса elsif (defined($ARGV->{stop})) { stop_server(); exit; } #проверка не запущен ли уже elsif (make_pid() == 1) { exit; } #Таймаут между запусками 100 секунд my $UPDATE_TIME=100 while (1) { check_activity({ ALL => ($ARGV->{RECONFIG_PERIOD}) ? undef : $all }); sleep $UPDATE_TIME; }
Языковые маркеры
%lang = ();
обязательно писать большими буквами
отображение в шаблонах
_{LANG_MARKER}_
JSON тестирование
Для того чтобы протестировать функцию:
Создайте тест в usr>abills>t
Подключите JSON.t
require "./JSON.t";
Создайте JSON заполнив его. API_KEY текущего администратора
my @test_list = ( { name => 'InfoFields', params => { qindex => 96, API_KEY => '1523615231263123', json => 1 }, result => '', valid_json => 1, schema => { } } );
Передайте данные в функцию json_test
json_test( \@test_list, { TEST_NAME => 'info_fields_new test' });
Выполните ваш тест запустив програму
#prove -v <название теста>.t