Completed
Push — master ( 2b5a03...b6f7ca )
by Olivier
02:19
created

EventTrait::getRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This software may be modified and distributed under the terms
7
 * of the MIT license. See the LICENSE file for details.
8
 */
9
10
namespace Shapin\Stripe\Model\Event;
11
12
use Shapin\Stripe\Exception\InvalidArgumentException;
13
use Shapin\Stripe\Model\LivemodeTrait;
14
use Shapin\Stripe\Model\MetadataTrait;
15
use Shapin\Stripe\Model\MetadataCollection;
16
use Shapin\Stripe\Model\Account\Account;
17
use Shapin\Stripe\Model\Balance\Balance;
18
use Shapin\Stripe\Model\BankAccount\BankAccount;
19
use Shapin\Stripe\Model\Card\Card;
20
use Shapin\Stripe\Model\Charge\Charge;
21
use Shapin\Stripe\Model\Coupon\Coupon;
22
use Shapin\Stripe\Model\Customer\Customer;
23
use Shapin\Stripe\Model\Discount\Discount;
24
use Shapin\Stripe\Model\Invoice\Invoice;
25
use Shapin\Stripe\Model\Invoice\LineItem as InvoiceItem;
26
use Shapin\Stripe\Model\Plan\Plan;
27
use Shapin\Stripe\Model\Product\Product;
28
use Shapin\Stripe\Model\Refund\Refund;
29
use Shapin\Stripe\Model\Source\Source;
30
use Shapin\Stripe\Model\Subscription\Subscription;
31
use Shapin\Stripe\Model\Transfer\Transfer;
32
33
trait EventTrait
34
{
35
    use LivemodeTrait, MetadataTrait;
36
37
    /**
38
     * @var string
39
     */
40
    protected $id;
41
42
    /**
43
     * @var string
44
     */
45
    protected $apiVersion;
46
47
    /**
48
     * @var \DateTimeImmutable
49
     */
50
    protected $createdAt;
51
52
    /**
53
     * @var int
54
     */
55
    protected $pendingWebhooks;
56
57
    /**
58
     * @var ?Request
59
     */
60
    protected $request;
61
62
    /**
63
     * @var string
64
     */
65
    protected $type;
66
67
    /**
68
     * @var ?Account
69
     */
70
    private $account;
71
72
    /**
73
     * @var ?Balance
74
     */
75
    private $balance;
76
77
    /**
78
     * @var ?BankAccount
79
     */
80
    private $bankAccount;
81
82
    /**
83
     * @var ?Card
84
     */
85
    private $card;
86
87
    /**
88
     * @var ?Charge
89
     */
90
    private $charge;
91
92
    /**
93
     * @var ?Coupon
94
     */
95
    private $coupon;
96
97
    /**
98
     * @var ?Customer
99
     */
100
    private $customer;
101
102
    /**
103
     * @var ?Discount
104
     */
105
    private $discount;
106
107
    /**
108
     * @var ?Invoice
109
     */
110
    private $invoice;
111
112
    /**
113
     * @var ?InvoiceItem
114
     */
115
    private $invoiceItem;
116
117
    /**
118
     * @var ?Plan
119
     */
120
    protected $plan;
121
122
    /**
123
     * @var ?Product
124
     */
125
    protected $product;
126
127
    /**
128
     * @var ?Refund
129
     */
130
    protected $refund;
131
132
    /**
133
     * @var ?Source
134
     */
135
    protected $source;
136
137
    /**
138
     * @var ?Subscription
139
     */
140
    private $subscription;
141
142
    /**
143
     * @var ?Transfer
144
     */
145
    private $transfer;
146
147
    /**
148
     * @var array
149
     */
150
    private $previousAttributes;
151
152 58
    private function __construct()
153
    {
154 58
    }
155
156 58
    public static function createFromArray(array $data): self
157
    {
158 58
        $model = new self();
159 58
        $model->id = $data['id'];
160 58
        $model->apiVersion = $data['api_version'];
161 58
        $model->createdAt = new \DateTimeImmutable('@'.$data['created']);
162 58
        $model->live = (bool) $data['livemode'];
163 58
        $model->metadata = MetadataCollection::createFromArray($data['metadata'] ?? []);
0 ignored issues
show
Documentation Bug introduced by
It seems like \Shapin\Stripe\Model\Met...'metadata'] ?? array()) of type object<self> is incompatible with the declared type object<Shapin\Stripe\Model\MetadataCollection> of property $metadata.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
164 58
        $model->pendingWebhooks = (int) $data['pending_webhooks'];
