Skip to content

Commit 66ed303

Browse files
committed
search MR by all projects method
1 parent 802bd7c commit 66ed303

File tree

1 file changed

+93
-53
lines changed

1 file changed

+93
-53
lines changed

lib/Gitlab/Api/MergeRequests.php

Lines changed: 93 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use Symfony\Component\OptionsResolver\Options;
44
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
55
use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException;
6+
use Symfony\Component\OptionsResolver\OptionsResolver;
67

78
class MergeRequests extends AbstractApi
89
{
@@ -36,62 +37,38 @@ class MergeRequests extends AbstractApi
3637
*/
3738
public function all($project_id, array $parameters = [])
3839
{
39-
$resolver = $this->createOptionsResolver();
40-
$datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value) {
41-
return $value->format('c');
42-
};
43-
$resolver->setDefined('iids')
44-
->setAllowedTypes('iids', 'array')
45-
->setAllowedValues('iids', function (array $value) {
46-
return count($value) == count(array_filter($value, 'is_int'));
47-
})
48-
;
49-
$resolver->setDefined('state')
50-
->setAllowedValues('state', ['all', 'opened', 'merged', 'closed'])
51-
;
52-
$resolver->setDefined('order_by')
53-
->setAllowedValues('order_by', ['created_at', 'updated_at'])
54-
;
55-
$resolver->setDefined('sort')
56-
->setAllowedValues('sort', ['asc', 'desc'])
57-
;
58-
$resolver->setDefined('milestone');
59-
$resolver->setDefined('view')
60-
->setAllowedValues('view', ['simple'])
61-
;
62-
$resolver->setDefined('labels');
63-
$resolver->setDefined('created_after')
64-
->setAllowedTypes('created_after', \DateTimeInterface::class)
65-
->setNormalizer('created_after', $datetimeNormalizer)
66-
;
67-
$resolver->setDefined('created_before')
68-
->setAllowedTypes('created_before', \DateTimeInterface::class)
69-
->setNormalizer('created_before', $datetimeNormalizer)
70-
;
40+
$resolver = $this->createGetListOptionsResolver();
7141

72-
$resolver->setDefined('updated_after')
73-
->setAllowedTypes('updated_after', \DateTimeInterface::class)
74-
->setNormalizer('updated_after', $datetimeNormalizer)
75-
;
76-
$resolver->setDefined('updated_before')
77-
->setAllowedTypes('updated_before', \DateTimeInterface::class)
78-
->setNormalizer('updated_before', $datetimeNormalizer)
79-
;
80-
81-
$resolver->setDefined('scope')
82-
->setAllowedValues('scope', ['created_by_me', 'assigned_to_me', 'all'])
83-
;
84-
$resolver->setDefined('author_id')
85-
->setAllowedTypes('author_id', 'integer');
86-
87-
$resolver->setDefined('assignee_id')
88-
->setAllowedTypes('assignee_id', 'integer');
42+
return $this->get($this->getProjectPath($project_id, 'merge_requests'), $resolver->resolve($parameters));
43+
}
8944

90-
$resolver->setDefined('search');
91-
$resolver->setDefined('source_branch');
92-
$resolver->setDefined('target_branch');
45+
/**
46+
* @param array $parameters {
47+
*
48+
* @var int[] $iids Return the request having the given iid.
49+
* @var string $state Return all merge requests or just those that are opened, closed, or
50+
* merged.
51+
* @var string $order_by Return requests ordered by created_at or updated_at fields. Default
52+
* is created_at.
53+
* @var string $sort Return requests sorted in asc or desc order. Default is desc.
54+
* @var string $milestone Return merge requests for a specific milestone.
55+
* @var string $view If simple, returns the iid, URL, title, description, and basic state
56+
* of merge request.
57+
* @var string $labels Return merge requests matching a comma separated list of labels.
58+
* @var \DateTimeInterface $created_after Return merge requests created after the given time (inclusive).
59+
* @var \DateTimeInterface $created_before Return merge requests created before the given time (inclusive).
60+
* }
61+
*
62+
* @throws UndefinedOptionsException If an option name is undefined.
63+
* @throws InvalidOptionsException If an option doesn't fulfill the specified validation rules.
64+
*
65+
* @return mixed
66+
*/
67+
public function search(array $parameters)
68+
{
69+
$resolver = $this->createGetListOptionsResolver();
9370

94-
return $this->get($this->getProjectPath($project_id, 'merge_requests'), $resolver->resolve($parameters));
71+
return $this->get('merge_requests', $resolver->resolve($parameters));
9572
}
9673

9774
/**
@@ -368,4 +345,67 @@ public function awardEmoji($project_id, $mr_iid)
368345
{
369346
return $this->get($this->getProjectPath($project_id, 'merge_requests/'.$this->encodePath($mr_iid).'/award_emoji'));
370347
}
348+
349+
/**
350+
* @return OptionsResolver
351+
*/
352+
private function createGetListOptionsResolver()
353+
{
354+
$resolver = $this->createOptionsResolver();
355+
$datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value) {
356+
return $value->format('c');
357+
};
358+
$resolver->setDefined('iids')
359+
->setAllowedTypes('iids', 'array')
360+
->setAllowedValues('iids', function (array $value) {
361+
return count($value) == count(array_filter($value, 'is_int'));
362+
})
363+
;
364+
$resolver->setDefined('state')
365+
->setAllowedValues('state', ['all', 'opened', 'merged', 'closed'])
366+
;
367+
$resolver->setDefined('order_by')
368+
->setAllowedValues('order_by', ['created_at', 'updated_at'])
369+
;
370+
$resolver->setDefined('sort')
371+
->setAllowedValues('sort', ['asc', 'desc'])
372+
;
373+
$resolver->setDefined('milestone');
374+
$resolver->setDefined('view')
375+
->setAllowedValues('view', ['simple'])
376+
;
377+
$resolver->setDefined('labels');
378+
$resolver->setDefined('created_after')
379+
->setAllowedTypes('created_after', \DateTimeInterface::class)
380+
->setNormalizer('created_after', $datetimeNormalizer)
381+
;
382+
$resolver->setDefined('created_before')
383+
->setAllowedTypes('created_before', \DateTimeInterface::class)
384+
->setNormalizer('created_before', $datetimeNormalizer)
385+
;
386+
387+
$resolver->setDefined('updated_after')
388+
->setAllowedTypes('updated_after', \DateTimeInterface::class)
389+
->setNormalizer('updated_after', $datetimeNormalizer)
390+
;
391+
$resolver->setDefined('updated_before')
392+
->setAllowedTypes('updated_before', \DateTimeInterface::class)
393+
->setNormalizer('updated_before', $datetimeNormalizer)
394+
;
395+
396+
$resolver->setDefined('scope')
397+
->setAllowedValues('scope', ['created_by_me', 'assigned_to_me', 'all'])
398+
;
399+
$resolver->setDefined('author_id')
400+
->setAllowedTypes('author_id', 'integer');
401+
402+
$resolver->setDefined('assignee_id')
403+
->setAllowedTypes('assignee_id', 'integer');
404+
405+
$resolver->setDefined('search');
406+
$resolver->setDefined('source_branch');
407+
$resolver->setDefined('target_branch');
408+
409+
return $resolver;
410+
}
371411
}

0 commit comments

Comments
 (0)