Aglio builder does not put object to schema if this object was defined as an array option

96 views Asked by At

Here I'm defining a property in object Page Index called chartControllers which must be an array of objects called chartController.

# Page Index (Page Base)
    - bundle: `site-index` (string, required) - название страницы на фронтенде
    - nav (object, required) - навигационное меню
    - settings: `/settings` (string, required) - юрл по которому будет осуществляться переход на страницу настроек
    - signOut: `/signOut` (string, required) - юрл по которому будет отправляться POST запрос для выхода из аккаунта
    - chart (object, required) - данные для первоначальной отрисовки графика, до выбора каких либо опций
    - title (object, required)
    - text: `выберите модуль` (string, required) - надпись в заголовке графика
    - chartControllers (array[chartController], required) - массив всевозможных опций меню


# chartController
- title: `выбор инстанса` (string, required) - названии типа настройки в меню
- action: `/page` (string, required) - url по которому совершает данная настройка запрос при выборе ее опции(опций)
- name: `page` (string, required) - уникальное человекочитаемое имя настройки на английском языке
- method: `POST` (string, optional) - метод совершения запроса

aglio builder defines object Page Index correctly, with only one peculiar moment - it does not describe options for object `chartController`.

It provides me with the following body, which is fine:

{
  "title": "главная",
  "bundle": "site-index",
  "nav": {
    "settings": "/settings",
    "signOut": "/signOut"
  },
  "chart": {
    "title": {
      "text": "выберите модуль"
    }
  },
  "chartControllers": [
    {
      "title": "выбор инстанса",
      "action": "/page",
      "name": "page",
      "method": "POST"
    }
  ]
}

BUT! It provides me with not complete schema! It does not describe chartController. The schema is the following:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "Название страницы в табе браузера."
    },
    "bundle": {
      "type": "string",
      "description": "название страницы на фронтенде"
    },
    "nav": {
      "type": "object",
      "properties": {
        "settings": {
          "type": "string",
          "description": "юрл по которому будет осуществляться переход на страницу настроек"
        },
        "signOut": {
          "type": "string",
          "description": "юрл по которому будет отправляться POST запрос для выхода из аккаунта"
        }
      },
      "required": [
        "settings",
        "signOut"
      ],
      "description": "навигационное меню"
    },
    "chart": {
      "type": "object",
      "properties": {
        "title": {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "description": "надпись в заголовке графика"
            }
          },
          "required": [
            "text"
          ]
        }
      },
      "required": [
        "title"
      ],
      "description": "данные для первоначальной отрисовки графика, до выбора каких либо опций"
    },
    "chartControllers": {
      "type": "array",
      "description": "массив всевозможных опций меню"
    }
  },
  "required": [
    "title",
    "bundle",
    "nav",
    "chart",
    "chartControllers"
  ]
}

How can I fix that and see chartController to be defined in schema?

1

There are 1 answers

0
cheng10 On

I had the same question as you, after searching the web for a long time, finally I found the solution:

Attributes with array of objects produce incomplete schema #328

Here is the fix for your particular question as an example: (just add 'fixed', although I have know idea where this 'fixed' came from.)

# Page Index (Page Base)
......
- chartControllers (array[chartController], required, fixed) - массив всевозможных опций меню