Skip to content

Commit ff4794a

Browse files
authored
Merge pull request #109 from 5am-code/feature/add-database-attributes
add missing database attributes and introduce traits for general attributes
2 parents 34acb4c + 25c97d4 commit ff4794a

File tree

7 files changed

+45
-16
lines changed

7 files changed

+45
-16
lines changed

src/Entities/Blocks/Block.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,10 @@ protected function setResponseData(array $responseData): void
5959

6060
protected function fillFromRaw(): void
6161
{
62-
parent::fillEntityBase();
62+
parent::fillEssentials();
6363
$this->fillType();
6464
$this->fillRawContent();
6565
$this->fillHasChildren();
66-
$this->fillParentAttributes();
67-
$this->fillArchivedAttributes();
68-
$this->fillTimestampableAttributes();
6966
}
7067

7168
private function fillType(): void

src/Entities/Database.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,14 @@ protected function setResponseData(array $responseData): void
9999

100100
private function fillFromRaw()
101101
{
102-
parent::fillEntityBase();
102+
parent::fillEssentials();
103103
$this->fillIcon();
104104
$this->fillCover();
105105
$this->fillTitle();
106106
$this->fillIsInline();
107107
$this->fillDescription();
108108
$this->fillProperties();
109109
$this->fillDatabaseUrl();
110-
$this->fillParentAttributes();
111-
$this->fillArchivedAttributes();
112-
$this->fillTimestampableAttributes();
113110
}
114111

115112
private function fillTitle(): void

src/Entities/Entity.php

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,48 @@ protected function setResponseData(array $responseData): void
7272
$this->responseData = $responseData;
7373
}
7474

75-
protected function fillEntityBase(): void
75+
protected function fillEssentials(): void
7676
{
7777
$this->fillId();
7878
$this->fillObjectType();
79+
$this->fillTraitAttributes();
80+
}
81+
82+
private function fillTraitAttributes(): void
83+
{
84+
$traitMapping = [
85+
'FiveamCode\LaravelNotionApi\Traits\HasTimestamps' => function ($entity) {
86+
$entity->fillTimestampableAttributes();
87+
},
88+
'FiveamCode\LaravelNotionApi\Traits\HasParent' => function ($entity) {
89+
$entity->fillParentAttributes();
90+
},
91+
'FiveamCode\LaravelNotionApi\Traits\HasArchive' => function ($entity) {
92+
$entity->fillArchivedAttributes();
93+
},
94+
];
95+
96+
$traits = $this->class_uses_deep($this);
97+
foreach ($traits as $trait) {
98+
if (Arr::exists($traitMapping, $trait)) {
99+
$traitMapping[$trait]($this);
100+
}
101+
}
102+
}
103+
104+
private function class_uses_deep($class, $autoload = true)
105+
{
106+
$traits = [];
107+
108+
do {
109+
$traits = array_merge(class_uses($class, $autoload), $traits);
110+
} while ($class = get_parent_class($class));
111+
112+
foreach ($traits as $trait => $same) {
113+
$traits = array_merge(class_uses($trait, $autoload), $traits);
114+
}
115+
116+
return array_unique($traits);
79117
}
80118

81119
private function fillId()

src/Entities/Page.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,12 @@ protected function setResponseData(array $responseData): void
111111

112112
private function fillFromRaw(): void
113113
{
114-
parent::fillEntityBase();
114+
parent::fillEssentials();
115115
$this->fillProperties();
116116
$this->fillTitle(); // This has to be called after fillProperties(), since title is provided by properties
117117
$this->fillPageUrl();
118118
$this->fillIcon();
119119
$this->fillCover();
120-
$this->fillParentAttributes();
121-
$this->fillArchivedAttributes();
122-
$this->fillTimestampableAttributes();
123120
}
124121

125122
/**

src/Entities/Properties/Property.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ protected function setResponseData(array $responseData): void
6262

6363
protected function fillFromRaw(): void
6464
{
65-
parent::fillEntityBase();
65+
parent::fillEssentials();
6666
$this->fillType();
6767
$this->fillContent();
6868
}

src/Entities/PropertyItems/SelectItem.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ protected function setResponseData(array $responseData): void
3636

3737
protected function fillFromRaw(): void
3838
{
39-
parent::fillEntityBase();
39+
parent::fillEssentials();
4040
$this->fillName();
4141
$this->fillColor();
4242
}

src/Entities/User.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ protected function setResponseData(array $responseData): void
3737

3838
private function fillFromRaw(): void
3939
{
40-
parent::fillEntityBase();
40+
parent::fillEssentials();
4141
$this->fillName();
4242
$this->fillAvatarUrl();
4343
}

0 commit comments

Comments
 (0)