Size: a a a

2020 September 10

СП

Сергей Предводителев... in Yii Framework 3
нет, теста нет
источник

СП

Сергей Предводителев... in Yii Framework 3
см. issue примеры
источник

NO

Nex Otaku in Yii Framework 3
А что вы фиксите без теста? Никто даже не проверил, верно ли то что в issue написано?
источник

NO

Nex Otaku in Yii Framework 3
И погнали сразу всё переписывать...
источник

СП

Сергей Предводителев... in Yii Framework 3
тест нельзя написать, чтобы потом пофиксить :)
Там функционал разнесён на две функции
источник

Д

Дмитрий in Yii Framework 3
Тест можно сделать в отдельной ветке и создать PR. Просто не сливать его в master, пока не починят.
источник

СП

Сергей Предводителев... in Yii Framework 3
Тут ведь ситауция не в том, что баг.

Проблема в неоднозначности поведения. Чтобы написать тест, нужно понять КАКОЕ поведение логичное.
источник

СП

Сергей Предводителев... in Yii Framework 3
А если написать тесты на несколько поведений, то какой-то из них всегда НЕ будет отрабатывать :)
источник

СП

Сергей Предводителев... in Yii Framework 3
На текущий момент логика в случае, когда ключ - строка, такая:

• Если есть элемент с таким ключом - вернуть его.
• Если нет элемента с таким ключом - сделать exclude('.', $key) и попытаться вернуть значение из глубин.
• Если не вышло - вернуть значение по умолчанию.

—-

Неявность такой логики появляется вот в таких ситуациях:

$array = [
 'a.b' => ['c' => 1],
 'a' => ['b' => ['c' => 2]],
 'a' => ['b.c' => 3],
];


Разве очевидно, что getVaue($array, 'a.b.c') должен вернуть?
Мне кажется, что нет.
источник

СП

Сергей Предводителев... in Yii Framework 3
PR#50 https://github.com/yiisoft/arrays/pull/50

Позволяет уйти от неявности и меняет логику так:

getValue():

• Если есть элемент с таким ключом - вернуть его.
• Если не вышло - вернуть значение по умолчанию.

getValueByPath() строки с точками разворачивает однозначно в массив и ищет сразу в глубине.

---

И вот такие случаи уже легко отвеить что вернёт getValue(), а что getValueByPath().
Всё становится прозрачно и понятно на мой взгляд - как работают функции и когда какую применять.

$array = [
 'a.b' => ['c' => 1],
 'a' => ['b' => ['c' => 2]],
 'a' => ['b.c' => 3],
];

getValue($array, 'a.b.c'); вернёт null
getValueByPath($array, 'a.b.c'); вернёт 2
источник

NO

Nex Otaku in Yii Framework 3
Сергей Предводителев
тест нельзя написать, чтобы потом пофиксить :)
Там функционал разнесён на две функции
Если тест нельзя написать, то проблемы не существует.
источник

СП

Сергей Предводителев... in Yii Framework 3
Я выше всё написал
источник

NO

Nex Otaku in Yii Framework 3
Закрыл обсуждение? )
источник

СП

Сергей Предводителев... in Yii Framework 3
Пока не вижу  что ещё написать
источник

NO

Nex Otaku in Yii Framework 3
Слушай. Я проверил этот issue.

Там две части. На каждую я написал тест. Первый тест проходит на уже существующем коде, фиксов не требуется. В issue ошибка.

Вторая часть описанная в issue, тест не проходит.

Но это фиксится в четыре строки кода, добавляем в set ту же логику что присутствует в get. И всё замечательно начинает работать, и старые тесты и новые.

Сейчас PR сделаю.
источник

СП

Сергей Предводителев... in Yii Framework 3
Да тесты тут не причём. Вопрос в логике.
источник

СП

Сергей Предводителев... in Yii Framework 3
Проблема вся вот в такой ситуации:

$array = [
 'a.b' => ['c' => 1],
 'a' => ['b' => ['c' => 2]],
 'a' => ['b.c' => 3],
];

Разве очевидно, что getVaue($array, 'a.b.c') должен вернуть?
Мне кажется, что нет.
источник

АН

Александр Некрасов... in Yii Framework 3
Сергей Предводителев
Проблема вся вот в такой ситуации:

$array = [
 'a.b' => ['c' => 1],
 'a' => ['b' => ['c' => 2]],
 'a' => ['b.c' => 3],
];

Разве очевидно, что getVaue($array, 'a.b.c') должен вернуть?
Мне кажется, что нет.
ну вроде раздлелили на 2 метода, или я ошибаюсь ?, 1 работает с . другой как обычно по ключам
источник

СП

Сергей Предводителев... in Yii Framework 3
Александр Некрасов
ну вроде раздлелили на 2 метода, или я ошибаюсь ?, 1 работает с . другой как обычно по ключам
@nex_otaku топит за то, чтобы НЕ разделять и оставить как есть. И проблемы никакой нет. Всё это надуманость и усложнение.
источник

АН

Александр Некрасов... in Yii Framework 3
ну для 1 метода, должно вернуть a.b.c, если нету то a => [b => [c] а потом уже если нету, то a => 'b.c' вроде
источник