subcosm/observatory

General Observation Pattern Component

v1.1 2017-04-07 22:09 UTC

This package is not auto-updated.

Last update: 2024-11-10 02:17:41 UTC


README

General Observation Pattern Component

Build Status codecov SensioLabsInsight Code Climate Gittip

What is observatory?

Observatory is a general interface orchestration for observable objects using a container for data transport. It's inspired by the SplObserver implementation of PHP.

What is the goal of observatory?

Providing an easy to use, easy to understand, lightweight event hub to specific implementations without provided methods for each event invoker registration.

How to use it?

Subcosm Observatory is available at Packagist:

# composer require subcosm/observatory ~1.0

Creating the Observable Object

use Subcosm\Observable\{
    ObservableInterface,
    ObservableTrait,
    AbstractObservationContainer as Container
};

class Foo implements ObservableInterface {
    use ObservableTrait;
    
    public function firstAction()
    {
        $message = 'Hello from firstAction!';
    
        $container = new class($this, __METHOD__, $message) extends Container {
            
            protected $message;
            
            public function __construct($object, string $stage, string $message) 
            {
                $this->message = $message;
                
                parent::__construct($object, $stage);
            }
            
            public function getMessage()
            {
                $this->message;
            }
        };
        
        $this->notify($container);
    }
    
    public function secondAction()
    {
        $message = 'Another hello from secondAction!';
            
        $container = new class($this, __METHOD__, $message) extends Container {
            
            protected $message;
            
            public function __construct($object, string $stage, string $message) 
            {
                $this->message = $message;
                
                parent::__construct($object, $stage);
            }
            
            public function getMessage()
            {
                $this->message;
            }
        };
        
        $this->notify($container);
    }
}

Creating an Observer

use Subcosm\Observable\{
    ObserverInterface,
    ObservationContainerInterface as Container
};

class EchoMessageObserver implements ObserverInterface {
    
    public function update(Container $container)
    {
        echo $container->getMessage().PHP_EOL;
    }
    
}

Using the Observable and Observer

$observable = new Foo;

$observer = new EchoMessageObserver;

$observable->attach($observer);

$observable->firstAction();
$observable->secondAction();

Results in:

Hello from firstAction!
Another hello from secondAction!

Package Stability and Maintainers

This package is considered stable. The maintainers of this package are:

License

This package is licensed under the MIT-License.