=====Общие вопросы===== ==== Мануал по работе с фреймворком ABillS ==== [[abills:docs:development:manual:ru|Мануал разработчика]] ====Форматирование кода==== * В форматирование кода не использовать табов только двойные пробелы * Форматирование if else if (expr) { ... } else { ... } ===Однострочные или Выражения=== $result = ($total_users == 1) ? "Ok" : "Fail"; * для удобства форматирования кода можно воспользоваться утилитой perltidy https://support.abills.net.ua/perltidy.cgi ====Переменные==== * Пременные указываюстя строчными буками $test, @devices, %switch * Обєкты указываются с заглавной $Test = Test->new(); * Масивы указываюстя в множественном числе my @devices = (); my @users = (); * Хеши в единсвенном %status_list = (); $status_list{disable}=1; Общий шаблон функций #********************************************************** =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** make Жесткий тест работоспособности, никогда его не выполняйте на рабочей системе, чревато пропажей данных perl web.t brutal тестирование синтаксиса и стрес тест веб приложений\\ **НЕ ИСПОЛЬЗОВАТЬ НА ПРОДАКШН СИСТЕМЕ** Тест проверки авторизации и аккаунтинга t/Aaa.t проверка DHCP авторизации используя преготовленный RAD PAIRS пакет **dhcp.discover** perl Aaa.t dhcp_test dhcp.discovery Тестирование абон платы тарифного плана perl Tariffs.t FILENAME=tp_test1.tp ^FILENAME | файл с описанием тарифного плана и параметров абонента | Для задания логина и пароля авторизации используется файл **t/.test** login:password В системе также есть специальный скрипт запуска выделенных тестов, которые хранятся в отдельных каталогах [[abills:docs:development:tester|Запуск тестов для модуля или папки]] ====Создание демона==== 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