165 58
        $model->request = isset($data['request']) ? Request::createFromArray($data['request']) : null;
166 58
        $model->type = $data['type'];
167 58
        $model->previousAttributes = $data['data']['previous_attributes'] ?? [];
168
169 58
        if ('invoice.upcoming' === $data['type']) {
170 1
            return $model;
171
        }
172
173 57
        $object = $data['data']['object']['object'];
174 57
        switch ($object) {
175 57
            case 'account':
176 1
                $model->account = Account::createFromArray($data['data']['object']);
177 1
                break;
178 56
            case 'balance':
179 1
                $model->balance = Balance::createFromArray($data['data']['object']);
180 1
                break;
181 55
            case 'bank_account':
182 4
                $model->bankAccount = BankAccount::createFromArray($data['data']['object']);
183 4
                break;
184 51
            case 'card':
185
                $model->card = Card::createFromArray($data['data']['object']);
186
                break;
187 51
            case 'charge':
188 7
                $model->charge = Charge::createFromArray($data['data']['object']);
189 7
                break;
190 44
            case 'coupon':
191 3
                $model->coupon = Coupon::createFromArray($data['data']['object']);
192 3
                break;
193 41
            case 'customer':
194 3
                $model->customer = Customer::createFromArray($data['data']['object']);
195 3
                break;
196 38
            case 'discount':
197 3
                $model->discount = Discount::createFromArray($data['data']['object']);
198 3
                break;
199 35
            case 'invoice':
200 9
                $model->invoice = Invoice::createFromArray($data['data']['object']);
201 9
                break;
202 26
            case 'invoiceitem':
203 3
                $model->invoiceItem = InvoiceItem::createFromArray($data['data']['object']);
204 3
                break;
205 23
            case 'plan':
206 3
                $model->plan = Plan::createFromArray($data['data']['object']);
207 3
                break;
208 20
            case 'product':
209 3
                $model->product = Product::createFromArray($data['data']['object']);
210 3
                break;
211 17
            case 'refund':
212 1
                $model->refund = Refund::createFromArray($data['data']['object']);
213 1
                break;
214 16
            case 'source':
215 9
                $model->source = Source::createFromArray($data['data']['object']);
216 9
                break;
217 7
            case 'subscription':
218 4
                $model->subscription = Subscription::createFromArray($data['data']['object']);
219 4
                break;
220 3
            case 'transfer':
221 3
                $model->transfer = Transfer::createFromArray($data['data']['object']);
222 3
                break;
223
            default:
224
                throw new InvalidArgumentException("Unable to process event data: Unknown object $object");
225
        }
226
227 57
        return $model;
228
    }
229
230
    public function getId(): string
231
    {
232
        return $this->id;
233
    }
234
235
    public function getApiVersion(): string
236
    {
237
        return $this->apiVersion;
238
    }
239
240
    public function getCreatedAt(): \DateTimeImmutable
241
    {
242
        return $this->createdAt;
243
    }
244
245
    public function getPendingWebhooks(): int
246
    {
247
        return $this->pendingWebhooks;
248
    }
249
250
    public function getRequest(): ?Request
251
    {
252
        return $this->request;
253
    }
254
255 58
    public function getType(): string
256
    {
257 58
        return $this->type;
258
    }
259
}
260