Учитывая что-то вроде этого:
hey = {
some_key: {
type: :object,
properties: {
id: { type: :string, example: '123', description: 'Id' },
created_at: { type: :string, example: '2019-02-14 14:13:55'},
updated_at: { type: :string, example: '2019-02-14 14:13:55'},
type: { type: :string, example: 'something', description: 'Resource type' },
token: { type: :string, example: 'token', description: 'Some description of token' }
}
}
}
Я хотел бы пройтись по всем ключам, пока не найду один с именем properties
, а затем изменить его содержимое таким образом, чтобы ключи стали значением ключа description
, если он не выходит из своего вложенного хэша.
Так что для примера выше, хеш будет выглядеть так:
hey = {
some_key: {
type: :object,
properties: {
id: { type: :string, example: '123', description: 'Id' },
created_at: { type: :string, example: '2019-02-14 14:13:55', description: 'Created At'},
updated_at: { type: :string, example: '2019-02-14 14:13:55', description: 'Updated At'},
type: { type: :string, example: 'something', description: 'Resource type' },
token: { type: :string, example: 'token', description: 'Some description of token' }
}
}
}
created_at
и updated_at
не имели описания.
Он также должен обрабатывать, если, например, token
имеет свойство properties
.
Я придумала решение, которое работает, но мне действительно интересно, как я могу его улучшить?
Мое решение ниже:
def add_descriptions(hash)
return unless hash.is_a?(Hash)
hash.each_pair do |key, value|
if key == :properties
value.each do |attr, props|
if props[:description].nil?
props.merge!(description: attr.to_s)
end
end
end
add_descriptions(value)
end
end