Overview

Namespaces

  • Copro
    • Adapters
  • Donut
    • Adapters
    • AtomFeed
    • Facebook
    • Instagram
    • PostFeed
    • Twitter

Classes

  • Copro\Adapters\DibiMysqlAdapter
  • Donut\Adapters\DibiMysqlAdapter
  • Donut\Adapters\DibiSqliteAdapter
  • Donut\Adapters\MemoryAdapter
  • Donut\AtomFeed\AtomFeedItem
  • Donut\AtomFeed\ConvertItemToFacebookPost
  • Donut\AtomFeed\ConvertItemToInstagramPost
  • Donut\AtomFeed\ConvertItemToTweet
  • Donut\AtomFeed\FetchNewItems
  • Donut\DefaultCurrentTimeFactory
  • Donut\Facebook\FacebookApi
  • Donut\Facebook\FacebookPost
  • Donut\Facebook\PublishFacebookPost
  • Donut\Helpers
  • Donut\Instagram\InstagramApi
  • Donut\Instagram\InstagramPost
  • Donut\Instagram\PublishInstagramPost
  • Donut\Manager
  • Donut\Message
  • Donut\Period
  • Donut\PostFeed\ConvertItemToFacebookPost
  • Donut\PostFeed\ConvertItemToInstagramPost
  • Donut\PostFeed\ConvertItemToTweet
  • Donut\PostFeed\FetchNewItems
  • Donut\PostFeed\PostFeedItem
  • Donut\Processor
  • Donut\ProducerInfo
  • Donut\Queue
  • Donut\Time
  • Donut\Twitter\PublishTweet
  • Donut\Twitter\Tweet
  • Donut\Twitter\TwitterApi

Interfaces

  • Donut\IAdapter
  • Donut\ICurrentTimeFactory
  • Donut\IProducer
  • Donut\IWorker

Exceptions

  • Donut\Exception
  • Donut\InvalidArgumentException
  • Donut\InvalidStateException
  • Overview
  • Namespace
  • Class
  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:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 
<?php

    namespace Donut\Adapters;

    use Donut\IAdapter;
    use Donut\IProducer;
    use Donut\Message;
    use Donut\Time;
    use Nette\Utils\Json;
    use Ramsey\Uuid\Uuid;


    class MemoryAdapter implements IAdapter
    {
        /** @var string */
        private $logFile;

        /** @var Message[] */
        private $messages = array();

        /** @var array  [producerId => Time] */
        private $producers = array();

        /** @var array  [groupId => [key => TRUE]] */
        private $items = array();


        public function __construct($logFile)
        {
            $this->logFile = fopen($logFile, 'w');
        }


        /**
         * {@inheritdoc}
         */
        public function createMessage(Message $message)
        {
            $this->log('Created message', NULL, $message);
            $this->messages[] = $message;
        }


        /**
         * {@inheritdoc}
         */
        public function fetchMessage()
        {
            return array_shift($this->messages);
        }


        /**
         * {@inheritdoc}
         */
        public function markAsDone(Message $message, Time $processed)
        {
            $this->log('Mark as done', NULL, $message);
        }


        /**
         * {@inheritdoc}
         */
        public function markAsFailed(Message $message, Time $processed)
        {
            $this->log('Mark as failed', NULL, $message);
        }


        /**
         * {@inheritdoc}
         */
        public function log($subject, $text = NULL, Message $message = NULL, Time $date)
        {
            fwrite($this->logFile, implode("\n", array(
                '== ' . $date->getValue() . ' =========================================================',
                $subject,
                '-- Text: ---------------------------------------',
                $text,
                '-- Message: ------------------------------------',
                $message ? $message->getId()->toString() : NULL,
                $message ? json_encode($message->getData(), JSON_PRETTY_PRINT) : NULL,
                '',
            )));
        }


        /**
         * {@inheritdoc}
         */
        public function getProducerLastRun(IProducer $producer)
        {
            $id = $this->hashId($producer->getUniqueId());
            return isset($this->producers[$id]) ? $this->producers[$id] : NULL;
        }


        /**
         * {@inheritdoc}
         */
        public function saveProducerLastRun(IProducer $producer, Time $lastrun)
        {
            $id = $this->hashId($producer->getUniqueId());
            $this->producers[$id] = $lastrun;
        }


        /**
         * {@inheritdoc}
         */
        public function existsItem($group, $itemId)
        {
            return isset($this->items[$this->hashId($group)][$this->hashId($itemId)]);
        }


        /**
         * {@inheritdoc}
         */
        public function saveItem($group, $itemId)
        {
            $this->items[$this->hashId($group)][$this->hashId($itemId)] = TRUE;
        }


        /**
         * {@inheritdoc}
         */
        private function hashId($id)
        {
            return md5($id, TRUE);
        }
    }
donut-org/donut v0.8.0 API documentation API documentation generated by ApiGen