Example #1
0
 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)'));
 }
Example #2
0
 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]);
 }