| Conditions | 19 | 
| Paths | 1024 | 
| Total Lines | 71 | 
| 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 | ||
| 60 | public function search($query, array $options = []) | ||
| 61 |     { | ||
| 62 | // Max number of records to fetch. Set to 0 to fetch all. | ||
| 63 |         $limit = array_key_exists('limit', $options) ? $options['limit'] : 0; | ||
| 64 | |||
| 65 | // Set to true to do a phrase search | ||
| 66 |         $phrase = array_key_exists('phrase', $options) ? $options['phrase'] : false; | ||
| 67 | |||
| 68 | // Set to true to expand all query results to full records. | ||
| 69 | // Please note that this will make queries significantly slower! | ||
| 70 |         $expand = array_key_exists('expand', $options) ? $options['expand'] : false; | ||
| 71 | |||
| 72 | // Number of records to fetch each batch. Usually no need to change this. | ||
| 73 |         $batchSize = array_key_exists('batchSize', $options) ? $options['batchSize'] : 10; | ||
| 74 | |||
| 75 |         if ($limit != 0 && $limit < $batchSize) { | ||
| 76 | $batchSize = $limit; | ||
| 77 | } | ||
| 78 | |||
| 79 | // The API will throw a 400 response if you include properly encoded spaces, | ||
| 80 | // but underscores work as a substitute. | ||
| 81 |         $query = explode(' AND ', $query); | ||
| 82 |         $query = $phrase ? str_replace(' ', '_', $query) : str_replace(' ', ',', $query); | ||
| 83 |         $query = implode(' AND ', $query); | ||
| 84 | |||
| 85 | $offset = 0; | ||
| 86 |         while (true) { | ||
| 87 |             $response = $this->client->getJSON('/users', ['q' => $query, 'limit' => $batchSize, 'offset' => $offset]); | ||
| 88 | |||
| 89 | // The API sometimes returns total_record_count: -1, with no further error message. | ||
| 90 | // Seems to indicate that the query was not understood. | ||
| 91 | // See: https://github.com/scriptotek/php-alma-client/issues/8 | ||
| 92 |             if ($response->total_record_count == -1) { | ||
| 93 | throw new InvalidQuery($query); | ||
| 94 | } | ||
| 95 | |||
| 96 |             if ($response->total_record_count == 0) { | ||
| 97 | break; | ||
| 98 | } | ||
| 99 | |||
| 100 |             if (!isset($response->user) || empty($response->user)) { | ||
| 101 | // We cannot trust the value in 'total_record_count', so if there are no more records, | ||
| 102 | // we have to assume the result set is depleted. | ||
| 103 | // See: https://github.com/scriptotek/php-alma-client/issues/7 | ||
| 104 | break; | ||
| 105 | } | ||
| 106 | |||
| 107 |             foreach ($response->user as $data) { | ||
| 108 | $offset++; | ||
| 109 | // Contacts without a primary identifier will have the primary_id | ||
| 110 | // field populated with something weird like "no primary id (123456789023)". | ||
| 111 | // We ignore those. | ||
| 112 | // See: https://github.com/scriptotek/php-alma-client/issues/6 | ||
| 113 |                 if (strpos($data->primary_id, 'no primary id') === 0) { | ||
| 114 | continue; | ||
| 115 | } | ||
| 116 | $user = User::make($this->client, $data->primary_id) | ||
| 117 | ->init($data); | ||
| 118 |                 if ($expand) { | ||
| 119 | $user->init(); | ||
| 120 | } | ||
| 121 | yield $user; | ||
| 122 | } | ||
| 123 |             if ($offset >= $response->total_record_count) { | ||
| 124 | break; | ||
| 125 | } | ||
| 126 |             if ($limit != 0 && $offset >= $limit) { | ||
| 127 | break; | ||
| 128 | } | ||
| 129 | } | ||
| 130 | } | ||
| 131 | } | ||
| 132 |