/** * Loads result object values from json object * @param string $string json * @return void */ public function unserialize($string) { $data = json_decode($string); foreach ($data as $property => $value) { $method = $this->setterName($property); if (is_numeric($value) && strstr($value, '.')) { $value = floatval($value); } elseif (is_object($value)) { if ($property == 'authorization_information') { $object = new AuthorizationInformation(); $object->unserialize(json_encode($value)); $value = $object; } elseif ($property == 'payment_instrument') { if (!isset($data->payment_method)) { throw new Exception\Runtime('Property "payment_method" is missing'); } if ($data->payment_method == Payment\Create::CARD) { $object = new PaymentInstrumentCard(); } elseif ($data->payment_method == Payment\Create::RECURRING) { $object = new PaymentInstrumentRecurring(); } $object->unserialize(json_encode($value)); $value = $object; } } $this->{$method}($value); } }
function it_maps_recurring_payment_instrument(Payment $payment) { $data = ['payment_method' => 'recurring', 'payment_instrument' => ['payment_id' => 'ba3119f2-9a73-11e4-89d3-123b93f75cba']]; $instrument = new PaymentInstrumentRecurring(); $instrument->setPaymentId('ba3119f2-9a73-11e4-89d3-123b93f75cba'); $payment->setPaymentMethod('recurring')->shouldBeCalled(); $payment->setPaymentInstrument($instrument)->shouldBeCalled(); $this->map($data, $payment); }