Как проверить массив различных объектов с помощью dry-schema gem

#ruby #validation #dry-rb

#ruby #проверка #dry-rb

Вопрос:

Учитывая, что у меня есть такой объект JSON, имеющий массив различных объектов, таких как:

 {
  "array": [
    {
      "type": "type_1",
      "value": 5
    },
    {
      "type": "type_2",
      "kind": "person"
    }
  ]
}
 

Согласно проверке схемы JSON, я могу проверить эту схему, используя это определение схемы JSOM:

 {
  "type": "object",
  "properties": {
    "array": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "type_1"
                ]
              },
              "value": {
                "type": "integer",
                "enum": [
                  5
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "type_2"
                ]
              },
              "kind": {
                "type": "string",
                "enum": [
                  "person"
                ]
              }
            }
          }
        ]
      }
    }
  }
}

 

Как я могу проверить входной JSON с помощью драгоценного камня dry-schema? У вас есть какие-нибудь идеи?

Комментарии:

1. Вы можете повторно использовать схемы, поэтому настройте схему для элемента, который вы хотите проверить, а затем используйте эту схему в качестве определения, например required(:array).hash(YourSchema) . Docs

2. спасибо за ответ, но это не то, что мне нужно. Что мне нужно, так это проверить массив различных схем объектов. Мне нужно что-то вроде requred(:array).array(Type1Schema | Type2Schema)

3. И почему это не работает? Документы показывают » s1 | s2 — обе или одна из схем должны пройти», что, по-видимому, вас интересует? Если вам нужны более сложные наборы правил, я бы рекомендовал переключиться на dry-validation