     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

    <?php
    /**
     * @object EndpointsMulti
     *
     * batch like interface for creating
     * endpoints.
     */

    namespace Catapult;
    final class EndpointsMulti extends CollectionObject {
      /**
       * needs a domainId
       * for init this will
       * be used for all the endpoints
       */
      public function __construct($domain) {
        if ($domain instanceof Domains) {
          $this->domain = $domain->id;
        } elseif (is_string($domain)) {
          $this->domain = $domain;
        }
        $this->done = false;
        $this->queued = 0;
      }
      /**
       * Implementors Note:
       *
       * Multi objects should use a Collection likee
       * interface this will eventually become
       * MultiObject
       *
       * we need to provide getName/1 for collection
       * reasons
       */
      public function getName() {
        return "Endpoints";
      }
      /**
       * push an endpoint
       * by the assoc array or params object
       *
       * @param data: Parameters or array
       */
      public function pushEndpoint(/** polymorphic **/) {
        $data = Ensure::Input(func_get_args());

        $this->data[] = $data->get();
        $this->queued ++;
      }
      public function execute() {
        if ($this->done) {
          throw new CatapultApiException("You've already done this.");
        }
        $created = array();
        foreach ($this->data as $k => $d) {
          $endpoint = new Endpoints;
          $d['domainId'] = $this->domain;
          $created[$k] = $endpoint->create($d);

          $this->queued --;
        }
        $this->done = true;
        return $created;
      }
    }