Completed
Push — master ( e0077d...d8d691 )
by Patrick
02:25
created

LaravelSqsFifoQueueServiceProvider::provides()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 0
cts 5
cp 0
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 0
crap 2
1
<?php
2
3
namespace ShiftOneLabs\LaravelSqsFifoQueue;
4
5
use Illuminate\Support\ServiceProvider;
6
use ShiftOneLabs\LaravelSqsFifoQueue\Queue\Deduplicators\Sqs;
7
use ShiftOneLabs\LaravelSqsFifoQueue\Queue\Deduplicators\Unique;
8
use ShiftOneLabs\LaravelSqsFifoQueue\Queue\Deduplicators\Content;
9
use ShiftOneLabs\LaravelSqsFifoQueue\Queue\Connectors\SqsFifoConnector;
10
11
class LaravelSqsFifoQueueServiceProvider extends ServiceProvider
12
{
13
    /**
14
     * Indicates if loading of the provider is deferred.
15
     *
16
     * @var bool
17
     */
18
    protected $defer = false;
19
20
    /**
21
     * Register any application services.
22
     *
23
     * @return void
24
     */
25 33
    public function register()
26
    {
27 33
        $app = $this->app;
28
29 33
        $this->registerDeduplicators();
30
31
        // Queue is a deferred provider. We don't want to force resolution to provide
32
        // a new driver. Therefore, if the queue has already been resolved, extend
33
        // it now. Otherwise, extend the queue after it has been resolved.
34 33
        if ($app->bound('queue')) {
35 33
            $this->extendManager($app['queue']);
36 33
        } else {
37
            // "afterResolving" not introduced until 5.0. Before 5.0 uses "resolving".
38 1
            if (method_exists($app, 'afterResolving')) {
39
                $app->afterResolving('queue', function ($manager) {
40 1
                    $this->extendManager($manager);
41 1
                });
42 1
            } else {
43
                $app->resolving('queue', function ($manager) {
44
                    $this->extendManager($manager);
45
                });
46
            }
47
        }
48 33
    }
49
50
    /**
51
     * Register everything for the given manager.
52
     *
53
     * @param  \Illuminate\Queue\QueueManager  $manager
54
     *
55
     * @return void
56
     */
57 33
    public function extendManager($manager)
58
    {
59 33
        $this->registerConnectors($manager);
60 33
    }
61
62
    /**
63
     * Register the connectors on the queue manager.
64
     *
65
     * @param  \Illuminate\Queue\QueueManager  $manager
66
     *
67
     * @return void
68
     */
69
    public function registerConnectors($manager)
70
    {
71 33
        $manager->extend('sqs-fifo', function () {
72 5
            return new SqsFifoConnector();
73 33
        });
74 33
    }
75
76
    /**
77
     * Register the default deduplicator methods.
78
     *
79
     * @return void
80
     */
81 33
    public function registerDeduplicators()
82
    {
83 33
        foreach (['Unique', 'Content', 'Sqs'] as $deduplicator) {
84 33
            $this->{"register{$deduplicator}Deduplicator"}();
85 33
        }
86 33
    }
87
88
    /**
89
     * Register the unique deduplicator to treat all messages as unique.
90
     *
91
     * @return void
92
     */
93 33
    public function registerUniqueDeduplicator()
94
    {
95 33
        $this->app->bind('queue.sqs-fifo.deduplicator.unique', Unique::class);
96 33
    }
97
98
    /**
99
     * Register the content deduplicator to treat messages with the same payload as duplicates.
100
     *
101
     * @return void
102
     */
103 33
    public function registerContentDeduplicator()
104
    {
105 33
        $this->app->bind('queue.sqs-fifo.deduplicator.content', Content::class);
106 33
    }
107
108
    /**
109
     * Register the SQS deduplicator for queues with ContentBasedDeduplication enabled on SQS.
110
     *
111
     * @return void
112
     */
113 33
    public function registerSqsDeduplicator()
114
    {
115 33
        $this->app->bind('queue.sqs-fifo.deduplicator.sqs', Sqs::class);
116 33
    }
117
}
118