Completed
Push — master ( e8bd82...cb1f3e )
by Patrick
17:05
created

LaravelSqsFifoQueueServiceProvider   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 105
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 105
ccs 33
cts 33
cp 1
rs 10
c 0
b 0
f 0
wmc 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A registerContentDeduplicator() 0 3 1
A extendManager() 0 3 1
A registerSqsDeduplicator() 0 3 1
A registerConnectors() 0 4 1
A registerDeduplicators() 0 4 2
A registerUniqueDeduplicator() 0 3 1
A register() 0 20 3
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 1368
    public function register()
26
    {
27 1368
        $app = $this->app;
28
29 1368
        $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 1368
        if ($app->bound('queue')) {
35 1368
            $this->extendManager($app['queue']);
36 432
        } else {
37
            // "afterResolving" not introduced until 5.0. Before 5.0 uses "resolving".
38 38
            if (method_exists($app, 'afterResolving')) {
39
                $app->afterResolving('queue', function ($manager) {
40 28
                    $this->extendManager($manager);
41 28
                });
42 8
            } else {
43
                $app->resolving('queue', function ($manager) {
44 10
                    $this->extendManager($manager);
45 10
                });
46
            }
47
        }
48 1368
    }
49
50
    /**
51
     * Register everything for the given manager.
52
     *
53
     * @param  \Illuminate\Queue\QueueManager  $manager
54
     *
55
     * @return void
56
     */
57 1368
    public function extendManager($manager)
58
    {
59 1368
        $this->registerConnectors($manager);
60 1368
    }
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 1368
        $manager->extend('sqs-fifo', function () {
72 304
            return new SqsFifoConnector();
73 1368
        });
74 1368
    }
75
76
    /**
77
     * Register the default deduplicator methods.
78
     *
79
     * @return void
80
     */
81 1368
    public function registerDeduplicators()
82
    {
83 1368
        foreach (['Unique', 'Content', 'Sqs'] as $deduplicator) {
84 1368
            $this->{"register{$deduplicator}Deduplicator"}();
85 432
        }
86 1368
    }
87
88
    /**
89
     * Register the unique deduplicator to treat all messages as unique.
90
     *
91
     * @return void
92
     */
93 1368
    public function registerUniqueDeduplicator()
94
    {
95 1368
        $this->app->bind('queue.sqs-fifo.deduplicator.unique', Unique::class);
96 1368
    }
97
98
    /**
99
     * Register the content deduplicator to treat messages with the same payload as duplicates.
100
     *
101
     * @return void
102
     */
103 1368
    public function registerContentDeduplicator()
104
    {
105 1368
        $this->app->bind('queue.sqs-fifo.deduplicator.content', Content::class);
106 1368
    }
107
108
    /**
109
     * Register the SQS deduplicator for queues with ContentBasedDeduplication enabled on SQS.
110
     *
111
     * @return void
112
     */
113 1368
    public function registerSqsDeduplicator()
114
    {
115 1368
        $this->app->bind('queue.sqs-fifo.deduplicator.sqs', Sqs::class);
116 1368
    }
117
}
118