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

Implemented nullable association using empty #5

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from

Conversation

stekycz
Copy link

@stekycz stekycz commented Feb 27, 2017

Refs #4

@Tharos
Copy link
Owner

Tharos commented Feb 28, 2017

Very nice solution, thank you!

I'm going to push doc update and after that let's merge this. :)

@Tharos Tharos mentioned this pull request Mar 1, 2017
@stekycz stekycz force-pushed the nullable-association branch from 16ea2bc to 5f49ba6 Compare March 1, 2017 19:41
@Tharos Tharos force-pushed the nullable-association branch 3 times, most recently from 3d20766 to 12a6252 Compare March 1, 2017 19:47
@Tharos
Copy link
Owner

Tharos commented Mar 1, 2017

Dovolil jsem si to rebasnout s ohledem na #6.

Autorství úprav jsem samozřejmě zachoval. :)

@stekycz
Copy link
Author

stekycz commented Mar 1, 2017

Stihl jsem udělat už předtím, ale dobře :P

@stekycz stekycz force-pushed the nullable-association branch from 12a6252 to 330005d Compare March 2, 2017 00:28
if ($data === NULL) {
if (!$association[self::INDEX_MULTIPLICITY] && (
$data === NULL
|| ($association[self::INDEX_NULLABLE] && empty($data))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je to drobnost, ale tady používáš space, místo TAB.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A koukám, že jinde občas taky.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed :-)

@stekycz stekycz force-pushed the nullable-association branch from 330005d to 5448ab7 Compare March 2, 2017 08:22
@stekycz stekycz force-pushed the nullable-association branch from 5448ab7 to e2b8b1e Compare March 2, 2017 08:23
@@ -11,6 +11,7 @@ class Entry
const INDEX_ENTRYCLASS = 0;
const INDEX_MULTIPLICITY = 1;
const INDEX_EMBEDDING = 2;
const INDEX_NULLABLE = 3;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Konstanta INDEX_NULLABLE by měla být v doc pro self::$parsedAssociations.


Assert::type(CustomEntries::class, $firstOrderItem->tags);
Assert::type(CustomEntries::class, $lastOrderItem->tags);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tohle se mi nezdá. Přece pokud mám $lastOrderItem->tags definované jako nullable multiple a plním ho "empty" hodnotami, tak by mělo vracet NULL.

Nevím, jaký má smysl nullable ne-multiple fileld, ale pokud nepřekáží, tak by měl pro empty hodnoty asi vracet NULL. Pokud uživatele budou empty hodnoty zajímat, tak by takový field neměl označovat jako nullable.

Pro přehlednost tabulka, jak si myslím, že by to mělo být:

normal nullable multiple nullable multiple
text text text TypeError TypeError
number number number TypeError TypeError
data array Entry Entry Entries Entries
empty(value) empty(value) null TypeError null
null null null TypeError null
empty array empty array null Entries null
0 0 null TypeError null

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, na tom něco bude. Nechal jsem se asi příliš unést tím, že nutím svůj přístup, že každá kolekce by měla být vždy kolekce a nikdy null, ale to by si měl člověk zvolit podle toho, co tam chce mít. Upravím.

}


public function testEmbeddedEntries()
public function provideDataNullableCollection()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vzhledem k tomu, že to vrací stejné "empty" hodnoty jako provideDataNullableRelation(), tak bych oboje sjednotil pod něco jako provideDataNullableValues() nebo tak.

FALSE,
self::INDEX_NULLABLE => !empty($matches[1]),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tady bych možná empty() nahradil výsledkem volání protected funkce isEmpty() (nebo tak nějak), aby si uživatel měl možnost nastavit, jaké hodnoty považuje za ty správně "empty". Dovedu si představit, že asi ne všem se trefíme do use-case.

@@ -101,15 +103,18 @@ public function __get($name)
$this->readEmbeddedEntry($association[self::INDEX_EMBEDDING]) :
$this->readData($name);

if ($data === NULL) {
if (!$association[self::INDEX_MULTIPLICITY] && (
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Banalita, ale nechtělo by takhle složitý if učesat třeba takhle?

		if (
			!$association[self::INDEX_MULTIPLICITY] 
			&& (
				$data === NULL
				|| ($association[self::INDEX_NULLABLE] && empty($data))
			)
		) {

@stekycz
Copy link
Author

stekycz commented Mar 3, 2017

Upraveno dle komentářů od @meridius a rozšířeny testy snad na všechny možné kombinace hodnot a nastavení properties a asociací. Jen mi tam trochu nesedí to, že jakmile je hodnota NULL, tak i "required" asociace může být null. Asi dává smysl, protože nullable přidává spíše "emptynest".

Tak jen přemýšlím o přidání !, aby nemohla být hodnota null vůbec nikdy. Odebrat tu podmínku na null by teď totiž byl BC break. Samozřejmě by tam musela být podmínka, že ! a ? nelze kombinovat :-)

@Tharos
Copy link
Owner

Tharos commented Mar 7, 2017

Ahoj vespolek, jenom chci dát vědět, že tenhle pull budu řešit ASAP… Mám nějaký zdravotní trable, ale jakmile mi bude líp, vše projdu. Snad už tento týden. Díky za trpělivost! :)

@meridius
Copy link
Contributor

meridius commented Mar 7, 2017

@Tharos Děkuju za update a držím palce, ať je ti brzo líp.

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

Successfully merging this pull request may close these issues.

3 participants