Skip to content

Commit 5ecb625

Browse files
committed
refactor(Message): Migrate configureOptionsResolver to nested method
- Refactored multiple message classes to replace configureOptionsResolver with a nested method. - Improved code organization and readability by encapsulating option definitions. - Ensured consistent structure across message types for better maintainability.
1 parent c469339 commit 5ecb625

File tree

14 files changed

+342
-274
lines changed

14 files changed

+342
-274
lines changed

src/Chanify/Messages/TextMessage.php

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,21 @@ class TextMessage extends Message
5757
'actions' => [],
5858
];
5959

60-
protected function configureOptionsResolver(OptionsResolver $optionsResolver): void
60+
/**
61+
* @return array<string, \Closure(OptionsResolver $optionsResolver, OptionsResolver $parentOptionsResolver): void>
62+
*/
63+
protected function nested(): array
6164
{
62-
$optionsResolver->setOptions('timeline', static function (OptionsResolver $optionsResolver): void {
63-
$optionsResolver
64-
->setDefined([
65-
'code',
66-
'timestamp',
67-
'items',
68-
])
69-
->setAllowedTypes('items', 'array');
70-
});
65+
return [
66+
'timeline' => static function (OptionsResolver $optionsResolver): void {
67+
$optionsResolver
68+
->setDefined([
69+
'code',
70+
'timestamp',
71+
'items',
72+
])
73+
->setAllowedTypes('items', 'array');
74+
},
75+
];
7176
}
7277
}

src/DingTalk/Messages/BtnsActionCardMessage.php

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,21 @@ public function addBtn(array $btn): self
5353
return $this;
5454
}
5555

56-
protected function configureOptionsResolver(OptionsResolver $optionsResolver): void
56+
/**
57+
* @return array<string, \Closure(OptionsResolver $optionsResolver, OptionsResolver $parentOptionsResolver): void>
58+
*/
59+
protected function nested(): array
5760
{
58-
$optionsResolver->setOptions('btns', static function (OptionsResolver $optionsResolver): void {
59-
$optionsResolver
60-
->setPrototype(true)
61-
->setDefined([
62-
'title',
63-
'actionURL',
64-
]);
65-
});
61+
return [
62+
'btns' => static function (OptionsResolver $optionsResolver): void {
63+
$optionsResolver
64+
->setPrototype(true)
65+
->setDefined([
66+
'title',
67+
'actionURL',
68+
]);
69+
},
70+
];
6671
}
6772

6873
protected function type(): string

src/DingTalk/Messages/FeedCardMessage.php

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,22 @@ public function addLink(array $link): self
4747
return $this;
4848
}
4949

50-
protected function configureOptionsResolver(OptionsResolver $optionsResolver): void
50+
/**
51+
* @return array<string, \Closure(OptionsResolver $optionsResolver, OptionsResolver $parentOptionsResolver): void>
52+
*/
53+
protected function nested(): array
5154
{
52-
$optionsResolver->setOptions('links', static function (OptionsResolver $optionsResolver): void {
53-
$optionsResolver
54-
->setPrototype(true)
55-
->setDefined([
56-
'title',
57-
'messageURL',
58-
'picURL',
59-
]);
60-
});
55+
return [
56+
'links' => static function (OptionsResolver $optionsResolver): void {
57+
$optionsResolver
58+
->setPrototype(true)
59+
->setDefined([
60+
'title',
61+
'messageURL',
62+
'picURL',
63+
]);
64+
},
65+
];
6166
}
6267

6368
protected function type(): string

src/Discord/Messages/Message.php

Lines changed: 89 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -74,92 +74,97 @@ public function addEmbed(array $embed): self
7474
return $this;
7575
}
7676

