Это старая версия документа.


Общие вопросы

Форматирование кода

  • В форматирование кода не использовать табов только двойные пробелы
  • Форматирование 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;
}

Рекомендации:

  1. Отделение шапки функции звёздочками (58 штук).
  2. Не игнорируйте создание комментариев перед началом функции.
  3. Называйте функции строчными буквами (маленькими) с разделением нижним подчёркиванием.
  4. По умолчанию, в случае успешного выполнения функция должна возвращать 1, в случае ошибки - 0.
  5. Минимизируйте использование глобальных переменных в функциях.

Можно ли использовать HTML в коде ?

Ни в коем случае не используйте HTML в коде управляющей модели, вместо этого используйте обекты ABillS::HTML или шаблоны

Дополнительные модули

загрузка дополнительных модулей Perl осуществляется командой

  load_pmodule('Simple::XML');

(Библиотека Misc.pm)

С проверкой ошибок код выглядит так

 my $loaded_imager_result = load_pmodule( "Imager", { RETURN => 1 } );
 if ( $loaded_imager_result ){
   print $loaded_imager_result;
   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 файл с описанием тарифного плана и параметров абонента

Запуск тестов для модуля или папки 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 тестирование

Для того чтобы протестировать функцию:

1 Создайте тест в usr>abills>t
2 Подключите JSON.t
require "./JSON.t";
3 Создайте JSON заполнив его. API_KEY текущего администратора
my @test_list = (
  {
    name       => 'InfoFields',
    params     => {
      qindex       => 96,
      API_KEY      => '1523615231263123',
      json         => 1
    },
    result     => '',
    valid_json => 1,
    schema     => {
 
    }
  }
  );
3 Передайте данные в функцию json_test
json_test(
  \@test_list, 
  { TEST_NAME => 'info_fields_new test' });
4 Выполните ваш тест запустив програму
  #prove -v <название теста(смотри пункт 1)>.t