
Sergey
08.11.2016
12:10:22
возможно ты просто не понял что такое билдеры?

Anton
08.11.2016
12:11:07
фактори методы?

Julia
08.11.2016
12:11:07

Sergey
08.11.2016
12:11:21

Google

Sergey
08.11.2016
12:11:25
билдеры объектов
это часть домена
$user = (new UserBuilder())
->withEmail($faker->email)
->withPassword($faker->password, $encoder)
->withName($faker->name);
->build();
что-то типа такого
билдеры можно хранить, и реюзать. Из одного билдера можно сгенерить тысченку пользователей
можно делать разные билдеры для разных типов сущностей, делать много волшебных вещей
что-то типа настраевоемой фабрики

Anton
08.11.2016
12:13:25
когда поля простые и без сложной валидации, то такой подход ок
а когда пассворд должен быть не меньше 256 символов, содержать одну букву, одну цифру, китайский иероглив и шерсть с жопы дракона - об этом надо фэйкеру сказать, но у доктриновской ентити это прописано в валидации, и хотелось бы не прописывать это в двух местах

Sergey
08.11.2016
12:16:08
> но у доктриновской ентити это прописано в валидации
у меня не прописано. Я не валидирую сущности
я валидирую данные на входе
а потому в фикстурах я волен юзать что захочу
главное что бы инварианты сохранялись

Google

Sergey
08.11.2016
12:16:58
p.s. пароли такие - говно. У меня генерится пароль из словаря в 10К слов 4 рандомных слова
это явно надежнее чем 8 символов рандомных
и проще запоминать

Anton
08.11.2016
12:18:04
тогда еще головняк с типами бд может быть, если на входе норм провалидировалось, но тип у тебя стоит инт, а пришел бигинт (пример с потолка)

Sergey
08.11.2016
12:18:28
если у тебя в сущности бигинт а в базе просто инт - ты проебался)
это должна быть 500-ая ошибка
а не 422

Anton
08.11.2016
12:18:55
public function testNaturalNumbersMagnitude()
{
$this->forAll(
Generator\choose(0, 1000)
)
->then(function($number) {
$this->assertTrue(
$number < 42,
"$number is not less than 42 apparently"
);
});
}
это пример из эриса, хочу такое же, только не с примитивами, а с сущностями
именно поэтому я валидирую сущности, и факапов таких нет)

Sergey
08.11.2016
12:19:25
именно по этому придумали тесты
а валидация сущностей - так себе идея... хотя в одном из чатиков чувак описывал как он юзает валидацию инвариантов
но это не то же самое что валидация типов
да и делал он это через aop
а не через валидатор
и валидация происходила неявно в dev окружении при каждом обращении к сущности
если к этому прибавить property based тестирование - вообще лепота

Anton
08.11.2016
12:21:11
ну есть два ограничение - одно логическое (в домене) а другое техническое (в инфраструктурном уровне)

Sergey
08.11.2016
12:21:30
любое техническое ограничени практически всегда может быть устранено кастылями
bigint тому подтверждение)

Google

Anton
08.11.2016
12:21:45
но нужно своевременно об этом узнать

Sergey
08.11.2016
12:21:51
тесты
проверка инвариантов тестами
тестирование на рандомных данных

Anton
08.11.2016
12:22:09
а я в тестах тупанул, и воткнул инт, и все проходит
так я к тому и клоню
что нужно проперти бэйсед, и для этого мне и хотелось популятор юзать

Sergey
08.11.2016
12:22:50
для проперти бейз иногда полезно описывать сценарии которые должны фэйлиться

Anton
08.11.2016
12:23:05
это для любого тестирования полезно)
а про валидацию инвариантов - есть что глянуть? или это было давно и не правда?)

Sergey
08.11.2016
12:24:14
гугли design by contract

Anton
08.11.2016
12:24:16
я пока очень смутно себе представляю это дело

Sergey
08.11.2016
12:24:19
там это популярная фича
или даже
design by contract aop

Anton
08.11.2016
12:24:35
оке, спасибо
https://github.com/AOP-PHP/AOP для первого знакомства сойдет, или ересь?)

