Conditions | 1 |
Paths | 1 |
Total Lines | 85 |
Code Lines | 57 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
170 | public function testCanUseRecordEncoder() |
||
171 | { |
||
172 | $data = (object)[ |
||
173 | 'post' => (object)[ |
||
174 | 'id' => 123, |
||
175 | 'title' => 'Lorem ipsum dolor', |
||
176 | 'content' => 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Similique iste voluptatum sequi. Officia dignissimos minus ipsum odit, facilis voluptatibus veniam enim molestiae ipsam quae temporibus porro necessitatibus quia non mollitia!', |
||
177 | 'date' => (new DateTime())->format('d/m/yy H:m'), |
||
178 | 'author' => (object)[ |
||
179 | 'userName' => 'someUser12', |
||
180 | 'displayName' => 'Sam Smith' |
||
181 | ], |
||
182 | 'url' => 'https://www.url.tld/post/123/lorem-ipsum-dolor' |
||
183 | ], |
||
184 | 'comments' => [ |
||
185 | (object)[ |
||
186 | 'post' => 123, |
||
187 | 'author' => (object)[ |
||
188 | 'userName' => 'someUser2', |
||
189 | 'displayName' => 'Jane Jameson', |
||
190 | 'comment' => 'Lorem ipsum dolor sit, amet consectetur adipisicing elit. Hic, illo tempore repudiandae quos vero, vitae aut ullam tenetur officiis accusantium dolor animi ipsa omnis impedit, saepe est harum quisquam sit.', |
||
191 | 'date' => (new DateTime('yesterday'))->format('d/m/yy H:m'), |
||
192 | ] |
||
193 | ], |
||
194 | (object)[ |
||
195 | 'post' => 123, |
||
196 | 'author' => (object)[ |
||
197 | 'userName' => 'someUser22', |
||
198 | 'displayName' => 'Barry Burton', |
||
199 | 'comment' => 'Lorem ipsum dolor sit, amet consectetur adipisicing elit. Hic, illo tempore repudiandae quos vero, vitae aut ullam tenetur officiis accusantium dolor animi ipsa omnis impedit, saepe est harum quisquam sit.', |
||
200 | 'date' => (new DateTime('yesterday'))->format('d/m/yy H:m'), |
||
201 | ] |
||
202 | ] |
||
203 | ], |
||
204 | 'shares' => [ |
||
205 | 'facebook' => 125, |
||
206 | 'twitter' => 1458, |
||
207 | 'instagram' => 8 |
||
208 | ] |
||
209 | ]; |
||
210 | |||
211 | // Simplified post encoder |
||
212 | $encoder = array( |
||
213 | Func\encodeProperty('id', Func\pluckProperty('post', 'id')), |
||
214 | Func\encodeProperty('title', Func\pluckProperty('post', 'title')), |
||
215 | Func\encodeProperty('url', Func\pluckProperty('post', 'url')), |
||
216 | Func\encodeProperty('author', Func\pluckProperty('post', 'author', 'displayName')), |
||
217 | Func\encodeProperty('comments', Func\composeR('count', Func\getProperty('comments'))), |
||
218 | Func\encodeProperty('totalShares', Func\composeR('array_sum', Func\getProperty('shares'))), |
||
219 | Func\encodeProperty('fakeValue', Func\pluckProperty('i', 'do', 'not', 'exist')), |
||
220 | ); |
||
221 | |||
222 | // Create a generic stdClass encoder. |
||
223 | $objectBuilder = Func\recordEncoder(new stdClass()); |
||
224 | $arrayBuilder = Func\recordEncoder([]); |
||
225 | |||
226 | |||
227 | // Populte builders with the encoder. |
||
228 | $simplePostCreatorObject = $objectBuilder(...$encoder); |
||
229 | $simplePostCreatorArray = $arrayBuilder(...$encoder); |
||
230 | |||
231 | // Build the final array/object |
||
232 | $simpleObject = $simplePostCreatorObject($data); |
||
233 | $simpleArray = $simplePostCreatorArray($data); |
||
234 | |||
235 | $this->assertEquals(123, $simpleObject->id); |
||
236 | $this->assertEquals(123, $simpleArray['id']); |
||
237 | |||
238 | $this->assertEquals('Lorem ipsum dolor', $simpleObject->title); |
||
239 | $this->assertEquals('Lorem ipsum dolor', $simpleArray['title']); |
||
240 | |||
241 | $this->assertEquals('https://www.url.tld/post/123/lorem-ipsum-dolor', $simpleObject->url); |
||
242 | $this->assertEquals('https://www.url.tld/post/123/lorem-ipsum-dolor', $simpleArray['url']); |
||
243 | |||
244 | $this->assertEquals('Sam Smith', $simpleObject->author); |
||
245 | $this->assertEquals('Sam Smith', $simpleArray['author']); |
||
246 | |||
247 | $this->assertEquals(2, $simpleObject->comments); |
||
248 | $this->assertEquals(2, $simpleArray['comments']); |
||
249 | |||
250 | $this->assertEquals(1591, $simpleObject->totalShares); |
||
251 | $this->assertEquals(1591, $simpleArray['totalShares']); |
||
252 | |||
253 | $this->assertNull($simpleObject->fakeValue); |
||
254 | $this->assertNull($simpleArray['fakeValue']); |
||
255 | } |
||
303 |