=====Общие вопросы=====
==== Мануал по работе с фреймворком 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