Sergey
08.11.2016
12:41:27
а че не https://github.com/goaop/framework ?
а то пакет что ты скинул не поддерживается уже пару лет точно

Anton
08.11.2016
12:58:37
я пока даже с принципами не знаком, не то что с инструментами)

Google

Fayozjon [CybernatiC]
08.11.2016
12:59:11
Привет ребят
есть поле
'MODE'=>
"8:00 - 20:00"
Необходимо указать сейчас ОТКРЫТО или закрыто

Anton
08.11.2016
13:00:13
@Enleur https://github.com/goaop/goaop-symfony-bundle кстати да))

Fayozjon [CybernatiC]
08.11.2016
13:00:14
если есть наработки пожалуйста поделитесь
спасли бы мне день

Anton
08.11.2016
13:01:06
@CybernatiC_UZ > < - знакомые штуки? (это не смайлик, если что)

Fayozjon [CybernatiC]
08.11.2016
13:01:26
Спасибо кэп

Sergey
08.11.2016
13:01:28

Admin
ERROR: S client not available

Dmitry
08.11.2016
13:03:14
а что сложного то
emplodим строки. получаем 2 времени, создаем 2 даты с нужным временем и проверяем подходит ли текущее время в нужный диапазон

Sergey
08.11.2016
13:03:18
?
$time = \DateTime::createFromFormat('Y-m-d', '1970-01-01');
return $time < $this->openTime || $time > $this->closeTime;

Anton
08.11.2016
13:04:54
@Enleur не, ты датетайм сравниваешь со временем)

Sergey
08.11.2016
13:05:51
https://github.com/simshaun/recurr
не уверен на 100% но можно воспринимать как "открыто/закрыто" как рекурентные события

Sergey
08.11.2016
13:06:14

Sergey
08.11.2016
13:06:58
мой вариант не катит?) а то думать лень)

Fayozjon [CybernatiC]
08.11.2016
13:07:27
Спасибо

Anton
08.11.2016
13:07:57
@Enleur не уверен, что это доктрина, глядя на кусок вывода)

Google

Sergey
08.11.2016
13:08:23
да под рукой был кусок кода, вот и скинул) но я уверен, это доктрина)

Fayozjon [CybernatiC]
08.11.2016
13:09:05

Sergey
08.11.2016
13:09:31
https://gist.github.com/Enleur/1701ff3485fc8ad30b117a625214750a

Sergey
08.11.2016
13:11:12
https://tools.ietf.org/html/rfc2445
че вы выдумываете
походу таки RRULE то что надо

Sergey
08.11.2016
13:12:25
выше скинул полный класс

Sergey
08.11.2016
13:14:33
я про rrule

Sergey
08.11.2016
13:16:35
такая хрень нужна в 1м месте, зачем тащить целую либу для этого?)

Sergey
08.11.2016
13:16:56
ну потому что это стандарт?)
я просто на митинге сижу и не могу думать... насколько адекватное решение использовать для расписания заведения rrule
по идее не вижу минусов сходу
никто не знает толковых булшит бинго?

Fayozjon [CybernatiC]
08.11.2016
13:38:31
$is_open = explode(" - ",$apteka['MODE']);
$apteka['IS_OPEN'] = "closed";
$current_time = time();
$open = $is_open[0];
$closing = $is_open[1];
$date1 = DateTime::createFromFormat('h:i', strtotime($current_time));
$date2 = DateTime::createFromFormat('h:i', strtotime($open));
$date3 = DateTime::createFromFormat('h:i', strtotime($closing));
if($date1 > $date2 && $date1 < $date3)
{
$apteka['IS_OPEN'] = "open";
}

Anton
08.11.2016
14:07:47
apteka ??
*это индусская рука, если что*
@fes0r https://habrahabr.ru/post/191548/ хм, тут чувак всю валидацию в сущности держит, почти та же самая валидация, только придется свои ассерты писать

Sergey
08.11.2016
15:34:14
тогда можно выносить валидацию в аспекты
точнее проверку инвариантов

Fayozjon [CybernatiC]
08.11.2016
18:08:21

Sergey
08.11.2016
20:50:52