Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Strech opened this issue Aug 22, 2014 · 4 comments
Closed

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

Strech opened this issue Aug 22, 2014 · 4 comments
Assignees
Milestone

Comments

@Strech
Copy link
Collaborator

Strech commented Aug 22, 2014

Парсинг 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 Strech added this to the 0.6.5 milestone Aug 22, 2014
@Strech Strech self-assigned this Aug 22, 2014
@Strech
Copy link
Collaborator Author

Strech commented Aug 25, 2014

@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
Copy link
Owner

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

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

@Strech
Copy link
Collaborator Author

Strech commented Aug 25, 2014

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

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

@razum2um
Copy link
Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants