Spring restdocs условно выделяют необязательные параметры с помощью asciidoc

Я использую spring restdocs для создания документации по моему веб-сайту REST; Я интегрировал эту вещь, и мой html генерируется (плагин maven + asciidoc, resassured apis). Единственная проблема, которая у меня есть, заключается в том, что ifeval либо не работает так, как рекламируется, либо я ошибся.

Мой пользовательский request-fields.snippet выглядит так:

|===
|Path|Type|Description|Optional

{{#fields}}
 |{{#tableCellContent}}
ifeval::["{optional}"=="true"]
   `{{path}}`
endif::[]
ifeval::["{optional}"="false"]
   *`{{path}}`*
endif::[]
  {{/tableCellContent}}
  |{{#tableCellContent}}`{{type}}`{{/tableCellContent}}
  |{{#tableCellContent}}{{description}}{{/tableCellContent}}
  |{{#tableCellContent}}{{optional}}{{/tableCellContent}}

{{/fields}}
|===

«Необязательное» значение в содержимом tablecell отображается правильно («true» или «false» в зависимости от случая), но ifeval не анализируется (и, таким образом, отображается без анализа в окончательном html без ошибок).

Я пробовал разные варианты синтаксиса выражения, но ни один из них не работает; любые намеки на то, что может быть правильным синтаксисом, если таковые имеются? Я думаю об определении пользовательского атрибута и использовании ifndef для получения того же результата, но я бы предпочел использовать существующую поддержку option(), если это возможно.

В соответствии с просьбой я добавляю полученный .adoc

|===
|Path|Type|Description|Optional

|
ifeval::["{optional}"=="true"]
   `name`
endif::[]
ifeval::["{optional}"=="false"]
   *`name`*
endif::[]
|`String`
|Name of the new Axis
|false

|
ifeval::["{optional}"=="true"]
   `description`
endif::[]
ifeval::["{optional}"=="false"]
   *`description`*
endif::[]
|`String`
|Description of the new Axis
|true

|
ifeval::["{optional}"=="true"]
   `tags[]`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[]`*
endif::[]
|`TagDto[]`
|Hierarchical view of axis' tags
|false

|
ifeval::["{optional}"=="true"]
   `tags[].id`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[].id`*
endif::[]
|`Number`
|Id of the tag
|false

|
ifeval::["{optional}"=="true"]
   `tags[].name`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[].name`*
endif::[]
|`String`
|Name of the tag
|false

|
ifeval::["{optional}"=="true"]
   `tags[].children`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[].children`*
endif::[]
|`TagDto[]`
|Child tags for this tag, if any
|true

|===

person Riccardo Cossu    schedule 21.06.2016    source источник
comment
Я только что узнал, что директивы должны быть в начале строки; но даже исправив это, я все равно не получаю правильного результата (все строки имеют одинаковое форматирование, не учитывая необязательное значение)   -  person Riccardo Cossu    schedule 21.06.2016
comment
Одна ошибка, которую вы допустили в приведенном выше, - это =, а не == во втором условии, но это может быть просто опечатка в вопросе. Не могли бы вы поделиться сгенерированным фрагментом .adoc вместо просмотра пользовательского шаблона? Кроме того, как вы включили фрагмент в свой основной файл .adoc?   -  person Andy Wilkinson    schedule 21.06.2016
comment
Да, он включен, и знак = был опечаткой; Я добавил сгенерированный файл adoc. Это, в частности, приводит к тому, что значение пути не печатается. Спасибо.   -  person Riccardo Cossu    schedule 21.06.2016


Ответы (1)


Проблема в вашем пользовательском шаблоне, где вы используете {optional}, а не {{optional}} в макросах ifeval. Это означает, что {optional} не заменяется атрибутом поля optional, и в результате Asciidoctor оценивает либо "{optional}"=="true", либо "{optional}"=="false".

Вам нужно обновить свой шаблон, чтобы использовать {{optional}}:

|===
|Path|Type|Description|Optional

{{#fields}}
 |{{#tableCellContent}}
ifeval::["{{optional}}"=="true"]
   `{{path}}`
endif::[]
ifeval::["{{optional}}"=="false"]
   *`{{path}}`*
endif::[]
  {{/tableCellContent}}
  |{{#tableCellContent}}`{{type}}`{{/tableCellContent}}
  |{{#tableCellContent}}{{description}}{{/tableCellContent}}
  |{{#tableCellContent}}{{optional}}{{/tableCellContent}}

{{/fields}}
|===
person Andy Wilkinson    schedule 21.06.2016
comment
спасибо, я был уверен, что пробовал это раньше, и это не сработало; сегодня утром так и было. Наверное, раньше что-то было не так... - person Riccardo Cossu; 22.06.2016
comment
Ошибка во втором if. Должно быть ifeval::["{{optional}}"=="false"] - person Mateusz; 20.07.2017
comment
Исправлено. Спасибо. - person Andy Wilkinson; 20.07.2017