dczajkowski/colloquy

A framework-agnostic package for managing persistent conversation contexts.

0.3.0 2018-11-26 04:39 UTC

This package is auto-updated.

Last update: 2024-04-26 15:34:23 UTC


README

68747470733a2f2f636f6c6c6f7175792e6e65746c6966792e636f6d2f6173736574732f696d672f6c6f676f2d746578742e737667

A framework-agnostic package for managing persistent conversation contexts.

Latest Stable Version License Scrutinizer Code Quality Code Coverage Build Status

Installation

composer install dczajkowski/colloquy

Usage

Using in auto-mode with annotations

Identifier resolver declaration

<?php

namespace App;

class SessionIdentifierResolver implements \Colloquy\IdentifierResolverInterface
{
    public function get($controller): string
    {
        return // code to get session id 
    }
}

Context binding

<?php

\Colloquy\Colloquy::bind(
    'session',
    new \App\SessionIdentifierResolver,
    new \Colloquy\Drivers\FileDriver($pathToWritableDirectory)
);

Use in a controller

<?php

namespace App\Http\Controllers;

/** @ColloquyContext('session') */
class FormController
{
    use \Colloquy\ColloquyContexts;
    
    /** @ColloquyPersist */
    protected $user;

    /** @ColloquyBegin */
    private function step1()
    {
        $this->user = new \App\Models\User;
    }

    private function step2()
    {
        $this->user->name = 'John';
    }

    /** @ColloquyEnd */
    private function step3()
    {
        echo $this->user->name; // John
    }
}

Manual Use

<?php

use Colloquy\Colloquy;
use Colloquy\Drivers\FileDriver;

class User
{
   private $name;
   
   public function __construct(string $name)
   {
       $this->name = $name;
   }
}

/** Starting a Conversation */

$wrapper = new Colloquy(new FileDriver('storage'));

$homeContext = $wrapper->context('Home');
$formContext = $wrapper->context('Form');

/** Primitive types */

$homeContext->add('Joe', 'name');
$homeContext->add('ilovecats', 'password');
$formContext->add('Jane', 'name');

$name = $homeContext->get('name'); // Joe

$homeContext->set('John', 'name');

$name = $homeContext->get('name'); // John

/** Objects */

$user = new User('Jack');

$homeContext->add($user, 'user');

var_dump($user); // User { name: "Jack" }

$user = $homeContext->get('user');

var_dump($user); // User { name: "Jack" }

/** Ending a Conversation */

$wrapper->end('Form');
$wrapper->end('Home');

Contribution

Contributions are very welcome. If you want, just drop a PR with any feature you'd like to see.

Authors

The library was made by Dariusz Czajkowski, Grzegorz Tłuszcz, Aleksander Kuźma, Karol Piwnicki.

License

The Colloquy package is open-sourced software licensed under the MIT license.