77-
protected function configureOptionsResolver(OptionsResolver $optionsResolver): void
77+
/**
78+
* @return array<string, \Closure(OptionsResolver $optionsResolver, OptionsResolver $parentOptionsResolver): void>
79+
*/
80+
protected function nested(): array
7881
{
79-
$optionsResolver->setOptions('embeds', static function (OptionsResolver $optionsResolver): void {
80-
$optionsResolver
81-
->setPrototype(true)
82-
->setDefined([
83-
'title',
84-
'type',
85-
'description',
86-
'url',
87-
'timestamp',
88-
'color',
89-
'footer',
90-
'image',
91-
'thumbnail',
92-
'video',
93-
'provider',
94-
'author',
95-
'fields',
96-
])
97-
->setNormalizer('color', static fn (
98-
OptionsResolver $_,
99-
int|string $value
100-
): float|int => \is_int($value) ? $value : hexdec($value))
101-
->setAllowedTypes('footer', 'array')
102-
->setOptions('footer', static function (OptionsResolver $optionsResolver): void {
103-
$optionsResolver->setDefined([
104-
'text',
105-
'icon_url',
106-
'proxy_icon_url',
107-
]);
108-
})
109-
->setAllowedTypes('image', 'array')
110-
->setOptions('image', static function (OptionsResolver $optionsResolver): void {
111-
$optionsResolver->setDefined([
112-
'url',
113-
'proxy_url',
114-
'height',
115-
'width',
116-
]);
117-
})
118-
->setAllowedTypes('thumbnail', 'array')
119-
->setOptions('thumbnail', static function (OptionsResolver $optionsResolver): void {
120-
$optionsResolver->setDefined([
121-
'url',
122-
'proxy_url',
123-
'height',
124-
'width',
125-
]);
126-
})
127-
->setAllowedTypes('video', 'array')
128-
->setOptions('video', static function (OptionsResolver $optionsResolver): void {
129-
$optionsResolver->setDefined([
82+
return [
83+
'embeds' => static function (OptionsResolver $optionsResolver): void {
84+
$optionsResolver
85+
->setPrototype(true)
86+
->setDefined([
87+
'title',
88+
'type',
89+
'description',
13090
'url',
131-
'proxy_url',
132-
'height',
133-
'width',
134-
]);
135-
})
136-
->setAllowedTypes('provider', 'array')
137-
->setOptions('provider', static function (OptionsResolver $optionsResolver): void {
138-
$optionsResolver->setDefined([
139-
'name',
140-
'url',
141-
]);
142-
})
143-
->setAllowedTypes('author', 'array')
144-
->setOptions('author', static function (OptionsResolver $optionsResolver): void {
145-
$optionsResolver->setDefined([
146-
'name',
147-
'url',
148-
'icon_url',
149-
'proxy_icon_url',
150-
]);
151-
})
152-
->setAllowedTypes('fields', 'array')
153-
->setOptions('fields', static function (OptionsResolver $optionsResolver): void {
154-
$optionsResolver
155-
->setPrototype(true)
156-
->setDefined([
91+
'timestamp',
92+
'color',
93+
'footer',
94+
'image',
95+
'thumbnail',
96+
'video',
97+
'provider',
98+
'author',
99+
'fields',
100+
])
101+
->setNormalizer('color', static fn (
102+
OptionsResolver $_,
103+
int|string $value
104+
): float|int => \is_int($value) ? $value : hexdec($value))
105+
->setAllowedTypes('footer', 'array')
106+
->setOptions('footer', static function (OptionsResolver $optionsResolver): void {
107+
$optionsResolver->setDefined([
108+
'text',
109+
'icon_url',
110+
'proxy_icon_url',
111+
]);
112+
})
113+
->setAllowedTypes('image', 'array')
114+
->setOptions('image', static function (OptionsResolver $optionsResolver): void {
115+
$optionsResolver->setDefined([
116+
'url',
117+
'proxy_url',
118+
'height',
119+
'width',
120+
]);
121+
})
122+
->setAllowedTypes('thumbnail', 'array')
123+
->setOptions('thumbnail', static function (OptionsResolver $optionsResolver): void {
124+
$optionsResolver->setDefined([
125+
'url',
126+
'proxy_url',
127+
'height',
128+
'width',
129+
]);
130+
})
131+
->setAllowedTypes('video', 'array')
132+
->setOptions('video', static function (OptionsResolver $optionsResolver): void {
133+
$optionsResolver->setDefined([
134+
'url',
135+
'proxy_url',
136+
'height',
137+
'width',
138+
]);
139+
})
140+
->setAllowedTypes('provider', 'array')
141+
->setOptions('provider', static function (OptionsResolver $optionsResolver): void {
142+
$optionsResolver->setDefined([
143+
'name',
144+
'url',
145+
]);
146+
})
147+
->setAllowedTypes('author', 'array')
148+
->setOptions('author', static function (OptionsResolver $optionsResolver): void {
149+
$optionsResolver->setDefined([
157150
'name',
158-
'value',
159-
'inline',
160-
])
161-
->setAllowedTypes('inline', 'bool');
162-
});
163-
});
151+
'url',
152+
'icon_url',
153+
'proxy_icon_url',
154+
]);
155+
})
156+
->setAllowedTypes('fields', 'array')
157+
->setOptions('fields', static function (OptionsResolver $optionsResolver): void {
158+
$optionsResolver
159+
->setPrototype(true)
160+
->setDefined([
161+
'name',
162+
'value',
163+
'inline',
164+
])
165+
->setAllowedTypes('inline', 'bool');
166+
});
167+
},
168+
];
164169
}
165170
}

0 commit comments

Comments
 (0)