razum2um / lurker

📖 The ultimate tool for documenting and testing APIs in Rails
https://lurker.razum2um.me/lurker
MIT License
116 stars 22 forks source link

Json::List, Json::Object – keep attributes order #81

Closed Strech closed 10 years ago

Strech commented 10 years ago

Парсинг YAML:

  1. Назначаются дефолтные атрибуты
  2. Мержатся ключи специфичные текущего Json объекта
  3. Мержатся остальные ключи из YAML

Если не стандартный ключ шел впереди п2, то он помещался вниз после п3


---
foo:
  description: 'Non default property'
  type: array
  items: {}
bar:
  new_property: 'Non default property'
  type: object
  properties: {}

После парсинга и дампинга будет


---
foo:
  type: array
  items: {}
  description: 'Non default property'
bar:
  type: object
  properties: {}
  new_property: 'Non default property'

Требуется назначать атрибуты в том порядке, в котором они идут в файле

Strech commented 10 years ago

@razum2um

Есть пара моментов, которые хочется обсудить.

Во-первых, порядок дефолтных атрибутов для схем.

Сейчас, если пользователь перемешает порядок полей, которые мы «всегда» приписываем схеме, то они будут переставлены:

user:                            | user:
  properties: {}                 |   description: ''
  type: object                   |   type: object
  additionalProperties: false    |   additionalProperties: false
  required: []                   |   required: []
  description: ''                |   properties: {}

Во-вторых, дефолтные атрибуты для одной схемы, могут не включать в себя дефолтные атрибуты от другой схемы.

Поэтому происходит следующее, что не особо логично:

repos:                           | repos:
  description: ''                |   type: object
  type: array                    |   properties: {}
  items: []                      |   description: ''

Есть задумка такого рода - составить список последовательности атрибутов, которая бы нас устроила. И если атрибут не сходит в этот список, то мы помещаем его снизу/сверху дефолтных

Это позволит нам сохранить порядок атрибутов, не давать пользователю стоздавать хаос. Но это не изменит того, что мы таки переставим порядок атрибутов в схеме. Но для стандартных ключей, это будет не плохим выходом из ситуации

razum2um commented 10 years ago

не вижу в 1м ничего плохого. пусть юзер расставляет как есть, мы только добавляем если вдруг нужен дефолт. убирать автоматом ничего не стоит имхо

про 2е не понял

Strech commented 10 years ago

@razum2um Ну, например для списка у нас нет по умолчанию description, но есть для объекта. Поэтому выглядит странно, когда мы для списка расставляя дефолтные помещаем пользовательский description вниз (из-за того, что мы сначала пишем дефолт, потом остальное)

Ясно, ты проедалаешь оставлять схему как есть и если чего-то нет — дописывать в конец, после всех пользовательских атрибутов?

razum2um commented 10 years ago

да, по принципу наименьшего удивления. по идее дописывание будет на групоне после чего надо это просто закоммитить, потом это будет только во время апгрейдов, но я пока их не предвижу