JetSmsServiceProvider   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 12

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 12
dl 0
loc 96
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A boot() 0 5 1
A registerJetSmsClient() 0 25 3
A registerJetSmsService() 0 30 1
A provides() 0 7 1
1
<?php
2
3
namespace NotificationChannels\JetSms;
4
5
use Erdemkeren\JetSms\Http\Clients;
6
use Erdemkeren\JetSms\Http\Responses\JetSmsResponseInterface;
7
use Erdemkeren\JetSms\JetSmsService;
8
use Erdemkeren\JetSms\ShortMessage;
9
use Erdemkeren\JetSms\ShortMessageCollection;
10
use Erdemkeren\JetSms\ShortMessageCollectionFactory;
11
use Erdemkeren\JetSms\ShortMessageFactory;
12
use GuzzleHttp\Client;
13
use Illuminate\Support\ServiceProvider;
14
use UnexpectedValueException;
15
16
/**
17
 * Class JetSmsServiceProvider.
18
 */
19
class JetSmsServiceProvider extends ServiceProvider
20
{
21
    /**
22
     * Indicates if loading of the provider is deferred.
23
     *
24
     * @var bool
25
     */
26
    protected $defer = true;
27
28
    /**
29
     * Bootstrap the application services.
30
     */
31
    public function boot()
32
    {
33
        $this->registerJetSmsClient();
34
        $this->registerJetSmsService();
35
    }
36
37
    /**
38
     * Register the JetSms Client binding with the container.
39
     *
40
     * @return void
41
     */
42
    private function registerJetSmsClient()
43
    {
44
        $this->app->bind(Clients\JetSmsClientInterface::class, function () {
45
            $username = config('services.JetSms.username');
46
            $password = config('services.JetSms.password');
47
            $originator = config('services.JetSms.originator');
48
49
            switch (config('services.JetSms.client', 'http')) {
50
                case 'http':
51
                    $timeout = config('services.JetSms.timeout');
52
                    $endpoint = config('services.JetSms.http.endpoint');
53
                    $client = new Clients\JetSmsHttpClient(
54
                        new Client(['timeout' => $timeout]), $endpoint, $username, $password, $originator);
55
                    break;
56
                case 'xml':
57
                    $endpoint = config('services.JetSms.xml.endpoint');
58
                    $client = new Clients\JetSmsXmlClient($endpoint, $username, $password, $originator);
59
                    break;
60
                default:
61
                    throw new UnexpectedValueException('Unknown JetSms API client has been provided.');
62
            }
63
64
            return $client;
65
        });
66
    }
67
68
    /**
69
     * Register the jet-sms service.
70
     */
71
    private function registerJetSmsService()
72
    {
73
        $beforeSingle = function (ShortMessage $shortMessage) {
74
            event(new Events\SendingMessage($shortMessage));
75
        };
76
77
        $afterSingle = function (JetSmsResponseInterface $response, ShortMessage $shortMessage) {
78
            event(new Events\MessageWasSent($shortMessage, $response));
79
        };
80
81
        $beforeMany = function (ShortMessageCollection $shortMessages) {
82
            event(new Events\SendingMessages($shortMessages));
83
        };
84
85
        $afterMany = function (JetSmsResponseInterface $response, ShortMessageCollection $shortMessages) {
86
            event(new Events\MessagesWereSent($shortMessages, $response));
87
        };
88
89
        $this->app->singleton('jet-sms', function ($app) use ($beforeSingle, $afterSingle, $beforeMany, $afterMany) {
90
            return new JetSmsService(
91
                $app->make(Clients\JetSmsClientInterface::class),
92
                new ShortMessageFactory(),
93
                new ShortMessageCollectionFactory(),
94
                $beforeSingle,
95
                $afterSingle,
96
                $beforeMany,
97
                $afterMany
98
            );
99
        });
100
    }
101
102
    /**
103
     * Get the services provided by the provider.
104
     *
105
     * @return array
106
     */
107
    public function provides()
108
    {
109
        return [
110
            'jet-sms',
111
            Clients\JetSmsClientInterface::class,
112
        ];
113
    }
114
}
115