public function test_chunks() { $groups = F\chunks('(){}', ','); $this->assertEquals(['1', '2', '(3,4,5)', '{6,(7,8)}', '9'], $groups('1,2,(3,4,5),{6,(7,8)},9')); $names = F\chunks('""()', ' '); $this->assertEquals(['Foo', '"Bar Baz"', '(Some other name)'], $names('Foo "Bar Baz" (Some other name)')); }
protected function parseObject($text) { $default = null; if (F\head($text) == '[' && F\last($text) == ']') { $text = F\init(F\tail($text)); $default = ''; } $results = []; $count = preg_match_all('/^([a-zA-Z_-]*)\\{([^,a-zA-Z0-9\\[]+)?,?(.*)\\}$/', $text, $results); if ($count < 1) { return null; } $fields = []; if (trim($results[3][0]) != '') { $fields = F\chunks('(){}[]""', $this->fieldsSeparator, $results[3][0]); $fields = F\reduce(function ($results, $item) { $item = $this->doParse(trim($item)); $results[$item->description()] = $item; return $results; }, [], $fields); } $separator = $results[2][0]; if (empty($separator)) { $separator = $this->objectSeparator; } return S::obj($fields, $separator, $default, $results[1][0]); }